Routing zwischen zwei Netzwerkkarten

Routing zwischen zwei Netzwerkkarten

Ich versuche, den Datenverkehr zwischen verschiedenen Netzwerken umzuleiten und bin einer Anleitung gefolgt, die ich hier gefunden habe: https://devconnected.com/how-to-add-route-on-linux/

Hier ist ein Diagramm, das die Anordnung, mit der ich arbeite, hoffentlich angemessen darstellt:

Windows 10              Ubuntu                            Linux
172.31.0.X <----------> 172.31.0.33 (eno1)
                        10.0.40.1 (enp2s0f0) <----------> 10.0.40.10

Ich habe auf dem Windows-PC eine dauerhafte Route eingerichtet, um den gesamten Datenverkehr für 10.0.40.0/24 über 172.31.0.33 zu leiten.

Route Druckausgabe

Die Ubuntu-Maschine ist so eingerichtet, dass der für 10.0.40.0/24 bestimmte Datenverkehr über 10.0.40.1 weitergeleitet wird.

IP-R-Ausgabe

Das Pingen von 10.0.40.10 vom Ubuntu-Rechner funktioniert wie erwartet.

Wenn ich 10.0.40.10 vom Windows-PC aus anpinge, kann ich sehen, dass die ICMP-Nachrichten mit tcpdump an der Schnittstelle 172.31.0.33 auf dem Ubuntu-Rechner ankommen. Auf der Schnittstelle 10.0.40.1 dieses Rechners sehe ich keinen Verkehr. Es scheint, dass der Ubuntu-Rechner den Verkehr nicht wie erwartet weiterleitet. Kann mir jemand erklären, was ich übersehen habe?

Ausgabe von: hinzufügen

iptables -S

für Ubuntu-Rechner:

sudo iptables -S
# Warning: iptables-legacy tables present, use iptables-legacy to see them
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eno1 -j ACCEPT
-A FORWARD -i enp2s0f0 -j ACCEPT
adi@LabBuildServer:~$ sudo iptables-legacy -S
[sudo] password for adi:
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-e925d11be2da -m conntrack --ctstate RELATED,ESTABLISHED -j ACCE                         PT
-A FORWARD -o br-e925d11be2da -j DOCKER
-A FORWARD -i br-e925d11be2da ! -o br-e925d11be2da -j ACCEPT
-A FORWARD -i br-e925d11be2da -o br-e925d11be2da -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i br-e925d11be2da ! -o br-e925d11be2da -j DOCKER-IS                         OLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-e925d11be2da -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN

Ausgabe von:

ip route

auf Linux-Host:

ip route
default via 10.0.40.1 dev br-POE  proto static
10.0.40.0/24 dev br-POE  proto kernel  scope link  src 10.0.40.10

Ubuntu-Maschine:

adi@LabBuildServer:~$ sudo iptables -t nat -L
[sudo] password for adi:
# Warning: iptables-legacy tables present, use iptables-legacy to see them
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
MASQUERADE  all  --  anywhere             anywhere
MASQUERADE  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Antwort1

Die Lösung liegt auf der Hand:

-P FORWARD DROP

In Ihrem iptables-legacyRegelsatz ist die Standardrichtlinie zum Weiterleiten von Paketen auf DROP eingestellt, und in diesem Regelsatz gibt es keine Regel, die das Weiterleiten von Paketen von eno1nach zulässt enp2s0f0, sondern nur das Weiterleiten von/zu einer Bridge-Schnittstelle ...

iptablesDas Mischen verschiedener Iptables ist grundsätzlich keine gute Idee. Sie sollten selbst entscheiden, ob Sie die eine oder die andere verwenden möchten iptables-legacy. Jedes Netzwerkpaket durchläuft beide Regelsätze, was zu ziemlicher Verwirrung führt.

aktualisieren:
Meine Antwort sollte nicht bedeuten, dass Sie die Standardrichtlinie als Akzeptieren installieren müssen, ich habe nur auf den Grund hingewiesen. Natürlich können Sie Regeln hinzufügen, um die Weiterleitung des Datenverkehrs nur an diese bestimmten IPs zuzulassen, beispielsweise wie folgt:

-A FORWARD -i eno1 -s 172.31.0.0/24 -o enp2s0f0 -d 10.0.40.0/24 -j ACCEPT
-A FORWARD -i enp2s0f0 -s 10.0.40.0/24 -o eno1 -d 172.31.0.0/24 -j ACCEPT

verwandte Informationen