Anleitungen

IP-Adresse unter Linux anzeigen: ip addr, hostname -I und die öffentliche IP

Linux IP-Adresse anzeigen mit ip -brief addr show oder hostname -I. Die öffentliche IP-Adresse hinter NAT zeigt curl ifconfig.me. So findest du die Server-IP.

Veröffentlicht ~7 Min. Lesezeit
Auf dieser Seite

Kurz gesagt: Die IP-Adresse zeigst du unter Linux mit ip -brief addr show an: Der Befehl listet jedes Interface mit seiner Adresse in einer kurzen Zeile; hostname -I gibt nur die Adressen aus, sonst nichts. Keiner der beiden verrät dir aber deine öffentliche IP-Adresse, wenn der Server hinter NAT oder im privaten Netz eines Cloud-Anbieters steht. Dafür fragst du mit curl ifconfig.me einen Server außerhalb deines Netzes.

AufgabeBefehl
Alle Interfaces, Kurzformip -brief addr show
Alle Interfaces, alle Detailsip addr show
Nur ein Interfaceip addr show eth0
Nur Adressen, ohne Interface-Namenhostname -I
Standardroute (welches Interface ins Internet geht)ip route get 1.1.1.1
Öffentliche IP, von außen gesehencurl ifconfig.me
Öffentliche IP, als JSON mit mehr Detailscurl ipinfo.io
Wem eine öffentliche IP gehörtwhois 203.0.113.10
Altes Werkzeug (oft nicht installiert)ifconfig

ip addr: das aktuelle Werkzeug

Kurzform
ip -brief addr show
Beispielausgabe
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             203.0.113.10/24 2001:db8::a1b2/64 fe80::be24:11ff:fe02:713b/64
alle Details
ip addr show
Beispielausgabe (ein Interface, gekürzt)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether be:24:11:02:71:3b brd ff:ff:ff:ff:ff:ff
    inet 203.0.113.10/24 metric 100 brd 203.0.113.255 scope global dynamic eth0
       valid_lft 3542sec preferred_lft 3542sec
    inet6 2001:db8::a1b2/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 86389sec preferred_lft 14389sec
    inet6 fe80::be24:11ff:fe02:713b/64 scope link
       valid_lft forever preferred_lft forever
  • lo ist immer das Loopback-Interface, 127.0.0.1, und nie deine echte Adresse, auch nicht in der kürzesten Liste.
  • Das /24 hinter einer Adresse ist die Subnetzmaske in CIDR-Schreibweise, nicht Teil der IP selbst.
  • fe80::… ist eine Link-Local-Adresse für IPv6, die auf jedem Interface automatisch entsteht und nur aus demselben lokalen Netz erreichbar ist, also nie eine Adresse, die du an andere weitergibst.
  • dynamic neben einer Adresse heißt, dass DHCP (oder bei IPv6 SLAAC) sie vergeben hat und sie sich ändern kann; static heißt, sie wurde von Hand in der Konfiguration des Interfaces gesetzt und bleibt fest.

Ein bestimmtes Interface

Linux
ip addr show eth0
ip -4 addr show eth0    # nur IPv4
ip -6 addr show eth0    # nur IPv6

Die Namen der Interfaces hängen von Anbieter und Image ab: eth0 ist auf virtuellen KVM-Maschinen verbreitet, das vorhersagbare Namensschema von Ubuntu erzeugt stattdessen Namen wie enp1s0. ip -brief link show listet jedes vorhandene Interface auf, bevor du eines auswählst.

hostname -I: nur die Adressen

Linux
hostname -I
Beispielausgabe
203.0.113.10 2001:db8::a1b2 fe80::be24:11ff:fe02:713b%eth0

Das große -I (nicht das kleine -i, das etwas ganz anderes tut und veraltet ist) gibt jede Adresse jedes Interfaces als einfache, durch Leerzeichen getrennte Liste aus. Damit ist es die Form der Wahl in einem Skript, weil es nichts herauszuparsen gibt:

nur die erste (meist die Haupt-) IPv4-Adresse
hostname -I | awk '{print $1}'

Öffentliche IP-Adresse herausfinden: von außen fragen

ip addr und hostname -I zeigen dir immer nur die Adresse, die diese Maschine hat. Auf einem VPS hinter Cloud-NAT, hinter einem Router zu Hause oder in einem Docker-Container ist das eine private Adresse, nicht die, unter der dich der Rest des Internets sieht. Um die öffentliche IP-Adresse herauszufinden, fragst du einen Server außerhalb deines eigenen Netzes:

Linux · macOS
curl ifconfig.me
curl -4 ifconfig.me    # IPv4 erzwingen
curl -6 ifconfig.me    # IPv6 erzwingen
curl ipinfo.io         # zusätzlich Stadt, ASN und Organisation als JSON

Auf einem typischen KVM-VPS, bei dem die öffentliche IP direkt auf dem Netzwerk-Interface konfiguriert ist statt hinter NAT, zeigt ip addr schon dieselbe Adresse, die curl ifconfig.me melden würde; die beiden weichen nur hinter NAT oder einem Load Balancer in der Cloud voneinander ab. Das Tool Meine IP-Adresse (engl.) macht dieselbe Prüfung von außen im Browser, ganz ohne Terminal, und zeigt IPv4 und IPv6 nebeneinander.

Öffentliche oder private IP-Adresse: woran du sie erkennst

Ob eine Adresse öffentlich ist, siehst du ihr am Bereich an. Alles in den folgenden Bereichen ist nicht aus dem Internet erreichbar; zeigt ip addr nur solche Adressen, steht deine öffentliche IP-Adresse woanders, meist auf dem Router oder dem NAT-Gateway davor:

BereichBedeutung
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16Private Netze nach RFC 1918: Heimnetz, Firmennetz, internes Netz eines Cloud-Anbieters
100.64.0.0/10Carrier-Grade NAT (RFC 6598): Der Anbieter teilt eine öffentliche Adresse auf viele Kunden auf
127.0.0.0/8, ::1Loopback, nur die Maschine selbst
169.254.0.0/16, fe80::/10Link-Local: nur im selben Netzsegment gültig; eine 169.254er-Adresse heißt oft, dass DHCP keine Antwort gab
fc00::/7Private IPv6-Adressen (Unique Local Addresses), in der Praxis meist fd00::/8

Alles andere ist in der Regel eine öffentliche Adresse; bei IPv6 sind das die globalen Adressen aus 2000::/3. Die Beispieladressen in dieser Anleitung, 203.0.113.10 und 2001:db8::a1b2, stammen übrigens aus den Bereichen, die für Dokumentation reserviert sind (RFC 5737 und RFC 3849): Auf einem echten Server siehst du dort deine eigenen Adressen.

Welches Interface spricht wirklich mit dem Internet?

Linux
ip route get 1.1.1.1
Beispielausgabe
1.1.1.1 via 203.0.113.1 dev eth0 src 203.0.113.10 uid 0
    cache

Auf einem Server mit einer Netzwerkkarte ist das offensichtlich, aber sobald es mehrere Interfaces gibt (ein VPN-Interface, eine Docker-Bridge, eine zweite Netzwerkkarte in einem internen VLAN), ist das der zuverlässige Weg, das Interface zu finden, über das dein Traffic den Server tatsächlich verlässt. Das Feld src ist die Absenderadresse dabei, also die Adresse, die ein entfernter Server sieht, egal was andere Interfaces anzeigen.

ifconfig funktioniert noch, wo es installiert ist

wenn net-tools installiert ist
ifconfig

ifconfig ist das ältere Werkzeug im BSD-Stil und auf aktuellen Minimal-Images von Debian, Ubuntu, Rocky oder AlmaLinux nicht vorinstalliert. Es steckt im Paket net-tools, das der Befehl ip (aus iproute2) schon vor über einem Jahrzehnt in der Dokumentation jeder Linux-Distribution abgelöst hat. Braucht ein Skript oder eine alte Gewohnheit es noch, findest du die Installationszeile für jede Distribution in ifconfig: command not found (engl.); für alles Neue schreibst du besser ip-Befehle.

Server-IP herausfinden: zeigt die Domain auf diese IP?

Die eigene IP des Servers zu kennen ist meist der erste Schritt, um eine Domain darauf zeigen zu lassen oder zu prüfen, ob das DNS schon nachgezogen hat. Umgekehrt findest du so auch die IP-Adresse eines Servers heraus, von dem du nur den Namen kennst:

Linux · macOS · Windows
dig +short example.com
nslookup example.com

Wie du die Domain per DNS auf den Server zeigen lässt, vom A-Record bis zum Abwarten der TTL, steht in Domain auf einen VPS zeigen lassen (engl.).

Die Adresse in einem Skript nutzen

gängige Muster
PUBLIC_IP=$(curl -s ifconfig.me)
LOCAL_IP=$(hostname -I | awk '{print $1}')
MAIN_IP=$(ip -4 -j addr show eth0 | python3 -c "import sys,json; print(json.load(sys.stdin)[0]['addr_info'][0]['local'])")

-j gibt bei jedem ip-Unterbefehl JSON statt des üblichen Textes aus. Das lohnt sich, sobald ein Skript zuverlässig ein bestimmtes Feld herausgreifen muss, statt Spalten zu parsen, die sich zwischen Distributionen verschieben können.

Häufige Fragen

Mit welchem Befehl zeige ich unter Linux die IP-Adresse an?

ip -brief addr show listet jedes Interface mit seiner Adresse in einer kurzen Zeile. hostname -I ist noch kürzer, wenn du nur die Adressen selbst brauchst, ohne Interface-Namen, und lässt sich deshalb auch am einfachsten in einem Skript nutzen. Das alte ifconfig fehlt auf aktuellen Minimal-Images, weil es im Paket net-tools steckt.

Wie finde ich meine öffentliche IP-Adresse heraus?

Frag einen Server außerhalb deines Netzes, unter Linux und macOS etwa mit curl ifconfig.me. ip addr zeigt nur die Adresse auf dem eigenen Netzwerk-Interface, und die ist hinter NAT (Router zu Hause, Load Balancer in der Cloud, Docker-Container) eine private Adresse wie 192.168.x.x oder 10.x.x.x, nicht die, die der Rest des Internets sieht.

Wie finde ich die IP-Adresse eines Servers heraus?

Auf dem Server selbst mit ip -brief addr show, und auf einem VPS mit öffentlicher IP direkt auf dem Interface ist das schon die Adresse, unter der er erreichbar ist. Kennst du nur den Namen des Servers, löst dig +short example.com oder nslookup example.com ihn von jedem Rechner aus in seine IP-Adresse auf.