
Die Umgebung ist größtenteils FreeBSD und sieht folgendermaßen aus:
HOST_A <-> ROUTER <-> LOKI <-> HOST_B
Zumindest möchte ich in der Lage sein, den ROUTER von HOST_B aus anzupingen.
- Dem ROUTER wird die IP 10.0.0.1 zugewiesen
- LOKI ist eine Multi-Homed-Maschine, der die IPs 10.0.0.2 und 192.168.200.1 zugewiesen sind
- HOST_B erhält die IP 192.168.200.3
- HOST_A erhält die IP 10.0.0.3
Ich habe das Netzwerk wie oben beschrieben eingerichtet und gateway_enable="YES" zu lokis rc.conf hinzugefügt
netstat -r auf LOKI erzeugt:
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 10.0.0.1 UGS em0
10.0.0.0 link#1 U em0
10.0.0.2 link#1 UHS lo0
loki link#2 UH lo0
192.168.200.0 link#3 U ue0
192.168.200.1 link#3 UHS lo0
das wie eine gute Routing-Tabelle aussieht und scheinbar in alle Richtungen funktioniert.
netstat -r auf HOST_B erzeugt:
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.200.1 UGS em0
hostb link#2 UH lo0
192.168.200.0 link#1 U em0
192.168.200.3 link#1 UHS lo0
das wie eine weitere gute Routing-Tabelle aussieht, aber nur LOKI sehen kann.
In Summe:
- LOKI kann HOST_A, HOST_B und ROUTER anpingen
- HOST_B kann LOKI anpingen, aber nicht ROUTER oder HOST_A
Einige zusätzliche Hinweise: von HOST_B
ping 10.0.0.1 100% packet loss
In Wireshark auf LOKI, während 10.0.0.1 von HOST_B gepingt wird:
120 40.549564000 192.168.200.3 10.0.0.1 ICMP 98 Echo (ping) request id=0x5a0e, seq=92/23552, ttl=63 (no response found!)
Mir scheint, dass nichts von LOKI zum ROUTER weitergeleitet wird. Was übersehe ich?
Ich habe bestätigt, dass die IP-Weiterleitung stattfindet, indem ich gateway_enable="YES" in /etc/rc.conf auskommentiert und einen Neustart durchgeführt habe.
Dann habe ich die folgenden Befehle auf Loki ausgeführt:
sudo tcpdump -i em0 -nS
sudo tcpdump -i ue0 -nS
um die Aktivität auf den beiden Netzwerkkarten zu überwachen.
Von Hostb aus habe ich Folgendes ausgeführt:
ping 10.0.0.1
die ue0-Schnittstelle auf 192.168.200.1 meldete:
14:44:21.870865 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 21509, seq 0, length 64
Auf der em0-Schnittstelle unter 10.0.0.2 wurde nichts gemeldet.
Dann habe ich Folgendes ausgeführt:
sudo sysctl -w net.inet.ip.forwarding=1
und tatsächlich berichtete em0:
14:58:14.745369 IP 192.168.200.3 > 10.0.0.1: ICMP echo request, id 25861, seq 0, length 64
Aber nein, eine Antwort wie die, die ich bei einem Ping Loki von Hostb bekomme:
14:44:15.724200 IP 192.168.200.3 > 192.168.200.1: ICMP echo request, id 21253, seq 4, length 64
14:44:15.724207 IP 192.168.200.1 > 192.168.200.3: ICMP echo reply, id 21253, seq 4, length 64
Wenn ich den Router von Loki aus anpinge, ist alles in Ordnung:
15:04:55.637839 IP 10.0.0.2 > 10.0.0.1: ICMP echo request, id 46852, seq 3, length 64
15:04:55.638324 IP 10.0.0.1 > 10.0.0.2: ICMP echo reply, id 46852, seq 3, length 64
Irgendwelche Ideen, wie man die Antwort findet?
Antwort1
Warum sind LOKI und HOST_A über einen Router verbunden, wenn sie sich im selben Subnetz befinden? Handelt es sich wirklich um einen Router oder ist es nur ein Switch? (Aus Ihren späteren Kommentaren geht hervor, dass das Gerät zwar ein Router ist, aber nur als Switch zwischen LOKI und HOST_A fungiert.)
Was ist die Routing-Tabelle auf HOST_A und ROUTER? Wenn versucht wird, 192.168.200.1 zu erreichen, warum sollte dann LOKI als Ziel verwendet werden?
Sofern die Routing-Tabelle auf diesen Geräten nicht weiß, dass LOKI für das Subnetz 192 verwendet werden soll, leiten sie einfach an das Standard-Gateway weiter.
Alternativ können Sie die Installation von NAT auf LOKI in Erwägung ziehen. Für viele Dienste kann es den Datenverkehr von HOST_B als Datenverkehr von LOKI kapseln. Da andere Maschinen dorthin gelangen können, kann es den Datenverkehr empfangen und wieder an HOST_B weiterleiten.
Antwort2
Mir scheint, dass LOKI genau das tut, was Sie erwarten. Es hat ein ping
Anforderungspaket am empfangen ue0
und leitet es an weiter em0
. Wenn es ping
am eine Antwort empfangen hat em0
, würde es diese an weiterleiten ue0
.
Das Problem ist der ROUTER. Er empfängt eine ping
Anfrage von 192.168.200.3
auf seiner LAN-Seite (aber das spielt keine Rolle). Wenn er eine ping
Antwort an sendet 192.168.200.3
, schaut er in seine Routing-Tabelle. Die LAN-Seite ist 10.0.0.0/24
(oder ähnlich), also wird das Antwortpaket an das Standard-Gateway des ROUTERS gesendet, das sich auf der WAN-Seite im öffentlichen Internet befindet.
Der ROUTER verwendet Network Address Translation (NAT), um 10.0.0.0/24
hinter Ihrer einzigen echten öffentlichen IP-Adresse (die von Ihrem ISP der WAN-Seite des ROUTERS zugewiesen wird) ein Netzwerk vorzutäuschen. Die RFC1918-Adressen sind privat und können nicht im öffentlichen Internet angezeigt werden. Sie bleiben immer hinter NAT.
Sie könnten eine statische Route in den ROUTER einbauen, damit Ihr ping
Experiment funktioniert, aber das wäre immer noch vom öffentlichen Internet isoliert. Sie könnten NAT auf LOKI aktivieren, in diesem Fall hätten Sie doppeltes NAT zum Internet (was gut funktioniert, aber ziemlich sinnlos ist). Wenn Sie nur eine Firewall der zweiten Ebene benötigen, könnten Sie in Erwägung ziehen, LOKI zu einer Überbrückungsfirewall zu machen und 10.0.0.0/24
auf beiden Netzwerkkarten laufen zu lassen. Wenn Sie internetbasierte Dienste hosten möchten und nur eine öffentliche IP-Adresse haben, müssen Sie Portweiterleitungsregeln auf dem ROUTER verwenden.
Antwort3
Es muss etwas eingestellt werden, um Pakete von Netzwerk A an Netzwerk B weiterzuleiten. Loki, das über Dual Homed verfügt, könnte dies tun, aber es geschieht nicht automatisch. Dabei richten Sie Loki als Router ein und sollten Loki als Standard-Gateway für Host B verwenden. Eine andere Möglichkeit besteht darin, eine permanente Route in der Routing-Tabelle von Host B einzurichten und Loki als Ziel für 10.xxx-Verkehr anzugeben.