# ip — Netzwerk-Interfaces, Adressen und Routen verwalten

> Praxis-Guide zu ip (iproute2) — Interfaces, Adressen, Routen, Tunnel und Netzwerk-Namespaces unter Linux verwalten, Nachfolger von ifconfig, route und arp.

Source: https://www.jpkc.com/db/cheatsheets/networking/ip/

<!-- PROSE:intro -->
Das `ip`-Kommando aus dem iproute2-Paket ist das moderne Standard-Werkzeug für Linux-Netzwerkverwaltung. Es ersetzt die veralteten Tools `ifconfig`, `route` und `arp` durch eine einheitliche, konsistente Schnittstelle: Mit `ip link` verwaltest du Netzwerk-Interfaces, mit `ip addr` IPv4- und IPv6-Adressen, mit `ip route` die Routing-Tabelle. Darüber hinaus deckt es Neighbour-Cache, Policy-Routing, Tunnel, Multicast und Netzwerk-Namespaces ab – alles in einem einzigen Befehl, bei Bedarf als JSON-Ausgabe für Skripte.
<!-- PROSE:intro:end -->

## Allgemeine Syntax & Optionen

`ip [ OPTIONS ] OBJECT { COMMAND | help }` — Allgemeine Syntax. OBJECT kann link, addr, route, neigh, rule, tunnel, netns usw. sein.

`ip -4 ...` — Ausgabe auf IPv4 beschränken.

```bash
ip -4 addr show
```

`ip -6 ...` — Ausgabe auf IPv6 beschränken.

```bash
ip -6 addr show
```

`ip -br ...` — Kompaktes Ausgabeformat. Kurz und gut lesbar.

```bash
ip -br addr show
```

`ip -c ...` — Farbige Ausgabe für bessere Übersichtlichkeit.

```bash
ip -c addr show
```

`ip -j ...` — JSON-Ausgabeformat. Nützlich für Skripte.

```bash
ip -j addr show | jq .
```

`ip -s ...` — Statistiken anzeigen (Paketzähler, Fehler usw.).

```bash
ip -s link show eth0
```

`ip -d ...` — Detaillierte/erweiterte Informationen anzeigen.

```bash
ip -d link show
```

`ip -h ...` — Menschenlesbare Ausgabe mit Einheitensuffixen (KB, MB, GB).

```bash
ip -h -s link show
```

`ip -o ...` — Einzeilige Ausgabe pro Datensatz. Praktisch für die Verarbeitung mit grep/awk.

```bash
ip -o addr show | awk '{print $2, $4}'
```

## ip link — Netzwerk-Interfaces

`ip link show` — Alle Netzwerk-Interfaces mit Status und MAC-Adresse auflisten.

```bash
ip link show
```

`ip link show dev DEVICE` — Details eines bestimmten Interfaces anzeigen.

```bash
ip link show dev eth0
```

`ip link set dev DEVICE up` — Ein Interface aktivieren (hochfahren).

```bash
sudo ip link set dev eth0 up
```

`ip link set dev DEVICE down` — Ein Interface deaktivieren (herunterfahren).

```bash
sudo ip link set dev eth0 down
```

`ip link set dev DEVICE mtu MTU` — Die Maximum Transmission Unit eines Interfaces setzen.

```bash
sudo ip link set dev eth0 mtu 9000
```

`ip link set dev DEVICE address MAC` — Die MAC-Adresse eines Interfaces ändern.

```bash
sudo ip link set dev eth0 address 02:42:ac:11:00:02
```

`ip link set dev DEVICE name NEWNAME` — Ein Interface umbenennen (muss vorher deaktiviert sein).

```bash
sudo ip link set dev eth0 name lan0
```

`ip link set dev DEVICE promisc on` — Promiscuous-Modus für ein Interface aktivieren.

```bash
sudo ip link set dev eth0 promisc on
```

`ip link set dev DEVICE txqueuelen N` — Die Sendewarteschlangenlänge setzen.

```bash
sudo ip link set dev eth0 txqueuelen 5000
```

`ip link set dev DEVICE multicast on|off` — Multicast auf einem Interface aktivieren oder deaktivieren.

```bash
sudo ip link set dev eth0 multicast on
```

## ip link — Virtuelle Interfaces

`ip link add NAME type veth peer name PEER` — Ein virtuelles Ethernet-Paar erstellen. Daten, die an ein Ende gesendet werden, erscheinen am anderen Ende.

```bash
sudo ip link add veth0 type veth peer name veth1
```

`ip link add NAME type bridge` — Eine Netzwerk-Bridge erstellen.

```bash
sudo ip link add br0 type bridge
```

`ip link set dev DEVICE master BRIDGE` — Ein Interface zu einer Bridge hinzufügen.

```bash
sudo ip link set dev eth0 master br0
```

`ip link set dev DEVICE nomaster` — Ein Interface aus einer Bridge entfernen.

```bash
sudo ip link set dev eth0 nomaster
```

`ip link add NAME type dummy` — Ein Dummy-Interface erstellen (nützlich für Tests oder als Loopback).

```bash
sudo ip link add dummy0 type dummy
```

`ip link add link DEVICE name NAME type vlan id VID` — Ein VLAN-Interface auf einem physischen Interface erstellen.

```bash
sudo ip link add link eth0 name eth0.100 type vlan id 100
```

`ip link add NAME type macvlan mode bridge` — Ein macvlan-Interface erstellen. Modi: bridge, vepa, private, passthru.

```bash
sudo ip link add macvlan0 link eth0 type macvlan mode bridge
```

`ip link delete NAME` — Ein virtuelles Interface löschen.

```bash
sudo ip link delete br0
```

## ip addr — IP-Adressen

`ip addr show` — Alle IP-Adressen aller Interfaces anzeigen. Kurzform: ip a.

```bash
ip addr show
```

`ip addr show dev DEVICE` — IP-Adressen eines bestimmten Interfaces anzeigen.

```bash
ip addr show dev eth0
```

`ip addr show scope global` — Nur globale Adressen anzeigen (ohne Link-Local oder Loopback).

```bash
ip addr show scope global
```

`ip addr show dynamic` — Nur dynamisch zugewiesene Adressen anzeigen (DHCP, SLAAC).

```bash
ip addr show dynamic
```

`ip addr show permanent` — Nur statisch konfigurierte Adressen anzeigen.

```bash
ip addr show permanent
```

`ip addr add ADDRESS/PREFIX dev DEVICE` — Eine IP-Adresse zu einem Interface hinzufügen.

```bash
sudo ip addr add 192.168.1.100/24 dev eth0
```

`ip addr add ADDRESS/PREFIX dev DEVICE label LABEL` — Eine Adresse mit Label hinzufügen (Interface-Alias).

```bash
sudo ip addr add 10.0.0.1/24 dev eth0 label eth0:1
```

`ip addr add ADDRESS/PREFIX broadcast BCAST dev DEVICE` — Eine Adresse mit einer bestimmten Broadcast-Adresse hinzufügen.

```bash
sudo ip addr add 192.168.1.100/24 broadcast 192.168.1.255 dev eth0
```

`ip addr del ADDRESS/PREFIX dev DEVICE` — Eine IP-Adresse von einem Interface entfernen.

```bash
sudo ip addr del 192.168.1.100/24 dev eth0
```

`ip addr flush dev DEVICE` — Alle Adressen eines Interfaces entfernen.

```bash
sudo ip addr flush dev eth0
```

`ip addr replace ADDRESS/PREFIX dev DEVICE` — Eine Adresse hinzufügen oder aktualisieren. Existiert sie bereits, wird sie aktualisiert; andernfalls neu hinzugefügt.

```bash
sudo ip addr replace 192.168.1.100/24 dev eth0
```

## ip route — Routing-Tabelle

`ip route show` — Die Haupt-Routing-Tabelle anzeigen. Kurzform: ip r.

```bash
ip route show
```

`ip route show table TABLE` — Eine bestimmte Routing-Tabelle anzeigen (main, local, default oder benutzerdefinierter Name/Nummer).

```bash
ip route show table local
```

`ip route show table all` — Routen aus allen Routing-Tabellen anzeigen.

```bash
ip route show table all
```

`ip route get ADDRESS` — Die Route abfragen, die der Kernel für eine bestimmte Adresse verwenden würde.

```bash
ip route get 8.8.8.8
```

`ip route get ADDRESS from SOURCE` — Die Route zu einem Ziel von einer bestimmten Quelladresse abfragen.

```bash
ip route get 8.8.8.8 from 192.168.1.100
```

`ip route add NETWORK/PREFIX via GATEWAY` — Eine statische Route über ein Gateway hinzufügen.

```bash
sudo ip route add 10.0.0.0/8 via 192.168.1.1
```

`ip route add NETWORK/PREFIX dev DEVICE` — Eine Route direkt über ein Interface hinzufügen (ohne Gateway).

```bash
sudo ip route add 10.0.0.0/8 dev eth0
```

`ip route add default via GATEWAY` — Das Standard-Gateway setzen.

```bash
sudo ip route add default via 192.168.1.1
```

`ip route add default via GATEWAY dev DEVICE` — Das Standard-Gateway mit einem bestimmten Ausgangs-Interface setzen.

```bash
sudo ip route add default via 192.168.1.1 dev eth0
```

`ip route add NETWORK/PREFIX via GW metric METRIC` — Eine Route mit einer bestimmten Metrik hinzufügen (Priorität). Niedrigere Metrik = höhere Priorität.

```bash
sudo ip route add 10.0.0.0/8 via 192.168.1.1 metric 100
```

`ip route change NETWORK/PREFIX via GATEWAY` — Eine vorhandene Route ändern.

```bash
sudo ip route change default via 192.168.1.254
```

`ip route replace NETWORK/PREFIX via GATEWAY` — Eine vorhandene Route ersetzen oder hinzufügen, falls sie nicht existiert.

```bash
sudo ip route replace 10.0.0.0/8 via 192.168.1.1
```

`ip route del NETWORK/PREFIX` — Eine Route löschen.

```bash
sudo ip route del 10.0.0.0/8
```

`ip route flush table main` — Alle Routen aus der Haupt-Routing-Tabelle entfernen.

```bash
sudo ip route flush table main
```

`ip route add blackhole NETWORK/PREFIX` — Eine Blackhole-Route hinzufügen. Pakete an dieses Netz werden stillschweigend verworfen.

```bash
sudo ip route add blackhole 198.51.100.0/24
```

`ip route add unreachable NETWORK/PREFIX` — Eine Unreachable-Route hinzufügen. Gibt ICMP host unreachable zurück.

```bash
sudo ip route add unreachable 203.0.113.0/24
```

`ip route add prohibit NETWORK/PREFIX` — Eine Prohibit-Route hinzufügen. Gibt ICMP administratively prohibited zurück.

```bash
sudo ip route add prohibit 192.0.2.0/24
```

## ip route — Erweitertes Routing

`ip route add NETWORK/PREFIX nexthop via GW1 weight W1 nexthop via GW2 weight W2` — Multipath-Routing. Datenverkehr gewichtet auf mehrere Gateways verteilen.

```bash
sudo ip route add default nexthop via 192.168.1.1 weight 1 nexthop via 192.168.2.1 weight 2
```

`ip route add NETWORK/PREFIX via GW src SOURCE` — Eine Route mit bevorzugter Quelladresse hinzufügen.

```bash
sudo ip route add 10.0.0.0/8 via 192.168.1.1 src 192.168.1.100
```

`ip route add NETWORK/PREFIX via GW mtu MTU` — Eine Route mit einer bestimmten Pfad-MTU hinzufügen.

```bash
sudo ip route add 10.0.0.0/8 via 192.168.1.1 mtu 1400
```

`ip route add NETWORK/PREFIX via GW table TABLE` — Eine Route zu einer benutzerdefinierten Routing-Tabelle hinzufügen.

```bash
sudo ip route add 10.0.0.0/8 via 192.168.1.1 table 100
```

`ip route save > FILE` — Die aktuelle Routing-Tabelle in eine Binärdatei speichern.

```bash
ip route save > routes.bin
```

`ip route restore < FILE` — Routen aus einer zuvor gespeicherten Datei wiederherstellen.

```bash
sudo ip route restore < routes.bin
```

## ip neigh — ARP / Neighbor-Cache

`ip neigh show` — Den ARP/NDP-Neighbor-Cache anzeigen (MAC ↔ IP-Zuordnungen). Kurzform: ip n.

```bash
ip neigh show
```

`ip neigh show dev DEVICE` — Neighbor-Einträge eines bestimmten Interfaces anzeigen.

```bash
ip neigh show dev eth0
```

`ip neigh show nud STATE` — Neighbor nach Status filtern: reachable, stale, failed, permanent, noarp, incomplete, delay, probe.

```bash
ip neigh show nud reachable
```

`ip neigh add ADDRESS lladdr MAC dev DEVICE` — Einen statischen ARP-Eintrag hinzufügen.

```bash
sudo ip neigh add 192.168.1.1 lladdr aa:bb:cc:dd:ee:ff dev eth0
```

`ip neigh change ADDRESS lladdr MAC dev DEVICE` — Einen vorhandenen Neighbor-Eintrag ändern.

```bash
sudo ip neigh change 192.168.1.1 lladdr aa:bb:cc:dd:ee:ff dev eth0
```

`ip neigh replace ADDRESS lladdr MAC dev DEVICE nud permanent` — Einen permanenten (statischen) ARP-Eintrag hinzufügen oder ersetzen.

```bash
sudo ip neigh replace 192.168.1.1 lladdr aa:bb:cc:dd:ee:ff dev eth0 nud permanent
```

`ip neigh del ADDRESS dev DEVICE` — Einen Neighbor-Eintrag löschen.

```bash
sudo ip neigh del 192.168.1.1 dev eth0
```

`ip neigh flush dev DEVICE` — Den Neighbor-Cache eines Interfaces leeren.

```bash
sudo ip neigh flush dev eth0
```

`ip neigh flush all` — Den gesamten Neighbor-Cache leeren.

```bash
sudo ip neigh flush all
```

## ip rule — Policy-Routing

`ip rule show` — Alle Policy-Routing-Regeln anzeigen.

```bash
ip rule show
```

`ip rule add from SOURCE/PREFIX table TABLE` — Datenverkehr aus einem Quell-Netz über eine benutzerdefinierte Routing-Tabelle leiten.

```bash
sudo ip rule add from 10.0.0.0/8 table 100
```

`ip rule add to DEST/PREFIX table TABLE` — Datenverkehr zu einem Ziel-Netz über eine benutzerdefinierte Routing-Tabelle leiten.

```bash
sudo ip rule add to 172.16.0.0/12 table 200
```

`ip rule add from SOURCE/PREFIX to DEST/PREFIX table TABLE` — Quelle und Ziel gemeinsam für Policy-Routing abgleichen.

```bash
sudo ip rule add from 10.0.0.0/8 to 172.16.0.0/12 table 100
```

`ip rule add fwmark MARK table TABLE` — Pakete mit einem bestimmten Firewall-Mark über eine benutzerdefinierte Tabelle leiten.

```bash
sudo ip rule add fwmark 1 table 100
```

`ip rule add from SOURCE/PREFIX priority PRIO table TABLE` — Eine Regel mit expliziter Priorität hinzufügen. Niedrigere Zahl = höhere Priorität.

```bash
sudo ip rule add from 10.0.0.0/8 priority 200 table 100
```

`ip rule del RULE` — Eine Policy-Routing-Regel löschen.

```bash
sudo ip rule del from 10.0.0.0/8 table 100
```

`ip rule flush` — Alle Policy-Routing-Regeln entfernen.

```bash
sudo ip rule flush
```

## ip tunnel — IP-Tunnel

`ip tunnel show` — Alle konfigurierten IP-Tunnel anzeigen.

```bash
ip tunnel show
```

`ip tunnel add NAME mode gre remote REMOTE local LOCAL` — Einen GRE-Tunnel zwischen zwei Endpunkten erstellen.

```bash
sudo ip tunnel add gre1 mode gre remote 203.0.113.1 local 198.51.100.1
```

`ip tunnel add NAME mode ipip remote REMOTE local LOCAL` — Einen IPIP (IP-in-IP)-Tunnel erstellen.

```bash
sudo ip tunnel add tun0 mode ipip remote 203.0.113.1 local 198.51.100.1
```

`ip tunnel add NAME mode sit remote REMOTE local LOCAL` — Einen SIT-Tunnel erstellen (IPv6-in-IPv4).

```bash
sudo ip tunnel add sit1 mode sit remote 203.0.113.1 local 198.51.100.1
```

`ip tunnel change NAME ...` — Eine vorhandene Tunnel-Konfiguration ändern.

```bash
sudo ip tunnel change gre1 ttl 64
```

`ip tunnel del NAME` — Ein Tunnel-Interface löschen.

```bash
sudo ip tunnel del gre1
```

## ip netns — Netzwerk-Namespaces

`ip netns list` — Alle benannten Netzwerk-Namespaces auflisten.

```bash
ip netns list
```

`ip netns add NAME` — Einen neuen Netzwerk-Namespace erstellen.

```bash
sudo ip netns add myns
```

`ip netns del NAME` — Einen Netzwerk-Namespace löschen.

```bash
sudo ip netns del myns
```

`ip netns exec NAME COMMAND` — Einen Befehl innerhalb eines Netzwerk-Namespaces ausführen.

```bash
sudo ip netns exec myns ip addr show
```

`ip netns exec NAME bash` — Eine Shell innerhalb eines Netzwerk-Namespaces öffnen.

```bash
sudo ip netns exec myns bash
```

`ip link set dev DEVICE netns NAME` — Ein Interface in einen Netzwerk-Namespace verschieben.

```bash
sudo ip link set dev veth1 netns myns
```

`ip netns identify PID` — Den Netzwerk-Namespace ermitteln, zu dem ein Prozess gehört.

```bash
ip netns identify 1234
```

`ip netns pids NAME` — PIDs auflisten, die in einem Netzwerk-Namespace laufen.

```bash
ip netns pids myns
```

`ip -n NAME addr show` — Kurzschreibweise für ip netns exec. Jeden ip-Unterbefehl in einem Namespace ausführen.

```bash
ip -n myns addr show
```

## ip monitor — Ereignisse in Echtzeit

`ip monitor` — Alle Netzwerk-Ereignisse in Echtzeit beobachten (Adressen, Routen, Links, Neighbor).

```bash
ip monitor
```

`ip monitor link` — Nur Änderungen des Interface-Status beobachten.

```bash
ip monitor link
```

`ip monitor address` — Nur Adressänderungen beobachten.

```bash
ip monitor address
```

`ip monitor route` — Nur Änderungen der Routing-Tabelle beobachten.

```bash
ip monitor route
```

`ip monitor neigh` — Nur Änderungen im Neighbor-Cache (ARP/NDP) beobachten.

```bash
ip monitor neigh
```

`ip monitor all` — Ereignisse aus allen Teilsystemen beobachten.

```bash
ip monitor all
```

## ip maddr & ip mroute — Multicast

`ip maddr show` — Multicast-Adressen aller Interfaces anzeigen.

```bash
ip maddr show
```

`ip maddr show dev DEVICE` — Multicast-Adressen eines bestimmten Interfaces anzeigen.

```bash
ip maddr show dev eth0
```

`ip maddr add MCAST_ADDR dev DEVICE` — Einer Multicast-Gruppe auf einem Interface beitreten.

```bash
sudo ip maddr add 239.0.0.1 dev eth0
```

`ip maddr del MCAST_ADDR dev DEVICE` — Eine Multicast-Gruppe verlassen.

```bash
sudo ip maddr del 239.0.0.1 dev eth0
```

`ip mroute show` — Den Multicast-Routing-Cache anzeigen.

```bash
ip mroute show
```

## Typische Kombinationen & Muster

`ip -br -c addr show` — Kompakte, farbige Übersicht aller Interfaces und ihrer Adressen.

```bash
ip -br -c addr show
```

`ip -4 -br addr show | grep -v DOWN` — Nur aktive IPv4-Interfaces mit ihren Adressen anzeigen.

```bash
ip -4 -br addr show | grep -v DOWN
```

`ip -j route show | jq '.[] | select(.dst=="default") | .gateway'` — Standard-Gateway per JSON-Ausgabe und jq extrahieren.

```bash
ip -j route show | jq '.[] | select(.dst=="default") | .gateway'
```

`ip -o addr show | awk '/inet / {print $2, $4}'` — Alle Interface-Namen mit ihren IPv4-Adressen auflisten.

```bash
ip -o addr show | awk '/inet / {print $2, $4}'
```

`ip -s -h link show dev DEVICE` — Interface-Statistiken mit menschenlesbaren Byte-Angaben anzeigen.

```bash
ip -s -h link show dev eth0
```

`watch -n 1 ip -s link show dev DEVICE` — Interface-Datenverkehr-Statistiken kontinuierlich überwachen.

```bash
watch -n 1 ip -s link show dev eth0
```

`ip addr show dev DEVICE | grep 'inet '` — Schneller Weg, nur die IPv4-Adresse eines Interfaces zu ermitteln.

```bash
ip addr show dev eth0 | grep 'inet '
```

`ip route get 1.1.1.1 | awk '{print $7}'` — Die lokale IP-Adresse ermitteln, über die das Internet erreichbar ist.

```bash
ip route get 1.1.1.1 | awk '{print $7}'
```

## Legacy-Befehlsäquivalente

`ip addr show` — Ersetzt: ifconfig (alle Interfaces und Adressen anzeigen).

```bash
# Legacy: ifconfig
ip addr show
```

`ip link set dev DEVICE up/down` — Ersetzt: ifconfig DEVICE up/down.

```bash
# Legacy: ifconfig eth0 up
sudo ip link set dev eth0 up
```

`ip route show` — Ersetzt: route -n (Routing-Tabelle anzeigen).

```bash
# Legacy: route -n
ip route show
```

`ip route add default via GATEWAY` — Ersetzt: route add default gw GATEWAY.

```bash
# Legacy: route add default gw 192.168.1.1
sudo ip route add default via 192.168.1.1
```

`ip neigh show` — Ersetzt: arp -a (ARP-Cache anzeigen).

```bash
# Legacy: arp -a
ip neigh show
```

`ip -s link show` — Ersetzt: netstat -i (Interface-Statistiken).

```bash
# Legacy: netstat -i
ip -s link show
```

`ip tunnel show` — Ersetzt: iptunnel show.

```bash
# Legacy: iptunnel show
ip tunnel show
```

<!-- PROSE:outro -->
## Fazit

Das `ip`-Kommando ist heute die erste Anlaufstelle für jede Netzwerk-Diagnose und -Konfiguration unter Linux. Wer die Subkommandos `link`, `addr`, `route` und `neigh` beherrscht, kommt in der Praxis weit. Die JSON-Option `-j` in Kombination mit `jq` macht `ip` außerdem zu einem leistungsstarken Baustein für Automatisierungs-Skripte.

## Weiterführende Links

- [ip(8) – Manpage](https://man7.org/linux/man-pages/man8/ip.8.html) – alle Optionen im Überblick (englisch)
- [iproute2 – Wikipedia](https://de.wikipedia.org/wiki/Iproute2) – Hintergrund und Geschichte
- [iproute2 – Projektseite](https://wiki.linuxfoundation.org/networking/iproute2) – Quellcode und Release-Notes (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [ss](https://www.jpkc.com/db/cheatsheets/networking/ss/) – Socket-Statistiken: offene Verbindungen und Ports auflisten
- [netstat](https://www.jpkc.com/db/cheatsheets/networking/netstat/) – klassische Netzwerk-Statistiken (Legacy, aber weit verbreitet)
- [ethtool](https://www.jpkc.com/db/cheatsheets/networking/ethtool/) – Hardware-Eigenschaften und Treiber-Einstellungen von Netzwerk-Interfaces abfragen

