Diskussion:Ip/Anwendung: Unterschied zwischen den Versionen
Zeile 31: | Zeile 31: | ||
Die Ausgabe wird übersichtlicher, wenn man sie auf eine Netzwerkschnittstelle und ein Netzwerkprotokoll eingrenzt. Damit <tt>ip</tt> nur die IPv4-Adressen anzeigt, geben Sie folgenden Befehl ein: | Die Ausgabe wird übersichtlicher, wenn man sie auf eine Netzwerkschnittstelle und ein Netzwerkprotokoll eingrenzt. Damit <tt>ip</tt> nur die IPv4-Adressen anzeigt, geben Sie folgenden Befehl ein: | ||
ip -4 address show | |||
Um nach IPv6-Adressen zu filtern, verwenden Sie stattdessen <tt>-6</tt>. Beide Optionen sind Abkürzungen für die längere Option <tt>-family inet</tt> beziehungsweise <tt>-family inet6</tt>. 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 <tt>-family link</tt>. Das können Sie mit <tt>-0</tt> abkürzen: | Um nach IPv6-Adressen zu filtern, verwenden Sie stattdessen <tt>-6</tt>. Beide Optionen sind Abkürzungen für die längere Option <tt>-family inet</tt> beziehungsweise <tt>-family inet6</tt>. 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 <tt>-family link</tt>. Das können Sie mit <tt>-0</tt> abkürzen: | ||
<tt>ip -0 address show</tt> | <tt>ip -0 address show</tt> | ||
Der Parameter <tt>dev <interface></tt> reduziert die Ausgabe auf eine bestimmte Schnittstelle, beispielsweise „eth0“. Die nur lokal gültigen Link-Local-Adressen filtern Sie durch die Angabe von <tt>scope global</tt> heraus. | Der Parameter <tt>dev <interface></tt> reduziert die Ausgabe auf eine bestimmte Schnittstelle, beispielsweise „eth0“. Die nur lokal gültigen Link-Local-Adressen filtern Sie durch die Angabe von <tt>scope global</tt> heraus. | ||
<tt>ip addr show dev eth0 scope global</tt> | <tt>ip addr show dev eth0 scope global</tt> | ||
Ist Ihnen die Ausgabe zu ausführlich und unübersichtlich, dann verwenden Sie den Schalter <tt>-brief</tt> oder kurz <tt>-br</tt> 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 <tt>-br</tt> mit <tt>-family link</tt> (kurz <tt>-0</tt>), um schnell die MAC-Adressen ihrer Netzwerkgeräte zu ermitteln: | Ist Ihnen die Ausgabe zu ausführlich und unübersichtlich, dann verwenden Sie den Schalter <tt>-brief</tt> oder kurz <tt>-br</tt> 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 <tt>-br</tt> mit <tt>-family link</tt> (kurz <tt>-0</tt>), um schnell die MAC-Adressen ihrer Netzwerkgeräte zu ermitteln: | ||
<tt>ip -br -0 address show</tt> | <tt>ip -br -0 address show</tt> | ||
=== Farbige Ausgabe === | === Farbige Ausgabe === |
Version vom 4. April 2024, 18:06 Uhr
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.
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.
"Mit dem Subkommando monitor zeigt ip laufende Änderungen der Netzwerkkonfiguration an."[1]
Mit dem Subkommando monitor zeigt ip laufende Änderungen der Netzwerkkonfiguration an.
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?
"Mit der Option -statistics zeigt ip Informationen zu übertragenen Daten, Paketverlusten und mehr."[2]
Mit der Option -statistics zeigt ip Informationen zu übertragenen Daten, Paketverlusten und mehr.
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.