Bitte um Nachhilfe: Ein WLAN-Router plus 1 Linux-PC und 1 FreeBSD-PC

Also eigentlich reicht da eine defaultroute bei dem FreeBSD auf den linux-pc (Genaugenommen auf die ip vom Lan-Interface) und vom Linux-PC auf den Zyxel (Sollte per DHCP kommen). Dann noch das IP-Masquerading/NAT auf dem Linux PC und es sollte laufen.
Bei dem NAT ist es wichtig den richtigen Interfacenamen anzugeben, Linux ist da ja je nach modell oft etwas eigenwillig.

Was @morromett da noch plant erschließt sich mir nicht so direkt. Statische routen müsste man bei diesem konstrukt das ich so selbst schon mehrfach gebaut hab nur dann setzen wenn man das mit dem NAT nicht macht, und diese dann halt auf dem Zyxel was halt nicht geht.
Das FreeBSD muss nur wissen das es alle pakete an das Linux ding gibt als route und das linux das es alles ans zyxel gibt.

Wenns nicht funktioniert, wären die ausgaben von ifconfig bzw ip a von beiden system villeicht noch hilfreich und alle einträge der routing tabelle und alle arp-einträge, am besten mal in einem Post zusammengefasst

Und einmal ein ping und ein traceroute als ausgabe hier
-> Linux -> Zyxel (nur ping)
-> Linux 8.8.8.8
-> FreeBSD Linux (Nur ping)
-> FreeBSD Zyxel
-> FreeBSD 8.8.8.8

Evtl. auch interessant: Welches linux verwendest du, wie konfigurierst du die statischen ip adressen dort und das wifi? Networkmanager, systemd-networkd oä

Hast du noch ein anderes system das du statt dem freebsd an den switch hängen kannst um diese dubiosen schon lokalen probleme zu debuggen?
 
Zuletzt bearbeitet:
Was @morromett da noch plant erschließt sich mir nicht so direkt. Statische routen müsste man bei diesem konstrukt das ich so selbst schon mehrfach gebaut hab nur dann setzen wenn man das mit dem NAT nicht macht, ...
Ich plane nichts. Wenn der TE es mit NAT machen will bzw. machen kann, dann ist das OK.
Mein Beitrag war nur eine Reaktion auf die Mitteilung des TE, dass er die default route ändern will/muss.
Wenn man keine definierte Route hat und die vorhandene default route benutzen will/muss, kann man je nach Topologie, im gateway der default route, eine statische Route konfigurieren/benutzen. Z. B.:
Code:
:~$ ip r
default via 192.168.178.1 dev wlan0 proto dhcp src 192.168.178.56 metric 150  
192.168.178.0/24 dev wlan0 proto kernel scope link src 192.168.178.56 metric 150
Code:
:~$ ip r g 192.168.179.1
192.168.179.1 via 192.168.178.1 dev wlan0 src 192.168.178.56 uid 1000 
    cache
Code:
:~$ nc -zvn 192.168.179.1 53
(UNKNOWN) [192.168.179.1] 53 (domain) open
 
Ich plane nichts. Wenn der TE es mit NAT machen will bzw. machen kann, dann ist das OK.
Mein Beitrag war nur eine Reaktion auf die Mitteilung des TE, dass er die default route ändern will/muss.
Wenn man keine definierte Route hat und die vorhandene default route benutzen will/muss, kann man je nach Topologie, im gateway der default route, eine statische Route konfigurieren/benutzen. Z. B.:
Code:
:~$ ip r
default via 192.168.178.1 dev wlan0 proto dhcp src 192.168.178.56 metric 150 
192.168.178.0/24 dev wlan0 proto kernel scope link src 192.168.178.56 metric 150
Code:
:~$ ip r g 192.168.179.1
192.168.179.1 via 192.168.178.1 dev wlan0 src 192.168.178.56 uid 1000
    cache
Code:
:~$ nc -zvn 192.168.179.1 53
(UNKNOWN) [192.168.179.1] 53 (domain) open
Ja gut aber das der Zyxel SoHo Router mit maximal nen mäßigen Webgui das nicht kann hatten wir ja nun schon mehrfach festgestellt ;)
 
Hello again!
Ich bin ein kleines Stück weitergekommen: Der FreeBSD-Rechner kann jetzt das Gateway-Interface auf dem Linux-Rechner anpingen. Das beweist mir, daß das IP-Forwarding auf Linux funktioniert. Leider klappt immer noch kein ping vom FreeBSD auf 8.8.8.8, bspw.
Ich habe versucht, NAT mit diesem Befehl auf dem Linux-Rechner zu aktivieren:
iptables -t nat -A POSTROUTING -o 10.0.0.100 -j MASQUERADE
Es scheint also eigentlich nicht mehr viel zu fehlen ;)
Unabhängig davon zum FreeBSD: Nach dem Booten hat er eine Verbindung zum MiFi-Router. Das sollte auch so bleiben. Auch um mehr Verständnis zu gewinnen, gehe ich also nach dem Booten so vor:
1. ifconfig wlan0 down
2. route del default
3. route flush
4. route add default 10.0.0.100
Damit sollte auf dem FreeBSD-Rechner alles getan sein, was nötig ist, damit er einen Internet-Zugang über den Linux-Kollegen erhält. Aber irgendwie könnte es sein, daß die Rückroute fehlt, daß die Pakete also durchgehen, aber die Antwort irgendwo versickert...
 
Also eigentlich reicht da eine defaultroute bei dem FreeBSD auf den linux-pc (Genaugenommen auf die ip vom Lan-Interface) und vom Linux-PC auf den Zyxel (Sollte per DHCP kommen). Dann noch das IP-Masquerading/NAT auf dem Linux PC und es sollte laufen.
Bei dem NAT ist es wichtig den richtigen Interfacenamen anzugeben, Linux ist da ja je nach modell oft etwas eigenwillig.

Was @morromett da noch plant erschließt sich mir nicht so direkt. Statische routen müsste man bei diesem konstrukt das ich so selbst schon mehrfach gebaut hab nur dann setzen wenn man das mit dem NAT nicht macht, und diese dann halt auf dem Zyxel was halt nicht geht.
Das FreeBSD muss nur wissen das es alle pakete an das Linux ding gibt als route und das linux das es alles ans zyxel gibt.

Wenns nicht funktioniert, wären die ausgaben von ifconfig bzw ip a von beiden system villeicht noch hilfreich und alle einträge der routing tabelle und alle arp-einträge, am besten mal in einem Post zusammengefasst

Und einmal ein ping und ein traceroute als ausgabe hier
-> Linux -> Zyxel (nur ping)
-> Linux 8.8.8.8
-> FreeBSD Linux (Nur ping)
-> FreeBSD Zyxel
-> FreeBSD 8.8.8.8

Evtl. auch interessant: Welches linux verwendest du, wie konfigurierst du die statischen ip adressen dort und das wifi? Networkmanager, systemd-networkd oä

Hast du noch ein anderes system das du statt dem freebsd an den switch hängen kannst um diese dubiosen schon lokalen probleme zu debuggen?
Sorry an alle, habe noch nicht alle Nachrichten aufarbeiten und würdigen können!
Aber bezüglich der Connectivity kann ich jetzt sagen: Ja, von FreeBSD auf Linux 10.0.0.100 (lokales wlan0 auf Linux) kann ich pingen, das ist schon mal super! Aber auf 10.0.0.1, den Zyxel-Router, nicht! Ebenso nicht auf 8.8.8.8, klar.
 
Ich habe versucht, NAT mit diesem Befehl auf dem Linux-Rechner zu aktivieren:
iptables -t nat -A POSTROUTING -o 10.0.0.100 -j MASQUERADE
BTW: Mit der Optiom "-o" wird i. d. R das output-Interface angegeben. Schau mal mit z. B.:
Code:
iptables -nvx -L -t nat
nach, ob der Zähler für diese/deine iptables-Regel, Traffic/Datenverkehr anzeigt.
 
Ja, von FreeBSD auf ...Aber auf 10.0.0.1, den Zyxel-Router, nicht! Ebenso nicht auf 8.8.8.8, klar.
Wie sind auf deinem FreeBSD, die Ausgaben von:
Code:
arping -c 3 -i <Interface> 10.0.0.1
arp-scan -i <Interface> --localnet
arp -a
route -4n get 8.8.8.8
netstat -4nr
pfctl -v -s nat
(Interface anpassen und ohne spitze Klammern. arp-scan bzw. arping evtl. noch installieren)?
Code:
:~ # pkg info arping
arping-2.25
#
:~ # pkg info arp-scan
arp-scan-1.10.0
 
Oho! Da habe ich wohl einen Fehler gemacht! Ich muß mal einen Reboot machen, ich weiß nämlich nicht, wie ich die nat-Befehle zurücksetzen kann.
 
BTW: Mit der Optiom "-o" wird i. d. R das output-Interface angegeben. Schau mal mit z. B.:
Code:
iptables -nvx -L -t nat
nach, ob der Zähler für diese/deine iptables-Regel, Traffic/Datenverkehr anzeigt.
┌──(root㉿ZenBook14)-[/home/hmb]
Code:
└─# iptables -nvx -L -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 479 packets, 40647 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
       0        0 MASQUERADE  all  --  *      10.0.0.1  0.0.0.0/0            0.0.0.0/0           
0 0 MASQUERADE all -- * 10.0.0.1 0.0.0.0/0 0.0.0.0/0
 
Ich habe jetzt zuletzt diese Regel getestet:
iptables -t nat -A POSTROUTING -o 10.0.0.1 -j MASQUERADE
Hierbei ist 10.0.0.1 der Zyxel-Router (client-seitig). Der LInux-Rechner hat als eigene GW-Adresse 10.0.0.100. Wäre demnach diese NAT-Regel auf den NR2301 korrekt?
 
Der Zähler für pkts und bytes sagt 0 Traffic. Schau mit "ip a" bzw. mit "ip r g 10.0.0.1" welches output-Interface (dev) (für source-NAT) benutzt wird. Z. B.:
Code:
:~$ ip r g 192.168.33.44
192.168.33.44 dev wg1 src 192.168.33.14 uid 1000
    cache
Code:
:~$ ip r g 192.168.178.66
192.168.178.66 dev eth0 src 192.168.178.4 uid 1000
    cache
 
Wie sind auf deinem FreeBSD, die Ausgaben von:
Code:
arping -c 3 -i <Interface> 10.0.0.1
arp-scan -i <Interface> --localnet
arp -a
route -4n get 8.8.8.8
netstat -4nr
pfctl -v -s nat
(Interface anpassen und ohne spitze Klammern. arp-scan bzw. arping evtl. noch installieren)?
Code:
:~ # pkg info arping
arping-2.25
#
:~ # pkg info arp-scan
arp-scan-1.10.0
arping und arp-scan müßte ich erst installieren.
arp -a bringt 3 Zeilen, die mit Fragezeichen beginnen.
route -4n get 8.8.8.8: Das kann ich als Screencopy schicken, wenn ich wieder per SSH auf den FreeBSD komme, was momentan nicht geht, seltsamerweise. Gestern lief das einwandfrei.

An der Stelle muß ich jetzt nochmal alles durchgehen und melde mich dann wieder.
 
Okay, ich habe jetzt folgendes gemacht:
Auf FreeBSD starte ich nach dem Booten ein Script von Hand, das mir erlaubt, den Weg über den Switch -> Linux-Rechner -> Router ins Internet zu testen.
Das Script sieht so aus:
#/bin/sh

Code:
ifconfig wlan0 down
route del default
route flush
route add default 10.0.0.1
route add 10.0.0.100 10.10.10.1
Nach dem Booten des Linux-Rechners führe ich nur diesen Befehl aus:
iptables -t nat -A POSTROUTING -o 10.0.0.1 -j MASQUERADE
10.0.0.1 ist der NR2301. Ich hoffe, das ist so korrekt. Vorher hatte ich hier 10.0.0.100 (wlan0 auf Linux), aber das hat ja nicht funktioniert. IP-Forwarding sollte automatisch aktiviert sein.
Auf dem FreeBSD ist ein ping 10.0.0.100 möglich, es startet nach 18 s Bedenkzeit erfolgreiche Paketzustellungen zu melden.
Ein ping-Versuch auf 10.0.0.1 (auch von FreeBSD aus) bringt hingegen Network is down.

arp -an auf dem FreeBSD (T420s) ergibt:

┌──(hmb㉿T420s)-[~]
Code:
└─$ arp -an
? (10.10.10.10) at f0:de:f1:80:3a:be on em0 permanent [ethernet]
? (10.10.10.1) at c8:a3:62:b4:d4:ae on em0 expires in 1084 seconds [ethernet]
? (10.0.0.111) at 00:24:d7:e3:01:d4 on wlan0 permanent [ethernet]

Das ist wohl das Problem mit der Rückroute. Könnten wir an dem Punkt nochmal ansetzen? Wenn ich das richtig verstehe, müßte ich doch auf dem Linux-Rechner eine Rückroute hinzufügen. Wie definiere ich die? Danke für Eure Geduld!
 
Linux (Zenbook14):

┌──(hmb㉿ZenBook14)-[~]
└─$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether c8:a3:62:b4:d4:ae brd ff:ff:ff:ff:ff:ff
inet 10.10.10.1/24 brd 10.10.10.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::384d:c6f0:33e5:2785/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4c:79:6e:18:eb:a1 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global dynamic noprefixroute wlan0
valid_lft 82763sec preferred_lft 82763sec
inet6 2a02:3038:60e:3a9e:44c4:d7a3:1467:7c2/64 scope global dynamic noprefixroute
valid_lft 14364sec preferred_lft 14364sec
inet6 fe80::ab9:2f87:6fd:3942/64 scope link noprefixroute
valid_lft forever preferred_lft forever

┌──(hmb㉿ZenBook14)-[~]
└─$ ip r
default via 10.0.0.1 dev wlan0 proto dhcp src 10.0.0.100 metric 600
10.0.0.0/24 dev wlan0 proto kernel scope link src 10.0.0.100 metric 600
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.1 metric 100

┌──(hmb㉿ZenBook14)-[~]
└─$ ip n s
10.0.0.1 dev wlan0 lladdr 5c:64:8e:fa:d1:7a REACHABLE
10.10.10.10 dev eth0 lladdr f0:de:f1:80:3a:be STALE
2a02:3038:60e:3a9e:4c4e:4eff:fe4e:4e4e dev wlan0 lladdr 5c:64:8e:fa:d1:7a router REACHABLE
fe80::5e64:8eff:fefa:d17a dev wlan0 lladdr 5c:64:8e:fa:d1:7a router REACHABLE
fe80::22a:84ff:fe7d:c89a dev wlan0 lladdr 00:2a:84:7d:c8:9a STALE
fe80::caf3:16c8:e42f:66e7 dev wlan0 lladdr f4:02:28:99:23:0a STALE
fe80::f2de:f1ff:fe80:3abe dev eth0 lladdr f0:de:f1:80:3a:be STALE

FreeBSD (T420s):

┌──(hmb㉿T420s)-[~]
└─$ ifconfig
em0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
options=4e524bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,LRO,WOL_MAGIC,VLAN_HWFILTER,VLAN_
HWTSO,RXCSUM_IPV6,TXCSUM_IPV6,HWSTATS,MEXTPG>
ether f0:de:f1:80:3a:be
inet 10.10.10.10 netmask 0xffffff00 broadcast 10.10.10.255
inet6 fe80::f2de:f1ff:fe80:3abe%em0 prefixlen 64 scopeid 0x1
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
groups: lo
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
wlan0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=0
ether 00:24:d7:e3:01:d4
inet 10.0.0.111 netmask 0xffffff00 broadcast 10.0.0.255
groups: wlan
ssid "" channel 36 (5180 MHz 11a ht/40+)
regdomain FCC country US authmode WPA2/802.11i privacy ON
deftxkey UNDEF AES-CCM 2:128-bit txpower 17 bmiss 10 mcastrate 6
mgmtrate 6 scanvalid 60 ampdulimit 8k ampdudensity 4 -amsdutx amsdurx
shortgi -stbc -ldpc -uapsd wme roaming MANUAL
parent interface: iwn0
media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
status: no carrier
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
ue0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
ether 02:80:37:ec:02:00
media: Ethernet autoselect
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

┌──(hmb㉿T420s)-[~]
└─$ netstat -4nr
Routing tables

Internet:
Destination Gateway Flags Netif Expire
default 10.0.0.1 UGS wlan0
10.0.0.100 10.10.10.1 UGHS em0
10.0.0.111 link#2 UHS lo0
10.10.10.0/24 link#1 U em0
10.10.10.10 link#2 UHS lo0
127.0.0.1 link#2 UH lo0
 
Du hast in FreeBSD eine default route mit dem wlan0-Interface, obwohl "status: no carrier"?
In FreeBSD ist die Route zum Host 10.0.0.100 über das Lan-Interface em0:
Code:
10.0.0.100         10.10.10.1         UGHS            em0
BTW: Wenn Du IPv6 nicht brauchst, kannst Du IPv6 in Linux und in FreeBSD deaktivieren.
 
Teste ob der arping zum gateway (10.0.0.1) der default route, via wlan0-Interface funktioniert:
Code:
arping -c 3 -i wlan0 10.0.0.1
Wenn ja, dann:
Code:
mtr -4nr -I wlan0 -c 1 8.8.8.8
aus FreeBSD testen.
 
arping muß ich erst installieren, dazu muß ich einen Reboot machen. Bevor ich das tue, will ich kurz sagen, daß ich das Script auf FreeBSD angepaßt habe. Der route add-Befehl ist jetzt mit if em0 versehen, damit er nicht über das heruntergefahrene Interface geht.
So, und jetzt reboot, arping drauf und dann folgt die Antwort auf Deine letzte Frage ;)
 
root@T420s:~ # arping -c 3 -i wlan0 10.0.0.1
Code:
arping: libnet_init(LIBNET_LINK, wlan0): libnet_check_iface(): wlan0 is down
root@T420s:~ #

Uff, mtr muß ich auch installieren. Sekunde...
 
Die Konfiguration sieht so aus: Wenn der FreeBSD startet, ist er zunächst so konfiguriert, daß er automatisch eine Verbindung ins Internet herstellt, indem er über den NR2301 geht. Soweit so gut, daher hat er auch sein wlan0-Interface.
Ich will jetzt aber eine Situation herstellen, in der er den NR2301 nicht sehen kann, sondern stattdessen den Linux-Rechner über Ethernet-Kabel kontaktiert, um dessen Verbindung ins Internet zu nutzen (die dann auch über den NR2301 erfolgt).
Das Script, mit dem ich nach dem Booten des FreeBSD umschalte, sieht so aus:

#/bin/sh

Code:
ifconfig wlan0 down
route del default
route flush
route add default 10.0.0.1 
route add 10.0.0.100 10.10.10.1

Das Problem ist, daß nach dem Ausführen dieses Scripts die default route auf wlan0 aufgesetzt wird, wie Du ja festgestellt hast. Ich wollte daraufhin den Bfehl ändern in

route add default 10.0.0.1 if em0

was aber auf FreeBSD nicht funktioniert. Deswegen läßt mich das Script mit dieser falschen Route zurück. Das müßte ich also erstmal irgendwie reparieren.
 
was aber auf FreeBSD nicht funktioniert. Deswegen läßt mich das Script mit dieser falschen Route zurück. Das müßte ich also erstmal irgendwie reparieren.
Evtl. kannst Du das mit einem Script über die rc.conf-Datei, ohne Neustart (reboot) machen. Z. B. in etwa so oder ähnlich:
Code:
sysrc ifconfig_wlan0="NOSYNC DOWN"
sysrc defaultrouter="10.0.0.1"
Code:
service routing restart
 
Zurück
Oben