ifconfig kann die Route nicht installieren, wenn die IP-Adresse der Schnittstelle bereits vorhanden ist

1

Betrachten Sie das folgende Setup:

X@Y:~$ sudo ip link add link eth0 name eth0.3 type vlan id 3
X@Y:~$ sudo ip link add link eth0 name eth0.2 type vlan id 2
X@Y:~$ sudo ifconfig eth0.2 192.168.2.1/30
X@Y:~$ sudo ifconfig eth0.3 192.168.2.2/29
X@Y:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
192.168.2.0     0.0.0.0         255.255.255.252 U     0      0        0 eth0.2
192.168.2.0     0.0.0.0         255.255.255.248 U     0      0        0 eth0.3

Wie Sie sehen, haben beide Routen zwar überlappende Subnetze eth0.2 und eth0.3 installiert werden Wenn ich es jedoch versuche:

X@Y:~$ sudo ifconfig eth0.3 192.168.2.3/29
X@Y:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
192.168.2.0     0.0.0.0         255.255.255.252 U     0      0        0 eth0.2

Sie können sehen, dass die Route für eth0.3 ist nicht da. Was ist der Hauptunterschied? Die konfiguriert eth0.3 ip ist die Broadcast-Adresse des konfigurierten Subnetzes eth0.2. Okay, das ist zwar durcheinander, aber die Benutzeroberfläche ist online, das einzige, was nicht passiert, ist das Hinzufügen der Route zur Routentabelle. Und eigentlich kümmert sich die Routentabelle nicht einmal um diese Broadcast-Adresse:

X@Y:~$ sudo route add -net 192.168.2.0/29 dev eth0.3
X@Y:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
...
192.168.2.0     0.0.0.0         255.255.255.252 U     0      0        0 eth0.2
192.168.2.0     0.0.0.0         255.255.255.248 U     0      0        0 eth0.3
X@Y:~$ sudo ip link del eth0.3
X@Y:~$ sudo ip link del eth0.2

Gibt es eine Möglichkeit, dies zu umgehen? Bevor Sie erklären, dass ich es selbst herausgefunden habe, indem Sie die Route nachträglich hinzufügen: In meinem Setup geschieht das eigentliche ifconfig über ein Dhclient-Skript, das ich nicht bearbeiten kann. Wenn Sie also Route hinzufügen, müssen Sie den Dhclient einhaken, die IP von irgendwo zurücklesen und ausführen die Route fügen hinzu, was ziemlich langweilig ist. Ich hatte gehofft, ich könnte dieses Verhalten mit einigen Flags auf der Benutzeroberfläche ändern.

P.S. Dies ist natürlich kein echtes Netzwerkdesign, aber für ein Test-Setup erforderlich.

KillianDS
quelle

Antworten:

0

Eine aktive / 30-Route wird immer einer / 29-Route vorgezogen. Wenn Sie also keine / 32-Hostroute für 192.168.2.2 eingerichtet haben, sendet die Routing-Tabelle weiterhin Datenverkehr an 192.168.2.2 an die / 30-Schnittstelle.

Es ist unklar, ob jemals die Schnittstelle 192.168.2.3 installiert wurde, da .3 die Übertragung für 192.168.2.0/30 ist und ein an 192.168.2.3 gesendetes Paket eine spezielle Funktion hat: an alle Hosts auf 192.168.2.0/ zu senden. 30, um nicht auf ein weniger spezifisches Netzwerk auf einer anderen Schnittstelle zu Unicast zu sein.

Wenn Sie anstelle von / 30 und a / 29 mit / 29 und a / 28 arbeiten würden, hätten Sie ein Problem mit der .7.

Nevin Williams
quelle