Wer für die Netzwerk-Konfiguration dem Schwarm alter Kommandos von »arp« über »ifconfig« bis »route« vertraut, sollte sich mit deren mächtigem Nachfolger »ip« beschäftigen. Der leistet mehr als alle Vorgänger zusammen und verdrängt sie vielleicht bald aus den Distributionen.
Kaum einer kennt es, obwohl das Kommando schon seit Kernel 2.2 existiert: »ip« gelangt mit den Paketen »iproute2« oder »iproute« auf den Linux-PC. Alexey Kuznetsov hat dieses Tool für Linux 2.2 entwickelt, als er auch den IPv4- und IPv6-Routing-Code für den Kernel schrieb. Linux erhielt damals erstmals Fähigkeiten, die heute Advanced Routing oder Policy Routing heißen.
Um die beste Route eines IP-Pakets zu ermitteln, analysiert ein herkömmlicher Router nur die Ziel-IP-Adresse und schlägt in seiner Routing-Tabelle nach. Policy Routing erlaubt dagegen vielfältige Anpassungen. Dazu verwaltet der Linux-Kernel bei Bedarf bis zu 256 Routing-Tabellen. Vom Admin vorgegebene Regeln definieren danach, für welche Pakete das System welche Routing-Tabellen zu Rate zieht.
Alles vereint
Vor diesen eher anspruchsvollen »ip«-Aufgaben gilt es, sich mit den einfacheren Fähigkeiten des Befehls vertraut zu machen. Die 60-seitige “IP Command Reference” [2], die die meisten Pakete unter dem Namen »ip-cref.ps« enthalten, dient als Anleitung und Nachschlagewerk. Debian speichert die Datei beispielsweise komprimiert unter »/usr/share/doc/iproute/ip-cref.ps.gz«, Suse Linux 10.1 verstaut sie als PDF-Version unter »/usr/share/doc/packages/iproute2/ip-cref.pdf«.
Guter Überblick
Der »ip«-Aufruf zeigt zunächst wie »ifconfig«, »route« und »arp« den aktuellen Zustand an. Der Befehl horcht auf folgende Syntax:
ip [Optionen] Objekt [Kommando [Argumente]]
Alle vorhandenen Netzwerkkarten zeigt das Tool mit dem Befehl »ip link show« oder kurz »ip link« an, wofür keine Administrator-Rechte nötig sind. Hier ist »link« das Objekt und »show« das Kommando. Fehlt ein Kommando, nimmt Ip an, dass »show« gemeint ist. Das Kommando erlaubt auch Abkürzungen und Synonyme, etwa »ip link ls«. Abbildung 1 zeigt die Ausgabe.

Abbildung 1: Der Aufruf »ip link show« listet alle Netzwerkkarten, inklusive der virtuellen und nicht aktiven Interfaces. Letztere sind daran zu erkennen, dass das Schlüsselwort »UP« fehlt (»wlan0« und »sit0«).
In der Ausgabe ist erkennbar, dass die Karten »wlan0« und »sit0« nicht aktiv sind: Es fehlt das Flag »UP«. Die Karten »vmnet*« sind virtuelle Netzwerk-Schnittstellen von VMware. Um auch die Netzwerkadressen anzuzeigen, genügt es, als Objekt »addr« anzugeben statt »link«. Das Beispiel in Listing 1, Zeile 1, schränkt die Ausgabe zusätzlich auf das Device »eth0« ein.
|
Listing 1: Informationen |
|---|
01 # ip addr show dev eth0 02 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 03 link/ether 00:0f:1f:1c:bd:15 brd ff:ff:ff:ff:ff:ff 04 inet 192.168.255.100/24 brd 192.168.255.255 scope global eth0 05 inet6 fe80::20f:1fff:fe1c:bd15/64 scope link 06 valid_lft forever preferred_lft forever 07 08 # ip -s link show dev eth0 09 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 10 link/ether 00:0f:1f:1c:bd:15 brd ff:ff:ff:ff:ff:ff 11 RX: bytes packets errors dropped overrun mcast 12 440168179 10300520 0 0 0 123 13 TX: bytes packets errors dropped carrier collsns 14 808302790 13835300 0 0 0 0 |
Die Ausgabe in den Zeilen 2 bis 6 zeigt sowohl die IPv4- (»inet«) als auch die IPv6-Adresse (»inet6«) dieses Interface. Die Ethernet-Adresse (»link/ether«) erscheint auch schon bei »ip link«. Das alte Ifconfig zeigt per Default noch statistische Informationen an, die für die Fehlersuche hilfreich sind – Ip kann das auch, wenn der Aufruf die Option »-s« enthält (Listing 1, Zeile 8). Wer sich für die Routen oder den ARP-Cache interessiert (Address Resolution Protocol), erhält diese Informationen über »ip route show« beziehungsweise »ip neighbour show« (Abbildung 2).

Abbildung 2: Das »ip«-Programm zeigt die Routen (»ip route show«) und den Inhalt des ARP-Cache an, Zweiteres per »ip neigh show«. Hier dient »neigh« als bequeme Abkürzung für »neighbour« (Nachbar).
Alle bisher gezeigten Beispiele funktionieren ohne Root-Rechte. Administratoren zeigen mit Ip aber nicht nur die Informationen an, sondern verändern sie auch. Als Beispiel dient im Folgenden die Netzwerkkarte »dummy0«, die eine virtuelle Schnittstelle darstellt. Um diese Netzwerkkarte zu aktivieren, genügt der Befehl »ip link set dummy0 up« (Abbildung 3). Beim Aufruf dieses Befehls sollte das System automatisch das entsprechende Kernelmodul nachladen. Ist dies nicht der Fall, sorgt der manuelle Aufruf »modprobe dummy« für Nachhilfe in Sachen Dummy-Interface.

Abbildung 3: Der Befehl »ip link« aktiviert Netzwerkkarten, hier das virtuelle Interface »dummy0«. Die weiteren Kommandos verpassen ihm eine primäre und eine sekundäre IP-Adresse sowie ein Label.
Wer einer Netzwerkkarte mehrere IP-Adressen zuordnet, erzeugt mit dem klassischen Ifconfig neue Devices mit Namen »eth0:0«, »eth0:1« und so weiter. Ip arbeitet mit dem gleichen Gerätenamen und vergibt über den »label«-Parameter die Aliasnamen:
ip addr add 192.168.20.1 dev eth0 label eth0:0
Dieser Name darf später zum Beispiel in IPtables-Skripten auftauchen, was die Verwaltung von Firewall-Regeln deutlich vereinfacht. Das Label muss auch nicht die Form »eth0:0« haben. Es ist lediglich erforderlich, dass der Name mit dem Namen der Netzwerkkarte beginnt, gefolgt von einem Doppelpunkt und einer Zeichenkette.
Unter Pseudonym
Zusätzlich erlaubt es Ip, den Namen der Netzwerkkarte selbst zu verändern. Das sollte aber nur bei deaktivierten Karten erfolgen, da unerwartete Nebenwirkungen auftreten können, wenn sich der Name einer aktivierten und benutzten Karte ändert. Um »dummy0« in »test0« umzubenennen, reichen die folgenden Zeilen:
ip link set dev dummy0 down ip link set dev dummy0 name test0 ip link set dev test0 up
Die Befehle »ip addr del« beziehungsweise »ip addr flush« löschen bereits vergebene IP-Adresse. Während der erste nur eine einzelne Adresse entfernt, löscht das zweite Kommando alle Adressen einer Netzwerkkarte oder eines Netzwerks. Hier ist Vorsicht angebracht: Wer die primäre Adresse einer Netzwerkkarte löscht, entfernt die sekundären Adressen gleich mit. In Abbildung 3 ist eine sekundäre Adresse unter dem Label »dummy0:test« vergeben. Sie erscheint in der »ip addr show dummy0«-Ausgabe als »secondary dummy0:test«.
Die Syntax zum Hinzufügen oder Löschen von Routen ist anders als vom Befehl »route« gewöhnt. Eine Defaultroute setzt man beispielsweise mit »ip route add default via 192.168.0.254«: Der Parameter »via« gibt den Router an, über den das Ziel (hier der Defaultpfad) erreichbar ist. Um eine einzelne Host- oder eine Netz-Route anzugeben, ist »default« einfach durch die entsprechende Information zu ersetzen, etwa »ip route add 10.0.0.0/24 via 192.168.0.253« für einen Pfad ins Netzwerk 10.0.0.0/24.
Policy Routing
Ip kann noch viel mehr. Beim bereits erwähnten Policy Routing [5] wählt der Administrator für jedes Paket zwischen 256 Routing-Tabellen. Dazu definiert er Regeln. Die aktuellen Regeln zeigt »ip rule show« an (Abbildung 4). Die Abbildung zeigt, dass der Rechner Pakete von 10.0.0.7 via NAT weiterleitet (»map-to«). Pakete, denen IPtables eine Firewall-Markierung »0x5« verpasst hat, verarbeitet das System durch die Tabelle Nummer 6 und Pakete mit einer Absenderadresse 10.0.0.5 durch die Tabelle 5.

Abbildung 4: Beim Policy Routing legen Regeln fest, welche Routing-Tabellen das System für welche Pakete nutzt. Die Ziffer zu Beginn der Ausgabe von »ip rule show« bestimmt die Priorität der jeweiligen Regel.
Die Zahl in der ersten Spalte ist die Präferenz. Sie legt die Reihenfolge fest, in der Linux die Regeln abarbeitet. Trifft eine Regel auf ein Paket zu, kommt die entsprechende Tabelle zum Einsatz. Befindet sich in ihr eine gültige Route für das Paket (zum Beispiel die Defaultroute), bricht die Verarbeitung ab und das System nutzt diese Route. Ist das nicht der Fall, geht es mit den restlichen Routen weiter.
Tabellen können auch Namen tragen. Die Routing-Tabelle »main« ist die Haupt-Routing-Tabelle, die auch der Befehl »route« anzeigt. Die übrigen sind für den Befehl »route« nicht erreichbar. Möchte der Administrator den Routing-Tabellen Namen geben, kann er sie in der Datei »/etc/iproute2/rt_tables« speichern (siehe Listing 2). Diese Namen tauchen dann auch in der Anzeige von »ip rule show« auf. Die Routing-Tabellen Nummer 0, 254 und 255 sind bereits reserviert und sollten nicht für andere Zwecke herhalten (Zeilen 1 bis 5).
|
Listing 2: Namen fürs |
|---|
01 # reserved values 02 #255 local 03 #254 main 04 #253 default 05 #0 unspec 06 # local 07 #1 inr.ruhep 08 5 intern 09 6 test |
Doppeltes Internet
Mit Namen versehen ist es leichter, die Tabellen zu verwenden und mit den passenden Routen zu versehen. Hierzu genügt es, beim Erzeugen der Routen die Tabelle zusätzlich anzugeben:
ip route add default via 192.168.0.5 table intern
Geschicktes Policy-Routing hilft, scheinbar unlösbare Probleme zu bewältigen. Häufig besitzt eine Firma zwei Netzwerkanschlüsse. Einer ist eine Standleitung, verfügt über eine feste IP-Adresse und wird nach dem übertragenen Volumen abgerechnet. Als zweiter Anschluss dient eine DSL-Verbindung mit Flatrate. Beide Anschlüsse verwenden jeweils einen eigenen Router. Ziel ist es dann, den gesamten Surf-Verkehr über DSL abzuwickeln und die Standleitung für VPN und E-Mail zu reservieren (Abbildung 5). Das geht mit »ip« sehr einfach.

Abbildung 5: In diesem Szenario mit zwei Internetanbindungen soll Webverkehr nur die billige DSL-Leitung verwenden, während E-Mail und VPN statische IP-Adressen brauchen und daher über die Standleitung laufen.
Zunächst markiert IPtables den gesamten Surf-Verkehr auf der Firewall, die mit den beiden Routern verbunden ist:
iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 80,443 -j MARK --set-mark 0x80
Anschließend regelt ein Ip-Kommando, dass das System alle markierten Pakete über eine eigene Tabelle verarbeitet. In dieser Tabelle ist als Default-Gateway der DSL-Router (im Beispiel 192.168.0.254) einzutragen:
echo "80 web" >> /etc/iproute2/rt_tables ip rule add fwmark 0x80 table web ip route add default via 192.168.0.254 table web
Die Firewall kennzeichnet nun jede Verbindung zu den Ports 80 (HTTP) oder 443 (HTTPS) mit Hilfe der Markierung »0x80«. Wegen der Regel verarbeitet der Rechner das Paket in der Routing-Tabelle »web« und sendet es an das Default-Gateway 192.168.0.254, also an den DSL-Router.
Load Balancing
Genauso häufig stehen Administratoren vor der Aufgabe, in einem Szenario wie in Abbildung 5 Load Balancing zu implementieren. In diesem Fall soll der Netzwerkverkehr beide Leitungen gleichmäßig auslasten. Statt nun komplexe Software zu installieren, reicht es aus, sich an Ip zu erinnern. Um Load Balancing zu erlauben, muss der Kernel Multipath-Routing unterstützen. Das ist der Fall, wenn in der Kernelkonfiguration die Variable »CONFIG_IP_ROUTE_MULTIPATH« gesetzt ist. Nun reicht der folgende Befehl:
ip route add default scope global nexthop via 192.168.0.254 nexthop via 192.168.1.254
Arbeitet das System mit dynamisch zugewiesenen IP-Adressen, die zum Zeitpunkt des Ip-Aufrufs unbekannt sind, akzeptiert das Kommando auch die Angabe der Netzwerkgeräte an Stelle der Adressen:
ip route add default scope global nexthop dev ppp0 weight 100 nexthop dev ppp1 weight 100
Der zusätzliche Parameter »weight xxx« gibt den Routen Gewichte. Das System wählt immer die Route mit dem höchsten Gewicht.
So viele Möglichkeiten
Der Befehl »ip« bietet zahlreiche Möglichkeiten, unter anderem IP-über-IP-Tunnel mit dem GRE-Protokoll (Generic Routing Encapsulation) und dem Kommando »ip tunnel add«. Das Paket IProute2 enthält auch den Befehl »tc« (Traffic Control), der für die Konfiguration von Traffic-Management und Quality of Service zuständig ist. Zu diesem komplexen Thema gab es bereits einen ausführlichen Artikel [6] im Linux-Magazin.
Über diesen Artikel hinaus erklären etliche ausführliche Dokument ([2], [3], [4]) die »ip«-Details. Viele Administratoren kennen das Kommando aber noch gar nicht und setzen in ihrer täglichen Arbeit weiterhin auf eine Sammlung veralteter Tools. (hge/fjl)
|
Infos |
|---|
|
[1] IProute2: [http://linux-net.osdl.org/index.php/Iproute2] [2] Alexey N. Kuznetsov, “IP Command Reference”: [http://linux-ip.net/gl/ip-cref/] [3] IProute2 Utility Suite HOWTO: [http://www.policyrouting.org/iproute2.doc.html] [4] Bert Hubert, “Linux Advanced Routing & Traffic Control HOWTO”: [http://lartc.org/howto/] [5] Policy-Routing-Buch: [http://www.policyrouting.org/PolicyRoutingBook/ONLINE/TOC.html] [6] Klaus Rechert und Patrick McHardy, “Queueing Disciplines – Traffic Control mit Linux”: Linux-Magazin 02/05, S. 28 |






