Welche IP-Adresse verwendet eine Netzwerkschnittstelle?

Welche IP-Adresse verwendet eine Netzwerkschnittstelle?

Welche IP verwendet eine Schnittstelle, wenn der Host als Client fungiert?

Nehmen wir an, ich habe eth0 mit 2 IP-Adressen konfiguriert: 192.168.1.7 und 192.168.1.8

Der Route-Befehl zeigt ungefähr Folgendes:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.240.0   0.0.0.0         255.255.240.0   U     256    0        0 eth0
...

Das bedeutet im Wesentlichen, dass beim Versuch, eine Verbindung zu einem beliebigen Host im 192.168.240.0Netzwerk herzustellen, die Schnittstelle eth0 verwendet wird. Ok, aber ... Welche IP-Adresse dieser Schnittstelle?

Wenn der Host als Server fungiert und ein Client über die IP-Adresse eine Verbindung zu meinem Computer herstellt, 192.168.1.7ist mir klar, dass eth0 diese zur Kommunikation mit dem Client verwendet 192.168.1.7. Was aber, wenn ich der Client bin?


BEARBEITEN

Die IP-Adressen sind erfunden. Ich kann einer Schnittstelle in meinem Ubuntu WSL keine weitere IP-Adresse hinzufügen, da ich diesen Fehler erhalte:

$ ip address add 192.168.1.7/24 dev eth0
RTNETLINK answers: Permission denied

Die Ausgabe ip r ssieht ungefähr so ​​aus:

$ ip r s
none 224.0.0.0/4 dev eth0 proto unspec metric 256
none 255.255.255.255 dev eth0 proto unspec metric 256
none 224.0.0.0/4 dev eth1 proto unspec metric 256
none 255.255.255.255 dev eth1 proto unspec metric 256
...

BEARBEITEN 2

Ich habe auf WSL2 aktualisiert und jetzt funktioniert der Befehl zum Hinzufügen von IP-Adressen (mit sudo).

$ ip -4 a s dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.249.181/20 brd 192.168.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.7/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.8/24 scope global secondary eth0
       valid_lft forever preferred_lft forever

Antwort1

Für Linux lautet die Antwort auf Ihre Fragehier gegeben:

Die anfängliche Quelladresse für ein ausgehendes Paket wird gemäß der folgenden Regelreihe ausgewählt.

Die Anwendung kann eine bestimmte IP anfordern. Der Kernel verwendet den SRC-Hinweis des gewählten Routenpfads. Wenn dieser Hinweis fehlt, wählt der Kernel die erste auf der Schnittstelle konfigurierte Adresse, die im selben Netzwerk liegt wie die Zieladresse oder der Nexthop-Router.

Antwort2

Der Client sucht nach den ROUTEN, die der Adresse entsprechen, mit der er eine Verbindung herstellen möchte. Wenn es, wie in Ihrem Beispiel, mehr als eine passende Route gibt, wählt er den Routeneintrag mit der höchsten Metrik aus und sendet das Paket über die in der Routentabelle gefundene Schnittstelle unter Verwendung der IP-Adresse dieser Schnittstelle.

Sie haben die Ausgabe der Route abgeschnitten und nicht gesagt, womit Sie eine Verbindung herstellen. Daher kann ich Ihnen nicht sagen, welche Schnittstelle das sein wird.

Auf dem Server... nun, da wird es etwas komplizierter. Ich habe Centos- und Redhat-Hosts mit mehreren Schnittstellen im selben Subnetz. Diese antworten auf dieselbe Adresse/Schnittstelle, an die die Pakete gesendet wurden. Aber ich habe auch neuere Ubuntu- und Debian-Systeme, die die Routing-Tabelle erneut aufrufen, um die zu verwendende Schnittstelle und Adresse zu finden, wobei sie die Adressierung des Pakets des Clients ignorieren. Der Client ignoriert die Pakete, die von einer IP-Adresse zurückkommen, mit der er nicht kommuniziert.

verwandte Informationen