Nudge am 03.03.2010

ifup und ifdown versus ifconfig

in Linux, Netzwerk | Tags: eth0, ifconfig, ifdown, ifup, IP, Linux, Netzwerk

Manchmal fragt man sich schon, wieviele Wege nach Rom führen mögen. Zum Beispiel kann man unter Linux eine Netzwerk-Karte (hier genannt eth0), unter zig Varianten konfigurieren und aktivieren.

Zum einen gibt es

1
# ifconfig eth0 up
# ifconfig eth0 up

zum anderen aber auch

1
# ifup eth0
# ifup eth0

wie auch

1
# ip link set eth0 up
# ip link set eth0 up

Ich habe mich schon immer gefragt: “Was ist da der Unterschied?” Nun, zu ifconfig konnte ich folgendes herausfinden:

  • ifconfig nimmt Netzwerk-Parameter aus der Kommandozeile entgegen
  • ifconfig kann mehrere Schnittstellen konfigurieren: ifconfig eth0 eth5 eth6 up/down
  • ifconfig lädt bzw. entlädt die Treiber zur Karte – dies führte zum Beispiel bei den e1000-Karten zu Problemen

ifup und ifdown dagegen verhalten sich ein wenig anders:

  • ifup und ifdown lesen die Netzwerk-Konfiguration aus /etc/network/interfaces aus
  • ifup und ifdown können mit dem Parameter -a alle in /etc/network/interfaces aufgelisteten Netzwerk-Geräte konfigurieren
  • ifup und ifdown laden oder entladen keine Treiber
  • ifup und ifdown rufen ihrerseits ifconfig auf – das kann man in den binaries sogar nachlesen!

Das Märchen, ifup und ifdown seien nur Skripte, ist Unfug. Es sind kompilierte, binäre ELF-Programme.

Ebenso ein Märchen: Das Kommando ip sei ganz neu. Es ist ist seit Kernel 1.2 vorhanden, bietet auch ähnliche Parameter wie ifconfig und arbeitet ebenso wie ifconfig auf direkter Kommandozeilen-Ebene und direkt mit dem Kernel. ip möchte eigentlich soviel wie möglich nach außen sichtbar machen, was der LinuxKernel alles mit IP-Adressen und Routing anstellen kann. Und das ist wirklich eine ganze Menge! Insofern sei nur ans Herz gelegt, auch mal ip eine Chance zu geben.

PS: Ich glaube, das if aus ifxxx steht immer für interface, was eigentlich mächtig ungenau ist…

PS2: Eine einfache Adress-Konfiguration erreicht man als Root mit:

1
2
# ifconfig eth0 <IP-Adresse> netmask <Netzwerk-Maske>
# route add default gw <Gateway-Adresse>
# ifconfig eth0 <IP-Adresse> netmask <Netzwerk-Maske>
# route add default gw <Gateway-Adresse>