FAQ: Netzwerke analysieren und konfigurieren mit ip
Bei neueren Linux-Distributionen fehlen häufig bekannte Befehle wie netstat oder ifconfig. Diese sind seit langem obsolet dank des Kommandozeilenprogramms ip.
- Holger Zuleger
ip versus ifconfig
Ich habe mich an das Kommando ifconfig
zur Anzeige der IP-Adressen auf einem Netzwerkinterface gewöhnt. Warum soll ich stattdessen das Kommando ip
verwenden? Ich bin mit ifconfig
immer gut zurecht gekommen.
Das moderne ip
Kommando liefert viele Informationen, die über das Kommando ifconfig
schlichtweg nicht angezeigt werden. Wer sich beispielsweise intensiv mit IPv6 beschäftigt, wird um ip
nicht herum kommen. Darüber hinaus bündelt ip
eine Vielzahl von einzelnen Subkommandos zur Netzwerkkonfiguration hinter einer einheitlichen und strukturierten Benutzerschnittstelle. Damit stellt es einen Ersatz für eine ganze Reihe von Kommandos wie arp
oder route
dar.
Vielnutzer profitieren zudem von der Möglichkeit, Optionen und Parametereinstellungen fast beliebig abzukürzen. Statt ip route
showreicht ein ip rou sh
oder ip r s
, um die konfigurierten Routen anzuzeigen. Auch Optionen akzeptiert es beispielsweise als -h
, -help
, oder auch --help
. Außerdem kann man die Ausgabe in verschiedenen Formaten anzeigen, beispielsweise strukturiert als JSON. So lässt sich die Ausgabe von ip teilweise in eigenen Skripten weiterverarbeiten.
Doch vor allem ist die Zukunft des Pakets Net-Tools – zu dem auch ifconfig
, arp
und route
gehören – fraglich, da dessen Entwicklung praktisch eingestellt wurde. Bereits jetzt ist in gängigen Linux-Distributionen wie Debian, Red Hat und Ubuntu das Kommando ifconfig
nicht mehr vorinstalliert. Hier muss man entweder die net-tools
nachinstallieren oder sich mit dem ip
Kommando anfreunden.
IP-Adressen anzeigen
Wie zeigt mir ip
die IP-Adresse eines Netzwerkgerätes an?
Um von jeder aktiven Netzwerkschnittstelle alle IP-Adressen anzuzeigen, geben Sie folgenden Befehl ein:
ip address show
Sie können den Befehl auch abkürzen und zum Beispiel nur ip a s
eingeben. Die IPv4-Adresse zu der Schnittstelle finden Sie in der Zeile, die mit inet
anfängt, beispielsweise inet 192.168.101.4/24
. IPv6-Adressen leitet das Schlüsselwort inet6
ein. Welche Zeile der Ausgabe von ip address
was bedeutet, erläutert die Grafik unten.
Bei IPv6 ist die Ausgabe weitaus umfangreicher, da auf einer Netzwerkschnittstelle üblicherweise mehrere IPv6-Adressen verwendet werden, die mit inet6
gekennzeichnet sind. Deren Unterschiede sind mit ifconfig
nicht sichtbar.
Ausgabe filtern
Die Ausgabe der IP-Adressen mit ip address show
ist sehr umfangreich und verwirrend. Wie kann ich die Ausgabe auf die aktuell genutzten Adressen reduzieren und übersichtlicher gestalten?
Die Ausgabe wird übersichtlicher, wenn man sie auf eine Netzwerkschnittstelle und ein Netzwerkprotokoll eingrenzt. Damit ip
nur die IPv4-Adressen anzeigt, geben Sie folgenden Befehl ein:
ip -4 address show
Um nach IPv6-Adressen zu filtern, verwenden Sie stattdessen -6
. Beide Optionen sind Abkürzungen für die längere Option -family inet
beziehungsweise -family inet6
. Die Reduzierung auf eine Adressfamilie unterdrückt darüber hinaus die Ausgabe der MAC-Adresse. Sind Sie lediglich an der MAC-Adresse interessiert, erhalten Sie die entsprechende Daten mit -family link
. Das können Sie mit -0
abkürzen:
ip -0 address show
Der Parameter dev <interface>
reduziert die Ausgabe auf eine bestimmte Schnittstelle, beispielsweise „eth0“. Die nur lokal gültigen Link-Local-Adressen filtern Sie durch die Angabe von scope global
heraus.
ip addr show dev eth0 scope global
Ist Ihnen die Ausgabe zu ausführlich und unübersichtlich, dann verwenden Sie den Schalter -brief
oder kurz -br
für eine kompakte Darstellung. In der Ausgabe sind nur noch die Bezeichnung der Netzwerkschnittstellen, ihr Verbindungsstatus und die Liste der IP-Adressen und Angabe des Subnetzes. Kombinieren Sie die Kurzausgabe -br
mit -family link
(kurz -0
), um schnell die MAC-Adressen ihrer Netzwerkgeräte zu ermitteln:
ip -br -0 address show
Farbige Ausgabe
Kann ich die unterschiedlichen Einträge farblich hervorheben?
Diese Funktion ist in ip
bereits eingebaut. Verwenden Sie dafür den Schalter -color
oder kurz -c
, den Sie vor dem eigentlichen Subkommando schreiben.
ip -color address show
Damit ip
grundsätzlich die Ausgabe einfärbt, setzen Sie einen Shell-Alias. Bei der Bash tragen Sie alias ip='ip -color=auto'
in die .bashrc ein.
Besonderheiten von IPv6
Mir werden für manche Netzwerkschnittstellen mehrere IPv6-Adressen angezeigt. Wie kann ich diese mit ip
unterscheiden?
Bei den meisten IPv6-Adressen handelt es sich um sogenannte temporäre oder „Privacy“-Adressen. Sie werden zusätzlich zu der stabilen Adresse täglich neu erzeugt und bleiben in der Regel für sieben Tage bestehen. Sie erkennen mit ip
diese Adressen an der Angabe temporary
. Bei einem permanent eingeschalteten Linux-Rechner sammeln sich daher bis zu 8 IPv6-Adressen pro Interface an. Um den Status und den Typ einer IPv6-Adresse anzuzeigen, verwenden sie das Kommando ip -6 address show
. Hierbei wird sowohl der Adresstyp (zum Beispiel „temporary“) als auch der Status (beispielsweise „deprecated“) in der Ausgabe hinter der IPv6-Adresse angezeigt.
Lebensdauer von IP-Adressen
Wie kann ich die Lebensdauer einer IPv6-Adresse anzeigen?
Das Kommando ip address show
zeigt auch die Lebensdauer einer IP-Adresse an. Sie finden die Angaben als Sekundenwert unter jeder IP hinter valid_lft
(„Valid Lifetime“) und preferred_lft
(„Preferred Lifetime“).
IPv6 erlaubt den dynamischen Wechsel der IPv6-Adresse eines Systems. Dabei werden jeder IPv6-Adresse die beiden Zeitwerte „Valid Lifetime“ und „Preferred Lifetime“ hinzugefügt. Beide Werte werden von ifconfig
unter Linux nicht angezeigt, sind aber wesentlich in der Bewertung des Status einer IPv6-Adresse. Bei IPv4-Adressen gibt es keine Lebensdauer. Der Wert sagt hier, wie lange die Zuweisung der Adresse vom DHCP-Server an den Host gültig ist.
Ausgabe für Skripte
Ich möchte die Ausgabe von ip
weiterverarbeiten. Verfügt ip
außer der Kurzfassung mit -brief
noch über weitere Ausgabeformate?
Sie unterdrücken die mehrzeilige Ausgabe durch -oneline
oder -o
. Im Unterschied zu -brief
gibt der einzeilige Modus auch die MAC-Adresse und Lebensdauer aus. Die Ausgabe von -o
können Sie dann ganz einfach durch grep
, sed
oder awk
nachbearbeiten. Das erleichtert auch die Nutzung in Batchdateien. Die folgende Kommandozeile führt zu einer übersichtlichen Ausgabe aller wesentlichen Informationen der global gültigen IPv6-Adressen einer Netzwerkschnittstelle:
ip -6 -o a s dev eth0 scope global | awk '{ print $4, $(NF-2), $NF }'
Alternativ gibt ip strukturiertes JSON mit -json
oder -j
aus oder als „hübsche“, besser lesbare Variante mit -pretty
beziehungsweise -p
:
ip -j -p address show
Sie können andere Schalter wie -o
oder -br
mit der JSON-Ausgabe kombinieren.
Hilfestellungen
Die Manualseite zu ip
erklärt nicht alle Optionen. Wo finde ich Infos dazu?
Das Kommando ip
ist so umfangreich, dass für jede Sparte eine eigene Manualseite eingerichtet wurde. Für Optionen des Subkommandos ip address
geben Sie zum Beispiel man ip-address
ein. Für die Unterbefehle wie route
oder link
gibt es entsprechende Manualseiten unter ip-route
, ip-link
und so weiter.
Eine Liste alle Manpages für ip
erhalten Sie, wenn Sie man ip-
eingeben und dann die Tabulator-Taste zweimal drücken. Alternativ lassen Sie sich mit apropos "^ip-"
(Bindestrich nicht vergessen) eine Liste der Hilfeseiten anzeigen. Wollen Sie nur wissen, wie ein Parameter bei einem Subkommando lautet, dann rufen Sie dieses mit einem angehängtem help
auf. Sie bekommen dann eine detaillierte Syntaxangabe angezeigt.
Netzwerküberwachung
Bei der Fehlersuche im Netzwerk gebe ich immer wieder dieselben Kommandos ein, um Veränderungen zu beobachten. Geht das nicht einfacher?
Das ip-Kommando verfügt über einen Monitor-Modus, mit dem Nachrichten des Netlink Bus des Kernels angezeigt werden. Geben Sie dazu den folgenden Befehl ein:
ip -ts monitor label
Die Option -ts
stellt jeder Ausgabezeile einen kompakten Zeitstempel voran. Mit der Option label
gibt ip
den Typ der Nachricht mit aus, zum Beispiel „[ADDR]“ für Meldungen zu Änderungen der IP-Adresse.
Um nach Nachrichten aus einer bestimmten Kategorie zu filtern, geben Sie dazu den gewünschten Typ an. Für den Neighbor-Cache ist das:
ip -6 -ts monitor neigh
Verwenden Sie anstelle von neigh
die Bezeichnungen address
oder route
, um nach Adress- (SLAAC) oder Routing-Nachrichten zu filtern.
Offene Netzwerkverbindungen anzeigen
Offene Netzwerkverbindungen samt Ports habe ich mir bisher mit netstat
angesehen. Was verwende ich stattdessen, wenn die net-tools nicht installiert sind?
Verwenden Sie anstelle von netstat
das Tool ss
, was wie ip
zum Paket iproute2
gehört. Dabei überschneiden sich einige wichtige Optionen mit netstat
, wie -n
für die numerische Anzeige der Ports sowie Kürzel für TCP (-t
) oder IPv6 (-6
). Daher klappt auch der Aufruf von ss -tulpen
, aber dessen Ausgabe ist etwas unübersichtlich. Kompakter ist ss -tulpn
ohne -e
für detaillierte Informationen. Für Angaben zu Prozessen benötigen Sie Systemverwalter-Rechte. Ausgeschrieben lautet der Befehl:
sudo ss --tcp --udp --listening --processes --numeric
Eine Alternative zu ss
ist der Befehl lsof -i -n
, der alle aktiven Netzwerkverbindungen auflistet.
ARP und Neighbor Cache
Ich habe bisher arp
verwendet, um mir den Cache des „Address Resolution Protocol“ (ARP) anzeigen zu lassen. Wie lautet der Befehl mit ip
?
Das geht ganz knapp mit ip n s
. Das n
steht für „neighbor“. Die ausgeschriebene Fassung lautet:
ip neighbor show
Das Äquivalent zum ARP-Cache von IPv4 ist in IPv6 der sogenannte „Neighbor Cache“ und wird ebenfalls über das Subkommando neighbor angezeigt.
ip -6 neighbor show
Das „Address Resolution Protocol“ (ARP) beziehungsweise das „Neighbor Discovery Protocol“ (NDP) ermittelt die Layer-2-Adresse (MAC) eines lokalen, also im gleichen Subnetz erreichbaren Nachbarn. Das Mapping von IP- und MAC-Adresse wird im Kernel jeweils in einem Cache für IPv4 und IPv6 gespeichert. Das Kommando ip neighbor
kann beide Caches anzeigen und auch manipulieren.
Routing
Wie sehe ich mit ip
, wohin meine Routen zeigen, insbesondere die Default-Route?
Für IPv4 verwenden Sie ip route show
, um die gesamte Routingtabelle des Endsystems anzuzeigen. Zur Anzeige der IPv6-Routen verwenden Sie zusätzlich die Option -6
:
ip -6 route show
Sind Sie nur an der Default-Route interessiert, filtern Sie die Ausgabe danach mit match
:
ip route show match default
Statistik
Das ifconfig
Kommando hat immer die Anzahl der empfangenen und gesendeten Daten angezeigt. Wie mache ich das bei ip
?
Die Ausgabe der statistischen Daten ist über die Option -statistics
oder abgekürzt -s
erreichbar. Geben sie zusätzlich die Option -h
beziehungsweise -human-readable
an, bekommen Sie die Byte-Angaben umgerechnet in verständlicheren Einheiten wie Megabyte angezeigt:
ip -stats -human link show
Mit Filtern wie dev eth0
können Sie die statistischen Daten auf ein bestimmtes Gerät einschränken.