
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 eth0
habe 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 nc
kann ich Daten zwischen den IP-Adressen 192.168.2.18
und 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 -rn
zeigt Ihnen spezielle Routen mit l
gesetztem 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.