Wie wählt Linux die zu verwendende Netzwerkschnittstelle aus?

8

eth0Angenommen , ich habe einen Computer mit zwei Netzwerkadaptern in verschiedenen Subnetzen (10.0.100.5) und eth1(10.0.200.5). Angenommen, beide Subnetze haben Routen zum Internet (über ihre eigenen NATs) und zum Rest des lokalen Netzwerks (über ihre eigenen Switches):

  1. Wie wählt Linux aus, welche Netzwerkschnittstelle verwendet werden soll, wenn eine Anfrage an 10.0.150.5 oder 173.194.43.102 gestellt wird?
  2. Gibt es eine Möglichkeit, dies auf Netzwerkebene zu beeinflussen? Würde das Entfernen der Routen aus den Subnetzen dies beeinflussen? Ich bin in einer AWS - Umgebung und mit einer Appliance AMI arbeitet , dass ich nicht anmelden, so etwas wie das wird nicht funktionieren.

AWS VPC-Umgebung, andere Computer, auf denen Ubuntu 12.04 ausgeführt wird, keine Ahnung, auf welchem ​​Computer ich Einfluss nehmen möchte (da ich mich nicht anmelden kann).

Erläuterungen:

  • Beide Subnetze sind als /24s eingerichtet
Dan
quelle
Für weitere Informationen geben Sie bitte die Ausgabe vonroute -n
Hrvoje Špoljar
Wie bereits erwähnt, kann ich mich bei der fraglichen Box nicht anmelden. Später heute Abend kann ich jedoch eine andere in derselben Konfiguration starten und überprüfen.
Dan

Antworten:

9

Das Subnetz wird durch Netzwerk und Maske definiert , z

Netzwerk: 10.0.100.5 Maske: / 8

Dies bedeutet, dass Ihr Subnetz ist: 10.0.100.5 /8

Grundsätzlich gehört jede gültige IP der 10.xxx.xxx.xxx-Familie zu diesem Subnetz. Für den Zugriff auf Hosts in diesem Subnetz kann nur eine Schnittstelle verwendet werden. In Ihrem Fall ist es also entweder eth0 oder eth1. Andere Schnittstellen können IP-Adressen im selben Subnetz haben, funktionieren jedoch nicht ordnungsgemäß.

Folgendes passiert, wenn Sie eine Situation haben, wie Sie sie beschrieben haben, in der sowohl eth0 als auch eth1 mit IPs im selben Subnetz mit demselben Netzwerk verbunden sind.

  • eth0 10.0.100.5/8
  • eth1 10.0.200.5/8

Jetzt hat nur eine dieser Schnittstellen eine Route (sagen wir, es ist eth0 ), die to access subnet 10.0.100.0/8use verwendet eth0. Das Paket, das diese Schnittstelle verlässt, hat also die Quelladresse10.0.100.5

! HINWEIS - 10.0.100.5/8 und 10.0.200.5/8 sind dasselbe Subnetz (da Maskenmasken die letzten 3 Vorkommen haben, können wir sie auch als 10.0.0.0/8 schreiben).

Stellen Sie sich nun vor, wir haben einen Host in diesem Subnetz, der versucht, mit 10.0.200.5 Packet in das System zu kommunizieren , eth1aber nicht zurückkehren kann, eth1da eth0nur einer mit Route zum Netzwerk 10.0.0.0/8und Antworten von eth0 unterschiedliche IP-Adressen haben. Daher kann derjenige, der die Verbindung zu 10.0.200.5 initiiert, die Antwort einer anderen Quelle nicht verstehen.

BEARBEITEN

Um zu bestimmen, welche Schnittstelle verwendet wird, müssen Sie sich Ihre Routing-Tabelle ansehen. Da die Frage keine Routing-Tabelle enthält, werde ich versuchen, dies anhand der folgenden Routing-Tabelle zu erklären

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0

alternative Routing-Tabellenausgabe

$ ip route show
default via 192.168.0.1 dev wlan0  proto static 
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.5 
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.14 

Wir haben also im obigen Beispiel 2 Schnittstellen.

  • eth0 mit IP 10.0.0.5 im Subnetz 10.0.0.5/255.255.255.0 oder in CIDR-Notation 10.0.0.5/24
  • wlan0 mit IP 192.168.0.14 im Subnetz 192.168.0.14/255.255.255.0 oder in CIDR-Notation 192.168.0.0/24

Was sagt uns nun die Routing-Tabelle? zeilenweise Interpretation von unten nach oben:

192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14

192.168.0.0/24Verwenden Sie für den Zugriff auf Hosts im Subnetz die Schnittstelle wlan0und die src-IP192.168.0.14

10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5

10.0.0.0/24Verwenden Sie für den Zugriff auf Hosts im Subnetz die Schnittstelle eth0und die src-IP10.0.0.5

default via 192.168.0.1 dev wlan0 proto static

Um auf einen anderen Host zuzugreifen, der nicht durch die oben genannten Regeln abgedeckt ist, verwenden Sie die defaultRoute, die über die Schnittstelle wlan0und das Gateway zu anderen Netzwerken erreichbar ist192.168.0.1

Hrvoje Špoljar
quelle
Klarstellung über die von mir verwendete Maske hinzugefügt - Entschuldigung für die Auslassung.
Dan
Können Sie klären, wie sich die Routing-Tabelle darauf auswirkt?
Dan
Überprüfen Sie die zuletzt bearbeitete Antwort für weitere Details
Hrvoje Špoljar
0

Schauen Sie sich Ihre Routing-Tabelle an - Befehl ist route. Verwenden Sie mit dem neueren ip-Befehl ip route show. In der Hilfe finden Sie Informationen zum Hinzufügen / Löschen von Routing-Einträgen in der Tabelle.

user1819998
quelle