Kurz und knackig: Netzkonfiguration mit Ip

Aus LinuxUser 02/2019

Kurz und knackig: Netzkonfiguration mit Ip

© gl0ck33, 123RF

Basic Network

Netzwerkbefehle wie Ifconfig und Route gehören zu den Basiskommandos, die sich eigentlich nie ändern. So passiert es, dass deren Nachfolger Ip nach wie vor kaum Beachtung findet.

Der Mensch ist ein Gewohnheitstier: Viele Tätigkeiten erledigen wir immer in derselben Reihenfolge mit denselben gewohnten Werkzeugen. Was für den Alltag oder die Werkstatt gilt, stimmt auch für die IT. Kein Wunder also, dass sich eigentlich veraltete Kommandos weiter im Gebrauch halten.

So kommt es auch, dass viele Anwender noch zu Ifconfig, Route und Arp aus dem Paket net-tools greifen, obwohl in Form von Ip aus iproute2 schon lange ein probater Nachfolger bereitsteht [1]: Das Kommando ip wurde 1999 zusammen mit dem NET4.0-Framework inklusive Support für das Netzwerkprotokoll IPv6 in Kernel 2.2 eingeführt.

Aktuelle Distributionen wie Ubuntu 18.04 spielen die Net-tools [2] gar nicht mehr von Haus aus ein. Bei Bedarf könnten Sie die gewohnten Kommandos via sudo apt install net-tools aus der Paketverwaltung installieren. Bevor Sie das aber tun, sollten Sie abwägen, ob sich das noch lohnt: Die Net-tools von heute nutzen unter der Haube dieselben Bibliotheken wie Ip, erhalten jedoch keine neuen Funktionen mehr. Daher sollten Sie besser früher als später die gewohnten Kommandos durch den entsprechenden Aufruf von Ip ersetzen.

Ein Paradebeispiel für die Unzulänglichkeiten von Ifconfig liefern Netzwerkgeräte mit mehr als einer IP-Adresse. Weisen Sie etwa einem schon über DHCP mit einer IP-Adresse versorgten Netzwerkgerät via ip address add IP dev Gerät eine weitere Adresse zu, dann zeigt der Aufruf ip addr show dev Gerät diese mit an, ifconfig Gerät belässt es hingegen nur bei der Ausgabe der ersten IP-Adresse (Abbildung 1).

Abbildung 1: Der Befehl Ifconfig gehört zu den Linux-Urgesteinen auf der Kommandozeile. Das Programm kann bei aktuellen Entwicklungen jedoch nicht mehr mithalten: So erkennt es pro Netzwerkkarte nur eine IP-Adresse.

Abbildung 1: Der Befehl Ifconfig gehört zu den Linux-Urgesteinen auf der Kommandozeile. Das Programm kann bei aktuellen Entwicklungen jedoch nicht mehr mithalten: So erkennt es pro Netzwerkkarte nur eine IP-Adresse.

Überblick verschaffen

Der Aufruf von ip zeigt zunächst den aktuellen Zustand an. Der Befehl arbeitet mit der Syntax ip [Option(en)] Objekt [Kommando [Argument(e)]].

Der Befehl ip link show oder kurz ip link (oder noch kürzer ip l) bringt auch – ohne Admin-Rechte – eine Liste aller vorhandenen Netzwerkkarten auf den Bildschirm (Listing 1). Hier fungiert link als Objekt und show als Kommando. Fehlt ein Kommando, dann nimmt Ip an, dass Sie show meinen. Das Kommando erlaubt auch Abkürzungen und Synonyme, etwa ip link ls.

Listing 1

$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 70:8b:cd:50:ce:db brd ff:ff:ff:ff:ff:ff
3: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 70:8b:cd:50:ce:da brd ff:ff:ff:ff:ff:ff
4: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether a2:8b:d4:e9:51:d2 brd ff:ff:ff:ff:ff:ff
5: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff

Die Ausgabe in Listing 1 zeigt, dass die Karten enp4s0 und wlp2s0 nicht aktiv sind: Es fehlt das Flag UP. Die Karte vboxnet0 steht für eine von Virtualbox genutzte virtuelle Netzwerkschnittstelle. Um auch die Netzwerkadressen anzuzeigen, genügt es, als Objekt addr oder einfach nur a statt link anzugeben. Das erste Beispiel in Abbildung 2 schränkt die Ausgabe zusätzlich auf das Device enp0s31f6 ein.

Abbildung 2: Der Aufruf <code>ip link show</code> listet alle Netzwerkkarten, inklusive der virtuellen und nicht aktiven Interfaces. Letztere erkennen Sie daran, dass das Schl&uuml;sselwort <code>UP</code> fehlt (<code>wlan0</code> und <code>sit0</code>).

Abbildung 2: Der Aufruf ip link show listet alle Netzwerkkarten, inklusive der virtuellen und nicht aktiven Interfaces. Letztere erkennen Sie daran, dass das Schlüsselwort UP fehlt (wlan0 und sit0).

Die Ausgabe des ersten Kommandos ip addr show zeigt sowohl die IPv4- (inet) als auch die IPv6-Adresse (inet6). Die Ethernet-Adresse (link/ether) erscheint auch schon bei ip link.

Das alte Ifconfig zeigt per Default noch statistische Informationen an, die bei der Fehlersuche helfen – Ip kann das auch, wenn Sie ihm beim Aufruf die Option -s mitgeben (siehe zweites Kommando in Abbildung 2). Interessieren Sie sich für die Routen oder den Inhalt des ARP-Caches, fördern ip route show beziehungsweise ip neighbour show diese zutage (Abbildung 3).

Abbildung 3: Das Kommando <code>ip route show</code> liefert die im System angelegten Routen. <code>ip neigh show</code> gibt den Inhalt des ARP-Caches aus. Hier dient <code>neigh</code> als bequeme Abk&uuml;rzung f&uuml;r <code>neighbour</code>.

Abbildung 3: Das Kommando ip route show liefert die im System angelegten Routen. ip neigh show gibt den Inhalt des ARP-Caches aus. Hier dient neigh als bequeme Abkürzung für neighbour.

Alle bisher gezeigten Beispiele funktionieren ohne Root-Rechte. Mit Ip lassen sich allerdings nicht nur Informationen zu Netzwerkkarten ausgeben, sondern auch Konfigurationen verändern. Dazu benötigen Sie dann administrative Rechte. Um etwa eine virtuelle Netzwerkkarte mit dem Namen dummy0 anzulegen, genügt der Befehl ip link add dummy0 type dummy.

Danach aktivieren Sie das virtuelle Gerät mit dem Kommando ip link set dummy0 up. Beim Ausführen dieser Kommandos sollte das System automatisch das für diese Funktion benötigte Kernelmodul laden. Klappt das nicht, helfen Sie mit modprobe dummy von Hand nach (Abbildung 4).

Abbildung 4: Der Befehl <code>ip link</code> aktiviert Netzwerkkarten, hier das virtuelle Interface <code>dummy0</code>. Die weiteren Kommandos weisen ihm eine prim&auml;re und eine sekund&auml;re IP-Adresse sowie ein Label zu.

Abbildung 4: Der Befehl ip link aktiviert Netzwerkkarten, hier das virtuelle Interface dummy0. Die weiteren Kommandos weisen ihm eine primäre und eine sekundäre IP-Adresse sowie ein Label zu.

Ordnen Sie einer Netzwerkkarte mehrere IP-Adressen zu, so erzeugt das klassische Ifconfig Netzwerk-Devices mit Namen der Art Device:0, Device:1 und so weiter. Bei Ip gibt es hierzu keinen Unterschied, allerdings vergibt das Tool die Alias-Namen über den Parameter label (Listing 2).

Listing 2

$ sudo ip addr add 192.168.188.250 dev enp0s31f6 label enp0s31f6:0

Diesen Namen können Sie später beispielsweise in Iptables-Skripten verwenden, was den Aufbau von Firewall-Regeln ganz wesentlich vereinfacht. Bei der Wahl des Labels müssen Sie nicht zwingend der Form Device:Zahl folgen. Der Bezeichner muss lediglich mit dem Namen der Netzwerkkarte beginnen und darf mit einer beliebigen Zeichenkette enden. Die Trennung erfolgt über einen Doppelpunkt.

Unter Pseudonym

Bevor Sie mit Ip den Namen von Netzwerkkarten ändern, sollten Sie das betreffende Device erst einmal deaktivieren, um Nebenwirkungen auszuschließen. Um etwa das Dummy-Device dummy0 in test0 umzubenennen, genügen die Zeilen aus Listing 3.

Listing 3

# ip link set dev dummy0 down
# sudo ip link set dev dummy0 name test0
# sudo ip link set dev test0 up

Möchten Sie vergebene IP-Adressen wieder löschen, nutzen Sie dazu die Kommandos ip addr del IP dev Gerät beziehungsweise ip addr flush dev Gerät. Mit dem ersten Befehl entfernen Sie gezielt eine einzelne Adressen, das zweite Kommando entfernt alle Adressen einer Netzwerkkarte.

Dabei sollten Sie Vorsicht walten lassen: Löschen Sie die primäre IP-Adresse einer Netzwerkkarte, entfernen Sie automatisch auch sämtliche sekundären Adressen. Abbildung 4 zeigt unter dem Label dummy0:test eine solche sekundäre IP-Adresse. Sie erscheint in der Ausgabe von ip addr show dummy0 als secondary dummy0:test.

Routing nach Regeln

Routen in andere Netzwerke setzen Sie mit Ip etwas anders als von Route gewohnt. Eine Default-Route aktivieren Sie etwa mit dem Kommando ip route add default via 192.168.178.1. Dabei definiert der Schalter via den Router, über den sich das Ziel (in Beispiel der Default-Pfad) erreichen lässt. Um gezielt eine Host- oder Netz-Route einzurichten, ersetzen Sie default und geben die entsprechende Information an, zum Beispiel ip route add 10.0.0.0/24 via 192.168.178.1 für einen Pfad ins Netzwerk 10.0.0.0/24.

Ein klassischer Router analysiert den Weg zur Ziel-IP-Adresse anhand seiner Routing-Tabelle. Advanced Routing oder Policy Routing erlaubt dagegen vielfältige Anpassungen. Dazu verwaltet der Linux-Kernel bis zu 256 unterschiedliche Routing-Tabellen. Vom Admin vorgegebene Regeln definieren, für welche Pakete das System welche Routing-Tabelle zurate zieht.

Die aktuellen Regeln lassen Sie sich mit dem Kommando ip rule show anzeigen (Abbildung 5). Im Beispiel leitet der Rechner Pakete von 10.0.0.7 via NAT weiter (map-to). Pakete, die von der Iptables-Firewall mit der Markierung 0x5 versehen wurden, verarbeitet das System über die Tabelle Nummer 6, Pakete von der Absenderadresse 10.0.0.5 über die Tabelle 5.

Abbildung 5: Beim Policy Routing legen Regeln fest, welche Routing-Tabellen das System f&uuml;r welche Pakete nutzt. Die Ziffer zu Beginn der Ausgabe von <code>ip rule show</code> bestimmt die Priorit&auml;t der jeweiligen Regel.

Abbildung 5: 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 gibt die Reihenfolge vor, in der das System die Regeln abarbeitet. Passt ein Paket auf eine Regel, kommt die entsprechende Tabelle zum Einsatz. Enthält die Tabelle eine für das Paket gültige Route (etwa die Default-Route), bricht das System den Abgleich ab und schickt das Paket auf der Route auf den Weg. Ansonsten geht es mit den restlichen Routen weiter.

Statt über Zahlen lassen sich die Tabellen auch über Namen identifizieren. Dabei steht main für die Haupt-Routing-Tabelle, die der Befehl route ausgibt. Alle weiteren Tabellen lassen sich hingegen über dieses Kommando nicht einsehen.

Stattdessen erfolgt die Namensgebung über die Datei /etc/iproute2/rt_tables (Listing 4). Die Routing-Tabellen mit den Nummern 0, 254 und 255 bleiben für das System reserviert (Zeilen 1 bis 5). Die entsprechenden Namen tauchen dann auch in der Anzeige von ip rule show auf.

Listing 4

# reserved values
#255    local
#254    main
#253    default
#0      unspec
# local
#1      inr.ruhep
5       intern
6       beispiel

Doppelt hält besser

Die Benennung erleichtert es, die Routing-Tabellen zu verwenden. Hierzu genügt es, beim Erzeugen einer Route 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. Unternehmen arbeiten beispielsweise oft mit zwei Netzwerkanschlüssen: einer Standleitung mit fester IP-Adresse und einer DSL-Verbindung. Beide Anschlüsse verwenden jeweils einen eigenen Router. Ein Ziel der Konfiguration besteht nun beispielsweise darin, den gesamten Surf-Verkehr über DSL abzuwickeln und die Standleitung für VPN und E-Mail zu reservieren (Abbildung 6). Das klappt mit Ip sehr einfach.

Abbildung 6: In diesem Szenario mit zwei Internet-Anbindungen soll der Webverkehr nur die billige DSL-Leitung verwenden, w&auml;hrend E-Mail und VPN statische IP-Adressen brauchen und daher &uuml;ber die Standleitung laufen.

Abbildung 6: In diesem Szenario mit zwei Internet-Anbindungen soll der 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 (Listing 5, erste Zeile). Anschließend regelt ein Ip-Kommando, dass das System alle markierten Pakete über eine eigene Tabelle verarbeitet. In dieser Tabelle tragen Sie als Default-Gateway den DSL-Router (im Beispiel 192.168.0.254) ein.

Listing 5

# iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 80,443 -j MARK --set-mark 0x80
# 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) mithilfe der Markierung 0x80. Wegen dieser Regel verarbeitet der Rechner das Paket in der Routing-Tabelle mit dem Namen web und sendet es an das Default-Gateway 192.168.0.254, also an den DSL-Router.

Gleichmäßig verteilt

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, genügt ein passender Aufruf von Ip. Um Load-Balancing zu erlauben, muss der Kernel Multipath-Routing unterstützen – das lässt sich anhand der Variablen CONFIG_IP_ROUTE_MULTIPATH überprüfen, die in der Kernel-Konfiguration gesetzt sein muss.

Um das Load-Balancing einzurichten, genügt der Befehl aus der ersten Zeile von Listing 6. Arbeitet das System mit dynamisch zugewiesenen IP-Adressen, die Sie zum Zeitpunkt des Ip-Aufrufs nicht kennen, akzeptiert das Kommando auch die Angabe der Netzwerkgeräte anstelle der Adressen (zweite Zeile). Der zusätzliche Parameter weight gibt den Routen Gewichte. Das System wählt immer die Route mit dem höchsten Gewicht.

Listing 6

# ip route add default scope global nexthop via 192.168.0.254 nexthop via 192.168.1.254
# ip route add default scope global nexthop dev ppp0 weight 100 nexthop dev ppp1 weight 100

Know-how für Admins

Auch wenn Sie zu Hause selten eine komplizierte Netzwerkstruktur aufbauen müssen: Grundlegende Kenntnisse zu Ip helfen in vielen Situationen – etwa, wenn der X-Server streikt und Sie den Netzwerkzugang von Hand konfigurieren müssen. Über diesen Artikel hinaus erklären etliche ausführliche Dokumente wie die IP Command Reference [3] oder das Linux-Advanced-Routing-Howto [4] die Details des Kommandos.

Fortgeschrittene Anwender oder Netzwerk-Profis greifen darüber hinaus auf das im Paket iproute2 enthaltene Kommando tc (“traffic control”) zurück, um zum Beispiel den Netzwerkverkehr zu priorisieren (Stichwort Quality of Service oder kurz QoS). Damit lässt sich beispielsweise der Zugriff auf das WWW garantieren, während andere Dienste (etwa ein FTP-Server) ansonsten den Zugang komplett auslasten würden. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 02/2019 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben