Warum verhalten sich „ip“ und „ifconfig“ unterschiedlich, wenn die Schnittstelle ausgefallen ist?

Warum verhalten sich „ip“ und „ifconfig“ unterschiedlich, wenn die Schnittstelle ausgefallen ist?

Ich schalte zuerst die Schnittstellen ab

# Shutdown the interfaces
ip link set enp2s0f0 down
ip link set enp2s0f1 down

Verwendung von ifconfig:

# Set subnets to interfaces
ifconfig enp2s0f0 10.0.0.1/24
ifconfig enp2s0f1 10.0.1.1/24

# Add two routes
ip route add 10.11.1.1 dev enp2s0f0
ip route add 10.11.0.1 dev enp2s0f1

# Result => NO PROBLEM, my routes are here even tho the interfaces are down
$ip route
10.0.0.0/24 dev enp2s0f0 proto kernel scope link src 10.0.0.1 
10.0.1.0/24 dev enp2s0f1 proto kernel scope link src 10.0.1.1 
10.11.0.1 dev enp2s0f1 scope link 
10.11.1.1 dev enp2s0f0 scope link 

Verwendung von ip:

# Set subnets to interfaces
ip addr add 10.0.0.1/24 dev enp2s0f0
ip addr add 10.0.1.1/24 dev enp2s0f1

$ip route
#NOTHING => Where are the routes?!

# Add two routes
ip route add 10.11.1.1 dev enp2s0f0
ip route add 10.11.0.1 dev enp2s0f1

$ip route
#NOTHING => Where are my routes?!

ip link set enp2s0f0 up
ip link set enp2s0f1 up

# Result => WOW only two routes appeared miraculously
$ip route
10.0.0.0/24 dev enp2s0f0 proto kernel scope link src 10.0.0.1 
10.0.1.0/24 dev enp2s0f1 proto kernel scope link src 10.0.1.1 
# => Where are my 10.11.*.* routes?
  1. Warum werden ip routemeine Routen nicht angezeigt?
  2. Wo werden meine Routen auf wundersame Weise hinzugefügt, nachdem ich meine Schnittstellen aufgerufen habe? Warum kann ich sie vorher nicht sehen?
  3. Warum werden meine Routen nicht angezeigt, nachdem ich die Schnittstellen aufgerufen habe?

Ich möchte alle Routen einrichten, bevor ich die Schnittstellen hochfahre. Ich habe kein Problem damit ifconfig. Ich bin gespannt, welche Überraschungen als Nächstes auf mich zukommen.

Ich dachte , ifconfiges ipwäre kompatibel, aber der Umzug von ifconfig nach ip wird nicht so einfach sein.

Antwort1

Alle drei Ihrer Fragen beruhen auf einem Missverständnis:

ifconfigmit einer Schnittstelle und einer Adresse impliziert die upOption, in Ihrem ifconfigBeispiel wird die Schnittstelle also zum selben Zeitpunkt aktiviert, an dem Sie eine Adresse dafür angeben.

Das heisst

ifconfig enp2s0f0 10.0.0.1/24
ifconfig enp2s0f1 10.0.1.1/24

ist eigentlich die Abkürzung für

ifconfig enp2s0f0 10.0.0.1/24 up
ifconfig enp2s0f1 10.0.1.1/24 up

ipausiproute2organisiert die Handlungen von:

  • bringen eineSchnittstelleauf- und abbauen ( ip link),
  • Zuweisen einer IPAdressean ein Netzwerkgerät ( ip address) und
  • Konfigurieren des KernelsRoutenplanungTabellen ( ip route).

ifconfigvermischt diese unterschiedlichen Konzepte, was vermutlich noch verwirrender oder weniger intuitiv ist.


Wenn Sie den Status von Routen, Netzwerkgeräten, Schnittstellen und Tunneln bequem verwalten möchten, sollten Sie die Verwendung eines Tools zur Netzwerkkonfigurationsverwaltung in Betracht ziehen. Damit können Sie Ihr Netzwerk in einer praktischen deklarativen Syntax definieren und es mit einem Befehl schnell hoch- oder herunterfahren.

Dies sind einige der Tools, die in gängigen Linux-Distributionen enthalten sind:

  • Debian –wennauf( /etc/network/interfaces, /etc/network/interfaces.d/)
  • Ubuntu –netplan.io( /etc/netplan/)
  • Red Hat Enterprise Linux / CentOS –ifcfg( /etc/sysconfig/network-scripts/)
  • normalerweise Distributionen mit Desktop-Umgebungen –Netzwerk Manager( /etc/NetworkManager/)

Der Vollständigkeit halber hier die Antworten auf Ihre Fragen:

  1. Warum werden ip routemeine Routen nicht angezeigt?

Routen werden nicht in der Haupttabelle gespeichert, wenn die entsprechende Verbindung unterbrochen ist. Ihre ipBefehlssequenz ruft die beteiligten Schnittstellen nicht zuerst auf.

  1. Wo werden meine Routen auf wundersame Weise hinzugefügt, nachdem ich meine Schnittstellen aufgerufen habe? Warum kann ich sie vorher nicht sehen?

Die Routen eines Gerätes werden nicht in der Routing-Tabelle eingetragen, wenn die Schnittstelle ausgefallen ist.

  1. Warum werden meine Routen nicht angezeigt, nachdem ich die Schnittstellen aufgerufen habe?

Die Routen wurden nicht hinzugefügt, da die entsprechenden Schnittstellen zuerst aktiv sein mussten. Sie sollten eine Fehlermeldung wie RTNETLINK answers: Network is downoder gesehen haben Error: Device for nexthop is not up., wenn versucht wurde, Ihre Route über eine inaktive Schnittstelle hinzuzufügen. Der Rückgabecode ( $?) sollte auch ungleich Null gewesen sein.

Ich möchte alle Routen einrichten, bevor ich die Schnittstellen hochfahre.

Soweit ich weiß, ist dies nicht möglich, auch nicht mit ifconfig. Denken Sie daran, dass Ihre ifconfigBefehle tatsächlich die Schnittstellen aufrufen, bevor Sie die Routen hinzufügen.

Ich bin gespannt, welche Überraschungen als nächstes kommen.

Hoffentlich keiner. ipDie Trennung der Belange macht viel Sinn, wenn Sielerne es kennen.

Ich dachte ifconfigund ipwaren kompatibel

Die beiden Befehle überschneiden sich teilweise, sind jedoch nicht austauschbar.

verwandte Informationen