Linux Netzwerk-Diagnose: ip, ss, ping, traceroute und dig erklärt
Netzwerkprobleme sind frustrierend – besonders wenn man nicht weiß, wo man anfangen soll. Ist der Port offen? Ist der DNS korrekt? Kommt das Paket überhaupt an? Linux hat für jede dieser Fragen das passende Werkzeug.
Dieser Guide erklärt die wichtigsten Netzwerk-Diagnose-Tools systematisch und zeigt, wie du Probleme Schicht für Schicht einkreist.
Diagnosestrategie: Von Schicht 1 bis Schicht 7
Netzwerkprobleme systematisch einkreisen – von unten nach oben:
Schicht 7 (Anwendung): HTTP/HTTPS, SSH, SMTP → curl, telnet
Schicht 4 (Transport): TCP/UDP-Ports → ss, nmap
Schicht 3 (Netzwerk): IP, Routing → ip route, ping, traceroute
Schicht 2 (Sicherung): Ethernet, ARP → ip link, ip neigh
Schicht 1 (Physical): Kabel, NIC → ip link (UP/DOWN?)
Checkliste bei Verbindungsproblemen:
# 1. Interface und IP
ip addr
# 2. Route vorhanden?
ip route
# 3. Gateway erreichbar?
ping -c4 $(ip route | awk '/default/ {print $3}')
# 4. Internet erreichbar?
ping -c4 8.8.8.8
# 5. DNS funktioniert?
dig google.com +short
# 6. Port erreichbar?
ss -tlnp | grep :80
# 7. Von außen erreichbar?
curl -I http://meine-seite.de
ip: Interfaces, Adressen und Routen
Das ip-Kommando hat ifconfig, route und netstat abgelöst.
Interfaces und Adressen
# Alle Interfaces mit Adressen anzeigen
ip addr
# Kurzform:
ip a
# Nur ein Interface
ip addr show eth0
ip a show enp3s0
# Nur IPv4-Adressen
ip -4 addr
# Nur IPv6-Adressen
ip -6 addr
# Interface-Statistiken (Fehler, Pakete)
ip -s link
ip -s link show eth0
Typische Ausgabe interpretieren
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86234sec preferred_lft 86234sec
inet6 fe80::21a:2bff:fe3c:4d5e/64 scope link
UP/DOWN → Interface aktiv?
LOWER_UP → Kabel gesteckt / WLAN verbunden
192.168.1.100/24 → IP-Adresse / Subnetzmaske
dynamic → DHCP-Adresse
Routen
# Routing-Tabelle anzeigen
ip route
# Oder:
ip r
# Typische Ausgabe:
# default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
# Welche Route wird für eine IP verwendet?
ip route get 8.8.8.8
# 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100
# IPv6-Routen
ip -6 route
ARP / Neighbour-Tabelle
# ARP-Tabelle (bekannte MAC-Adressen)
ip neigh
# 192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
# 192.168.1.50 dev eth0 lladdr 11:22:33:44:55:66 STALE
# ARP für spezifischen Host erzwingen
arping -I eth0 192.168.1.1
Interface temporär konfigurieren
# IP-Adresse hinzufügen (bis zum Neustart)
sudo ip addr add 192.168.1.200/24 dev eth0
# IP-Adresse entfernen
sudo ip addr del 192.168.1.200/24 dev eth0
# Interface hoch/runter
sudo ip link set eth0 down
sudo ip link set eth0 up
# Statische Route hinzufügen
sudo ip route add 10.0.0.0/8 via 192.168.1.1
sudo ip route del 10.0.0.0/8 via 192.168.1.1
# Default-Gateway ändern
sudo ip route del default
sudo ip route add default via 192.168.1.1
ss: Ports und Verbindungen
ss (Socket Statistics) hat netstat abgelöst – schneller und mit mehr Details.
Grundlegende Flags
# -t = TCP
# -u = UDP
# -l = nur lauschende (LISTEN)
# -n = numerische Adressen (kein DNS)
# -p = Prozess anzeigen (braucht sudo)
# -a = alle (auch established)
# Alle lauschenden TCP-Ports
ss -tlnp
# Alle lauschenden UDP-Ports
ss -ulnp
# Alle TCP-Verbindungen (established + listen)
ss -tan
# Alle Verbindungen (TCP + UDP)
ss -tulanp
Typische Ausgabe lesen
sudo ss -tlnp
# State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
# LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
# LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=1234,fd=7))
# LISTEN 0 4096 127.0.0.1:3306 0.0.0.0:* users:(("mariadbd",pid=5678,fd=22))
# LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=9012,fd=3))
0.0.0.0:80 → auf allen Interfaces (von außen erreichbar)
127.0.0.1:3306 → nur localhost (nicht von außen erreichbar)
:::443 → IPv6 auf allen Interfaces
Spezifische Suchen
# Bestimmten Port prüfen
ss -tlnp | grep :80
ss -tlnp | grep :443
# Verbindungen zu einem Remote-Host
ss -tn dst 8.8.8.8
# Verbindungen von einem Quell-Port
ss -tn src :22
# Alle Verbindungen eines Prozesses (PID)
ss -tnp | grep "pid=1234"
# Anzahl Verbindungen pro Status
ss -tan | awk 'NR>1 {print $1}' | sort | uniq -c | sort -rn
# Alle ESTABLISHED-Verbindungen
ss -tn state established
# Verbindungen die CLOSE_WAIT sind (oft ein Fehler)
ss -tn state close-wait | head -20
ping und traceroute: Verbindbarkeit prüfen
ping
# Erreichbarkeit prüfen
ping google.com
# Nur 4 Pakete senden (-c)
ping -c4 8.8.8.8
# Intervall zwischen Paketen (-i)
ping -c10 -i 0.2 8.8.8.8 # alle 200ms
# Paketgröße (-s, Standard: 56 Bytes)
ping -s 1400 8.8.8.8 # MTU-Probleme aufdecken
# Timeout (-W)
ping -c4 -W 1 192.168.1.100 # 1 Sekunde Timeout
# IPv6
ping6 -c4 2001:4860:4860::8888
# Netzwerk-Interface angeben
ping -I eth0 8.8.8.8
# Flood-Ping (als root, für Stresstests)
sudo ping -f 192.168.1.1 # VORSICHT auf Produktionssystemen!
ping-Ausgabe interpretieren
ping -c4 8.8.8.8
# PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=12.3 ms
# 64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=11.8 ms
#
# --- 8.8.8.8 ping statistics ---
# 4 packets transmitted, 4 received, 0% packet loss, time 3004ms
# rtt min/avg/max/mdev = 11.8/12.1/12.3/0.2 ms
ttl=115 → Time-To-Live (sinkt mit jedem Hop)
time=12.3 ms → Roundtrip-Zeit (RTT)
0% packet loss → alle Pakete angekommen
mdev → Jitter (Varianz der RTT)
traceroute / tracepath
# Route zu einem Ziel verfolgen
traceroute google.com
# Ohne DNS-Auflösung (-n, schneller)
traceroute -n 8.8.8.8
# UDP statt ICMP (funktioniert oft besser durch Firewalls)
traceroute -U google.com
# TCP-traceroute (bei ICMP-blockierenden Firewalls)
sudo traceroute -T -p 443 google.com
# tracepath (kein sudo nötig, weniger Optionen)
tracepath google.com
# MTR: Kombiniert ping + traceroute, live
sudo apt install mtr-tiny # Ubuntu/Debian
mtr google.com
mtr --report google.com # einmalige Messung, dann Report
Typische traceroute-Ausgabe lesen
1 192.168.1.1 (192.168.1.1) 1.2 ms ← Router/Gateway
2 10.0.0.1 (10.0.0.1) 5.3 ms ← ISP-Hop
3 * * * ← Hop antwortet nicht (Firewall)
4 74.125.244.201 12.3 ms ← Google-Netzwerk
5 216.239.50.1 12.1 ms
6 8.8.8.8 11.8 ms ← Ziel erreicht
* * * bedeutet: dieser Router beantwortet keine ICMP-Pakete – kein Fehler, häufig normal.
dig und nslookup: DNS-Diagnose
dig (Domain Information Groper)
# A-Record (IPv4)
dig google.com
# Nur die Antwort (kein Header)
dig google.com +short
# AAAA-Record (IPv6)
dig google.com AAAA +short
# MX-Record (Mail)
dig google.com MX +short
# NS-Record (Nameserver)
dig google.com NS +short
# TXT-Record (SPF, DKIM, etc.)
dig google.com TXT
# Bestimmten DNS-Server abfragen (@ = Server)
dig @8.8.8.8 google.com # Google DNS
dig @1.1.1.1 google.com # Cloudflare DNS
dig @192.168.1.1 google.com # Lokaler Router
# Reverse-DNS (IP → Name)
dig -x 8.8.8.8 +short
# dns.google.
# Alle verfügbaren Records (ANY)
dig google.com ANY
DNS-Probleme diagnostizieren
# Welcher DNS-Server wird verwendet?
cat /etc/resolv.conf
resolvectl status # systemd-resolved
# DNS-Kette verfolgen (von Root-Server bis Antwort)
dig +trace google.com
# Propagation prüfen (von verschiedenen Servern)
for server in 8.8.8.8 1.1.1.1 9.9.9.9; do
echo "DNS $server:"; dig @$server example.com +short
done
# DNSSEC prüfen
dig google.com +dnssec +short
# Antwortzeit messen
dig google.com | grep "Query time"
nslookup (ältere Alternative)
nslookup google.com
nslookup google.com 8.8.8.8 # über Google DNS
nslookup -type=MX google.com # MX-Record
curl und wget: HTTP-Diagnose
# HTTP-Header anzeigen
curl -I https://example.com
# Mit Timing (Response-Zeit)
curl -o /dev/null -s -w "Zeit: %{time_total}s\nCode: %{http_code}\n" https://example.com
# SSL-Zertifikat prüfen
curl -vvv https://example.com 2>&1 | grep -A5 "Server certificate"
# Redirect verfolgen
curl -L -I https://example.com
# Mit spezifischem Host-Header (für virtuelle Hosts)
curl -H "Host: anderer-vhost.de" http://server-ip/
# HTTP/2 prüfen
curl -I --http2 https://example.com 2>&1 | grep "HTTP/"
# Antwortzeit aufschlüsseln
curl -o /dev/null -s -w "DNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" https://example.com
# Mit Proxy-Einstellungen ignorieren
curl --noproxy '*' https://example.com
# Zertifikat ignorieren (nur für Tests!)
curl -k https://example.com
nmap: Port-Scanner
# Installieren
sudo apt install nmap # Ubuntu/Debian
sudo dnf install nmap # Fedora
# Häufige Ports auf einem Host scannen
nmap example.com
# Alle Ports (1-65535)
nmap -p- example.com # dauert länger
# Spezifische Ports
nmap -p 80,443,22,3306 example.com
# Port-Range
nmap -p 8000-9000 example.com
# Service- und Version-Erkennung
nmap -sV example.com
# Betriebssystem-Erkennung (braucht root)
sudo nmap -O example.com
# Schneller Scan (weniger Ports, aggressiv)
nmap -F example.com
# UDP-Scan (langsamer)
sudo nmap -sU example.com
# Lokal: welche Ports sind offen?
nmap localhost
sudo nmap -sU localhost # UDP lokal
# Netzwerk-Scan (alle Hosts im Subnetz)
nmap -sn 192.168.1.0/24 # nur Host-Discover (kein Port-Scan)
Rechtlicher Hinweis: Scanne nur Systeme, die dir gehören oder für die du eine ausdrückliche Genehmigung hast. Unberechtigtes Scannen ist in vielen Ländern illegal.
tcpdump: Netzwerkverkehr aufzeichnen
# Installieren
sudo apt install tcpdump
# Alle Pakete auf eth0
sudo tcpdump -i eth0
# Nur HTTP (Port 80)
sudo tcpdump -i eth0 port 80
# Von/zu einer IP
sudo tcpdump -i eth0 host 8.8.8.8
# DNS-Verkehr
sudo tcpdump -i eth0 port 53
# SSH-Verbindungen
sudo tcpdump -i eth0 port 22 -w /tmp/ssh.pcap
# Ohne DNS-Auflösung (schneller)
sudo tcpdump -n -i eth0 port 80
# ICMP (ping)
sudo tcpdump -i eth0 icmp
# In Datei schreiben (für Wireshark)
sudo tcpdump -i eth0 -w /tmp/capture.pcap
# Datei lesen
tcpdump -r /tmp/capture.pcap | head -20
# Verkehr auf allen Interfaces
sudo tcpdump -i any port 80
Häufige Netzwerkprobleme
Kein Internet, aber lokales Netz funktioniert
# 1. Gateway erreichbar?
ping -c4 $(ip route | awk '/default/ {print $3}')
# ja → Gateway ok, Problem danach
# 2. DNS funktioniert?
dig google.com +short @8.8.8.8 # direkt über Google DNS
# funktioniert → lokaler DNS hat Problem
# 3. DNS-Resolver prüfen
cat /etc/resolv.conf
resolvectl status
# Lokalen DNS umgehen (temporär)
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
Port ist offen, aber Service antwortet nicht
# Port lauscht?
sudo ss -tlnp | grep :8080
# Service läuft?
sudo systemctl status mein-service
# Firewall blockiert?
sudo ufw status
sudo iptables -L -n | grep 8080
# Direkt verbinden (Firewall testen)
telnet localhost 8080
curl http://localhost:8080
# Von außen (als Test)
curl http://SERVER-IP:8080
SSH-Verbindung bricht ab
# Keep-Alive in ~/.ssh/config
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
# Auf dem Server (in /etc/ssh/sshd_config):
ClientAliveInterval 120
ClientAliveCountMax 2
# Netzwerk-Qualität prüfen
mtr -r server-ip
ping -c100 server-ip | tail -5 # Paketverlust messen
DNS-Auflösung langsam oder schlägt fehl
# Aktuellen DNS prüfen
resolvectl status | grep "DNS Servers"
# Andere DNS-Server testen
dig @8.8.8.8 google.com +short
dig @1.1.1.1 google.com +short
# DNS-Cache leeren (Ubuntu)
sudo systemd-resolve --flush-caches
sudo resolvectl flush-caches
# DNS-Cache leeren (Fedora)
sudo systemd-resolve --flush-caches
Schnell-Referenz
# Netzwerk-Übersicht
ip a # Interfaces und IPs
ip r # Routing-Tabelle
# Ports prüfen
sudo ss -tlnp # lauschende TCP-Ports
sudo ss -ulnp # lauschende UDP-Ports
sudo ss -tnp state established # aktive Verbindungen
# Erreichbarkeit
ping -c4 HOST # Erreichbarkeit
traceroute HOST # Route verfolgen
mtr HOST # Live-Traceroute
# DNS
dig HOST +short # A-Record
dig HOST MX +short # Mail-Server
dig @8.8.8.8 HOST # über Google DNS
# HTTP
curl -I URL # HTTP-Header
curl -o/dev/null -s -w "%{http_code}\n" URL # Statuscode
# Port-Scan
nmap -p 80,443 HOST # schnell
sudo nmap -sV HOST # mit Diensterkennung
Fazit
Netzwerkdiagnose ist ein schrittweiser Prozess: von der Schicht 1 (Kabel an?) bis zur Schicht 7 (HTTP korrekt?). Die wichtigsten Tools:
ipersetzt ifconfig und route – zeigt Interfaces, IPs, Routenssersetzt netstat – zeigt Ports und Verbindungen schnellping+traceroutefür Layer-3-Diagnosedigfür DNS-Probleme – deutlich mächtiger als nslookupcurl -Ifür HTTP-Diagnosenmapfür Port-Scans (nur auf eigene Systeme!)