Erstellt vor 9 Jahren

Zuletzt geändert vor 6 Jahren

#504 new enhancement

remove_dsld und ata mode

Erstellt von: reiffert Verantwortlicher:
Priorität: low Meilenstein: freetz-future
Komponente: other Version: devel
Stichworte: Beobachter:
Product Id: Firmware Version:

Beschreibung (zuletzt geändert von oliver)

Meine Fritzbox 7270 klemmt an einem Kabel-Modem und bekommt das Internet ueber LAN1. Ich habe wiki:patches/remove_dsld ausprobiert und hier sind meine Erkenntnisse, um weiter diskutiert und ausgearbeitet zu werden.

  • remove_dsld removed den dsld tatsaechlich
  • Auf wiki:patches steht:
    Die Box kann dann nur noch als IP-Client verwendet werden.

Das ist so nicht richtig. Mehr im naechsten Punkt, zunaechst:
Wenn ich die Box als IP-Client
betreibe, schaltet der multid bzw cpmaccfg die Switch-Konfiguration in den Modus normal um, d.h.:

/var/mod/root # cpmaccfg get_switch_mode_current
Devices: 1
WAN is port: (none)
Device 1: name=eth0, portmask=0x2f

In diesem Falle sehe ich per tcpdump arp Requests des Provider Routers und multid bezieht eine Adresse des Providers, wenn ich gleichzeitig
IP-Adresse automatisch über DHCP beziehen
in der AVM Oberflaeche ausgewaehlt habe. Da ich die PC's die an LAN-2,3,4 klemmen, weiterhin per NAT ins Internet bringen moechte, kommt diese Option fuer mich nicht Frage.
Setze ich fuer diesen Fall manuell:

/var/mod/root # cpmaccfg ssm ata
Setting switch_mode to 'ata' (2).
/var/mod/root # cpmaccfg gsmc
Devices: 2
WAN is port: 0
Device 1: name=wan, portmask=0x21
Device 2: name=eth0, portmask=0x2e
/var/mod/root #

und starte den multid neu, so sehe ich per cpmaccfg wieder nur den normal mode.

An dieser Stelle waere es schoen, wenn der multid die cpmaccfg so laesst wie sie ist und man
ihm in irgendeiner Form mitteilen koennte, dass er das WAN Interface per dhcp konfigurieren soll.

  • Internetverbindung selbst aufbauen (NAT-Router mit PPPoE oder IP)

Waehle ich anstelle von IP-Client die o.g. Option im AVM-Webinterface, habe ich das Problem, das multid keine Adresse fuer das WAN Interface bezieht, jedoch sieht die cpmaccfg-Konfiguration gut aus:

/var/mod/root # cpmaccfg gsmc
Devices: 2
WAN is port: 0
Device 1: name=wan, portmask=0x21
Device 2: name=eth0, portmask=0x2e
/var/mod/root #

Damit das WAN-Interface per dhcp konfiguriert wird, habe ich den udhcpc in busybox aktiviert und rufe ihn wie folgt auf:

udhcpc -S -f -i wan -s /var/tmp/simple.script -b
/var/mod/root # cat /var/tmp/simple.script
#!/bin/sh
# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
        deconfig)
                /sbin/ifconfig $interface 0.0.0.0
                ;;

        renew|bound)
                /sbin/ifconfig $interface $ip $BROADCAST $NETMASK

                if [ -n "$router" ] ; then
                        echo "deleting routers"
                        while route del default gw 0.0.0.0 dev $interface ; do
                                :
                        done

                        for i in $router ; do
                                route add default gw $i dev $interface
                        done
                fi

                echo -n > $RESOLV_CONF
                [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
                for i in $dns ; do
                        echo adding dns $i
                        echo nameserver $i >> $RESOLV_CONF
                done
                ;;
esac

exit 0
/var/mod/root #

Das Script stammt aus dem udhcp Paket. Hier habe ich das Problem, dass ich mich in Freetz zu wenig auskenne ob udhcpc ordentlich auswaehlbar in make menuconfig erscheinen zu lassen oder/und das Script automatisch ins Image pflegen zu lassen.
Jedenfalls war es mir auf diesem Weg moeglich, zusammen mit iptables, das WAN-Interface mit einer IP-Adresse zu versehen und die anderen Rechner an LAN-2,3,4 ins Netz zu maskieren:

modprobe iptable_nat
modprobe ip_tables
modprobe ipt_MASQUERADE
iptables -t nat -I POSTROUTING -o wan -j MASQUERADE
  • Ist die Aufnahme von udhcpc in Freetz sinnvoll? Laesst sich das Wan-Interface auch anders per dhcp gezielt konfigurieren?

Anhänge (2)

busybox.diff (1.0 KB) - hinzugefügt von MaxMuster vor 9 Jahren.
busybox_udhcpc.diff (1.2 KB) - hinzugefügt von reiffert vor 9 Jahren.

Alle Anhänge herunterladen als: .zip

Änderungshistorie (18)

comment:1 Geändert vor 9 Jahren durch reiffert

Meine rc.custom sieht jetzt wie folgt aus:

modprobe iptable_nat
modprobe ip_tables
modprobe ipt_MASQUERADE
modprobe ip_nat
modprobe iptable_filter
modprobe ipt_REJECT
modprobe xt_tcpudp
modprobe xt_MARK
modprobe xt_mark
modprobe xt_state



iptables -t nat -I POSTROUTING -o wan -j MASQUERADE
iptables -t filter -I INPUT -p tcp --dport 222 -j ACCEPT
iptables -t filter -I INPUT -i lan -j ACCEPT
iptables -t filter -I INPUT -i lo -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -j REJECT --reject-with icmp-port-unreachable
iptables -P INPUT DROP

cat << EOF > /var/tmp/simple.script
#!/bin/sh

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "\$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ -n "\$broadcast" ] && BROADCAST="broadcast \$broadcast"
[ -n "\$subnet" ] && NETMASK="netmask \$subnet"

case "\$1" in
        deconfig)
                /sbin/ifconfig \$interface 0.0.0.0
                ;;

        renew|bound)
                /sbin/ifconfig \$interface \$ip \$BROADCAST \$NETMASK

                if [ -n "\$router" ] ; then
                        echo "deleting routers"
                        while route del default gw 0.0.0.0 dev \$interface ; do
                                :
                        done

                        for i in \$router ; do
                                route add default gw \$i dev \$interface
                        done
                fi

                echo -n > \$RESOLV_CONF
                [ -n "\$domain" ] && echo search $domain >> \$RESOLV_CONF
                echo nameserver 10.8.0.1 >> \$RESOLV_CONF

                ;;
esac

exit 0
EOF
chmod +x /var/tmp/simple.script
udhcpc -S -f -i wan -s /var/tmp/simple.script -b &
sleep 5 && /etc/init.d/rc.openntpd restart
/etc/init.d/rc.openvpn restart

Anmerkung: Ich verwende openvpn um DNS-Queries an meinen eigenen Nameserver zu schicken.
Openvpn kommt natuerlich erst hoch, wenn die Uhrzeit gestellt ist (Zertifikat-basiert).
Deswegen openntpd restart, openvpn restart und Modifikation des simple.script's im Bereich nameserver. Das Paket Iptables-CGI dependet auf 2.6.13.1, ich habe allerdings 2.6.19.2 und sehe derzeit keine Moeglichkeit das zu installieren, deswegen die Firewall Regeln in rc.custom

comment:2 Geändert vor 9 Jahren durch MaxMuster

  • Komponente von avm nach other geändert
  • Priorität von normal nach low geändert
  • severity von normal nach trivial geändert
  • Typ von defect nach enhancement geändert

Hi,

warum hast du das denn als "defect" eingestellt? Ich mach mal ein "enhancment" draus, wenns recht ist .

Für den "Normaluser" heißt die Kurzform sicher: dsld weg —> es geht nur "IP-CLient" mit der Box. Dass man natürlich die Funktionen des dsld (speziell NAT und Firewall) nachbilden kann ist klar. (Die Aussage: "… nur IP-Client, es sei denn, man würde noch folgendes tun…" wäre zu viel.)

Zu der udhcp-Frage: Im Ticket #333 habe ich mal in der Richtung was begonnen, wo auch multid noch entfernt wurde. Die Verbindung (per pppoe) macht da zwar pppd, abder für den DHCP-Server habe ich udhcpd mit drin.

Nur auf die Schnelle mal ein diff für "udhcpc"mit dran.

Geändert vor 9 Jahren durch MaxMuster

comment:3 Antwort: Geändert vor 9 Jahren durch oliver

Hab ich das oben richtig verstanden, dass der multid die Änderung durch cpmaccfg überschreibt? Wie ist denn die Startreihenfolge oder macht der das im Betrieb?

comment:4 als Antwort auf: ↑ 3 ; Antwort: Geändert vor 9 Jahren durch reiffert

Replying to oliver:

Hab ich das oben richtig verstanden, dass der multid die Änderung durch cpmaccfg überschreibt? Wie ist denn die Startreihenfolge oder macht der das im Betrieb?

Es sieht so aus: Box im IP-Client Mode:

/var/mod/root # cpmaccfg gsmc
Devices: 1
WAN is port: (none)
Device 1: name=eth0, portmask=0x2f
/var/mod/root # cpmaccfg ssm ata
Setting switch_mode to 'ata' (2).
/var/mod/root # cpmaccfg gsmc
Devices: 2
WAN is port: 0
Device 1: name=wan, portmask=0x21
Device 2: name=eth0, portmask=0x2e
/var/mod/root # multid -s
/var/mod/root # multid -U -P -t
/var/mod/root # cpmaccfg gsmc
Devices: 1
WAN is port: (none)
Device 1: name=eth0, portmask=0x2f
/var/mod/root #   

Startreihenfolge k.A.

Geändert vor 9 Jahren durch reiffert

comment:5 Geändert vor 9 Jahren durch oliver

Ja, das ist genau das was ich meinte. Der multid setzt beim Start die Netzwerkeinstellungen (zurück).

comment:6 als Antwort auf: ↑ 4 Geändert vor 9 Jahren durch MaxMuster

Replying to reiffert:
Wenn multid die Einstellung ändert: Gibt das im laufenden Betrieb denn Probleme? Oder macht der "multid" das wohl nur bei seinem Start? Denn der ist ja ständig aktiv und "wurschtelt" auch in den Netzwerkeinstellungen rum.
Ein Beispiel: Wenn ich OpenVPN im TAP-Modus nutze, muss ich das TAP nach dem Starten vom VPN händisch per "brctl" bridgen. Trage ich das tap0-Interface aber in der ar7.cfg unter brinterfaces ein, so macht multid das, sobald das Interface da ist. Ist insofern zwar nett, aber wenn der im laufenden Betrieb dann auch mal die Switch-Einstellung nach seinen Vorstellungen "korrigiert" wäre das natürlich extrem unschön.

comment:7 Geändert vor 9 Jahren durch oliver

(In [3547]) * busybox: Add option to include udhcp client (refs #504)

comment:8 Antwort: Geändert vor 9 Jahren durch pklaus

Extrem praktisch z.B. auch in Uni-Netzen: Ich wohne im Wohnheim mit Uni-Netz (100Mbit, IP per DHCP), möchte aber keine Bridge mit dem Rest des Wohnheims. Also: FritzBox mit dem einem Interface an Uni-Netz angeschlossen (Dhcp client holt sich IP) und darüber dann NAT, so dass von außen erst mal kein Port erreichbar ist. So der Plan. Ist vermutlich auch mit der hier angesprochenen Thematik irgendwie machbar.

Wäre es aber hier nicht besser, den dsld zu behalten, kann der nicht NAT- und Firewall-Funktion übernehmen?!

comment:9 als Antwort auf: ↑ 8 Geändert vor 9 Jahren durch MaxMuster

Replying to pklaus:
Das ist eigentlich eine Frage fürs Forum und gehört nicht ins TRAC. Dennoch eine kurze Antwort: Ja, der dsld macht genau das: "Firewall" und NAT, auch wenn man über Ethernet ins Netz geht ("Internet über LAN"). Entfernen ist also nichts für dich (es sei denn, du bildest das mit iptables nach).

comment:10 Antwort: Geändert vor 9 Jahren durch oliver

  • Beschreibung geändert (Diff)

Sollen wir aus dem Ticket hier noch was mitnehmen? z.B. ein "udhcpc-cgi" Package?

Dass der multid die cpmaccfg-Einstellungen überschreibt daran können wir nichts machen. Als Beispiel sollte das Skript über die Suche zu finden sein.

comment:11 als Antwort auf: ↑ 10 Geändert vor 9 Jahren durch cinereous

Replying to oliver:

Sollen wir aus dem Ticket hier noch was mitnehmen? z.B. ein "udhcpc-cgi" Package? 

Anscheiend besteht wohl kein interesse

comment:12 Geändert vor 9 Jahren durch oliver

  • Meilenstein von freetz-1.2 nach freetz-1.3 geändert

Ich verschiebe das mal auf den nächsten Milestone. Ein udhcpc Package fände ich nicht schlecht.

comment:13 Geändert vor 9 Jahren durch reiffert

Warum bekomme ich als Ticketanleger keine E-Mails mehr von diesem Ticket?

comment:14 Geändert vor 9 Jahren durch reiffert

Hi. Hier mal die aktuelle Fassung meiner rc.custom,
damit kann man remove_dsld machen, das wan-Interface
bezieht per dhcp eine Adresse vom Kabel-Modem und
eine Basic Netfilter Firewall ist dabei, die VOIP
und ssh erlaubt.

Hinweis: Im Fritz Menu Internet→Zugangsdaten ist
ausgewaehlt:

(X) Internetverbindung selbst aufbauen (NAT-Router mit PPPoE oder IP)

modprobe iptable_nat
modprobe ip_tables
modprobe ipt_MASQUERADE
modprobe ip_nat
modprobe iptable_filter
modprobe ipt_REJECT
modprobe xt_tcpudp
modprobe xt_MARK
modprobe xt_mark
modprobe xt_state



iptables -t nat -I POSTROUTING -o wan -j MASQUERADE
iptables -t filter -I INPUT -i lan -j ACCEPT
iptables -t filter -I INPUT -i lo -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -I INPUT -p tcp --dport 5060 -j ACCEPT
iptables -t filter -I INPUT -p udp --dport 5060 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -j REJECT --reject-with icmp-port-unreachable
iptables -P INPUT DROP


cat << EOF > /var/tmp/simple.script
#!/bin/sh

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "\$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ -n "\$broadcast" ] && BROADCAST="broadcast \$broadcast"
[ -n "\$subnet" ] && NETMASK="netmask \$subnet"

case "\$1" in
        deconfig)
                /sbin/ifconfig \$interface 0.0.0.0
                ;;

        renew|bound)
                /sbin/ifconfig \$interface \$ip \$BROADCAST \$NETMASK

                if [ -n "\$router" ] ; then
                        echo "deleting routers"
                        while route del default gw 0.0.0.0 dev \$interface ; do
                                :
                        done

                        for i in \$router ; do
                                route add default gw \$i dev \$interface
                        done
                fi

                echo -n > \$RESOLV_CONF
                [ -n "\$domain" ] && echo search $domain >> \$RESOLV_CONF
                for i in $dns ; do
                        echo adding dns $i
                        echo nameserver $i >> $RESOLV_CONF
                done


                ;;
esac

exit 0
EOF
chmod +x /var/tmp/simple.script
udhcpc -S -f -i wan -s /var/tmp/simple.script -b &

comment:15 Geändert vor 9 Jahren durch oliver

  • Beschreibung geändert (Diff)

comment:16 Geändert vor 6 Jahren durch cuma

  • Meilenstein von freetz-1.3 nach freetz-future geändert
Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.