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.
| Aufgabe | Befehl |
|---|---|
| Alle Interfaces, Kurzform | ip -brief addr show |
| Alle Interfaces, alle Details | ip addr show |
| Nur ein Interface | ip addr show eth0 |
| Nur Adressen, ohne Interface-Namen | hostname -I |
| Standardroute (welches Interface ins Internet geht) | ip route get 1.1.1.1 |
| Öffentliche IP, von außen gesehen | curl ifconfig.me |
| Öffentliche IP, als JSON mit mehr Details | curl ipinfo.io |
| Wem eine öffentliche IP gehört | whois 203.0.113.10 |
| Altes Werkzeug (oft nicht installiert) | ifconfig |
ip addr: das aktuelle Werkzeug
ip -brief addr showlo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 203.0.113.10/24 2001:db8::a1b2/64 fe80::be24:11ff:fe02:713b/64ip addr show2: 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
/24hinter 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.dynamicneben einer Adresse heißt, dass DHCP (oder bei IPv6 SLAAC) sie vergeben hat und sie sich ändern kann;staticheißt, sie wurde von Hand in der Konfiguration des Interfaces gesetzt und bleibt fest.
Ein bestimmtes Interface
ip addr show eth0
ip -4 addr show eth0 # nur IPv4
ip -6 addr show eth0 # nur IPv6Die 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
hostname -I203.0.113.10 2001:db8::a1b2 fe80::be24:11ff:fe02:713b%eth0Das 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:
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:
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 JSONAuf 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:
| Bereich | Bedeutung |
|---|---|
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 | Private Netze nach RFC 1918: Heimnetz, Firmennetz, internes Netz eines Cloud-Anbieters |
100.64.0.0/10 | Carrier-Grade NAT (RFC 6598): Der Anbieter teilt eine öffentliche Adresse auf viele Kunden auf |
127.0.0.0/8, ::1 | Loopback, nur die Maschine selbst |
169.254.0.0/16, fe80::/10 | Link-Local: nur im selben Netzsegment gültig; eine 169.254er-Adresse heißt oft, dass DHCP keine Antwort gab |
fc00::/7 | Private 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?
ip route get 1.1.1.11.1.1.1 via 203.0.113.1 dev eth0 src 203.0.113.10 uid 0
cacheAuf 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
ifconfigifconfig 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:
dig +short example.com
nslookup example.comWie 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
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.