Verbindung zwischen Subnetzen auf unterschiedlichen Schnittstellen ohne IP-Weiterleitung

Verbindung zwischen Subnetzen auf unterschiedlichen Schnittstellen ohne IP-Weiterleitung

Dies ist meine erste Frage als Superuser, also entschuldigen Sie, wenn sie nicht den Anforderungen entspricht.

Ich verwende pop!_OS 19.10 (basierend auf Ubuntu 19.10) und versuche, sein Netzwerkverhalten zu verstehen. Angesichts der Netzwerkschnittstelle eth0habe ich die folgenden Subnetze hinzugefügt:

ip addr add dev eth0 192.168.2.18/24
ip addr add dev eth0 192.168.3.18/24

Die Oberfläche sieht nun wie folgt aus (MAC-Adresse geändert)

1: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever
    inet 192.168.3.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever

Mit nckann ich Daten zwischen den IP-Adressen 192.168.2.18und senden 192.168.3.18.

##################################################################################
# nc -v -l 192.168.2.18 8080
Listening on [pop-os] (family 2, port 8080)
Listening on pop-os 8080
Connection received on pop-os 55361
Hello World!
##################################################################################
# nc -v -s 192.168.3.18 192.168.2.18 8080
Connection to 192.168.2.18 8080 port [tcp/http-alt] succeeded!
Hello World!
##################################################################################
# ss -4 -n
tcp    ESTAB    0    0    192.168.3.18:55361    192.168.2.18:8080           
tcp    ESTAB    0    0    192.168.2.18:8080     192.168.3.18:55361          

Frage 1:Gehe ich recht davon aus, dass Adressen innerhalbseparate Subnetzeauf dergleiche Schnittstellekönnen immer miteinander kommunizieren (sofern sie nicht durch eine Firewall blockiert werden)? Liegt das daran, dass der Kernel in der Routing-Tabelle nachsieht und feststellt, dass er die beiden Netzwerke einfach lokal verbinden kann? D.h.:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

Nun habe ich das getestet, da ich mich mit Kernel IP-Forwarding beschäftigt habe und gelesen habeHier:

Wenn die Weiterleitung jedoch ausgeschaltet ist, prüft der Kernel zunächst, von welcher Schnittstelle das Paket stammt. Wenn es nicht von derselben Schnittstelle stammt, verwirft der Kernel es.

Ich kann jedoch auch 192.168.2.18über meine andere Schnittstelle eine Verbindung mit herstellen wlan0, indem ich die Adresse verwende 192.168.1.73. Ich habe die IP-Weiterleitung deaktiviert.

Netid    State  Recv-Q  Send-Q    Local Address:Port  Peer Address:Port           
tcp      ESTAB  0       0         192.168.2.18:8080   192.168.1.73:40405          
tcp      ESTAB  0       0         192.168.1.73:40405  192.168.2.18:8080           

Frage 2:Warum können IP-Adressen in verschiedenen Subnetzen und Schnittstellen ohne aktivierte IP-Weiterleitung kommunizieren? Liegt es daran, dass sie zum selben Host gehören? Wo ist dieses Verhalten definiert? Werden IP-Weiterleitungsregeln also erst aktiviert, wenn Pakete den Host verlassen?

Antwort1

Frage Nr. 1: Kann ich davon ausgehen, dass Adressen innerhalb separater Subnetze auf derselben Schnittstelle immer miteinander kommunizieren können (sofern sie nicht durch eine Firewall blockiert werden)? Liegt das daran, dass der Kernel in der Routing-Tabelle nachsieht und feststellt, dass er die beiden Netzwerke einfach lokal verbinden kann? D. h.:

Ja. Dies wird nicht durch die von Ihnen gefundenen „Subnetz“-Einträge verursacht, sondern durch „lokale Adress“-Einträge, die sich in einer separaten Routing-Tabelle (der „lokalen“ Tabelle) befinden. Das alte „Route“-Tool verbirgt diese Einträge höchstwahrscheinlich absichtlich, ist aber auch veraltet und kann die von modernen Linux-Kerneln gespeicherten Routing-Informationen nicht vollständig anzeigen. Verwenden Sie daher:

ip -4 route show table local
ip -6 ro ls tab local

(Hinweis: Dies ist Linux-spezifisch. In BSDs gibt es normalerweise nur eine Routing-Tabelle und diese netstat -rnzeigt Ihnen spezielle Routen mit lgesetztem Flag. In anderen Betriebssystemen kann es sich sogar nur um integriertes Verhalten handeln und wird nicht unbedingt als Routen angezeigt.)

Darüber hinaus müssen die Adressen nicht einmal auf derselben Schnittstelle liegen, da die Paketeniemals die physische Schnittstelle verwenden. Stattdessen verhält sich der Kernel so, als ob seine eigenen Adressen einfach über denSchleifeSchnittstelle „lo“.

Frage Nr. 2: Warum können IP-Adressen in verschiedenen Subnetzen und Schnittstellen ohne aktivierte IP-Weiterleitung kommunizieren? Liegt es daran, dass sie zum selben Host gehören? Wo ist dieses Verhalten definiert? Werden IP-Weiterleitungsregeln also erst aktiviert, wenn Pakete den Host verlassen?

Ja, das liegt daran, dass sie zum selben Host gehören. (Unter Linux müssen sie sich auch im selben Netzwerk-Namespace befinden, also im selben Container.)

IP-Weiterleitungsregeln greifen, wenn ein Paketerhaltenüber eine Nicht-Loopback-Schnittstelle (z. B. kam es über Ethernet zur lokalen MAC-Adresse), aber seine Ziel-IP wird nicht als zum Host gehörend erkannt.

Lokal generierte Pakete werden per Definition nicht „weitergeleitet“ (sie werden „ausgegeben“, da sie eine lokale Quell-IP-Adresse haben), daher gelten die Weiterleitungsregeln nicht.

verwandte Informationen