Iproute2

From mxlinuxusers.de
Jump to navigation Jump to search

Das Paket iproute2 enthält eine Sammlung von Kommandos, mit denen Infos über das Netzwerk angezeigt und Einstellungen verändert werden können. Dabei handelt es sich um diese Kommandos:

  • arpd
  • bridge
  • ctstat (Netzwerkstatistiken unter Linux. Ist nur ein Link auf lnstat)
  • devlink
  • ip
  • lnstat (Netzwerkstatistiken unter Linux)
  • nstat (Anzeige von SNMP-Statistiken)
  • routef (löscht die Routing-Tabelle. Vorsicht! Das bedeutet, dass alle Routen gelöscht werden und das Netzwerk unbrauchbar wird bis die Routing-Tabelle wieder von Hand aufgebaut wird, z.B. mit route add ...)
  • routel (zeigt die Routing-Tabelle in einem gut lesbaren Format an. Kann anstelle von ip route benutzt werden)
  • rtacct
  • rtmon (Routingtabelle protokollieren)
  • rtstat (Netzwerkstatistiken unter Linux. Ist nur ein Link auf lnstat)
  • ss (ersetzt netstat)
  • tc
  • tipc

Diese ersetzen die älteren Kommandos arp, ifconfig, ipmaddr, iptunnel, nameif, netstat und route.

arpd[edit | edit source]

arpd ist ein Kommando das im Hintergrund läuft (als Dämon) und sich um sogenannte "gratuitous ARP Informationen" (gratuitous=unaugefordert) kümmert. Da man damit in normalen kleinen Netzen eher nicht in Berührung kommt, wird hier nur kurz auf die allgemeinen Zusammenhänge eingegangen ohne ins Detail zu gehen.

Um Daten im Netzwerk zu versenden und zu empfangen braucht man drei Adressen, die IP-Adresse, die Netzmaske (z.B. 255.255.255.0 oder kurz /24) und die Hardware-Adresse (MAC) der Netzwerkkarte. Für die IP und die Netzmaske ist in der Regel der Router und/oder das DHCP-Protokoll zuständig. Dieses hat in seinen Infos aber keinen Platz für die MAC-Adressen vorgesehen, so daß dafür ein weiteres Protokoll, das Address Resolution Protocol (dt. „Adressauflösungsprotokoll“) kurz ARP notwendig ist. Dieses baut eine Tabelle mit den Zuordnungen von MAC- zu IP-Adressen auf, den sogenannten ARP-Cache. Da steht dann z.B. drin, daß die IP 192.168.178.21 zur Ethernet-Karte eth0 mit der MAC c9:0d:15:31:90:2b gehört. Wer sich das selbst ansehen will, kann im Teminal diesen Befehl eingeben

ip neigh

oder das alte Kommando

arp -a

Jetzt kann es aber passieren, daß sich diese Zuordnung ändert, weil z.B. die Netzwerkkarte ausgetauscht wurde. Da zumindest theoretisch jede MAC-Adresse auf der Welt einmalig ist, stimmt diese vorher im Beispiel erwähnte Zuordnung 192.168.178.21 <-> c9:0d:15:31:90:2b nicht mehr und muss im ARP-Cache korrigiert werden. Genau dies veranlasst der betroffene Host, indem er seine IP-Adresse und die neue MAC "unaufgefordert" als "gratuitous ARP Information" ins Netzwerk schickt, der Dienst arpd merkt dies und sammelt diese neuen Infos, um sie bei Bedarf an den Kernel weiterzugeben, damit der ARP-Cache korrigiert werden kann.

arpd kann auch vom Administrator benutzt werden um Fehler im Netzwerk (speziell doppelt vergebene IP-Adressen) zu entdecken.

Wie gesagt sind dies nur die groben Hintergründe zu arpd, die nur andeuten sollen, wozu arpd gut ist.

Wer aus Neugierde doch mal arpd bei der Arbeit zusehen möchte, kann ja die arpd-Datenbank zumindest temporär anlegen lassen und anschliessend betrachten:

sudo arpd -b /var/tmp/arpd.db  # startet arpd und legt die Datenbank im Verzeichnis /var/tmp/ an (Default /var/lib/arpd/arpd.db)
arpd -lb /var/tmp/arpd.db      # auslesen der DB /var/tmp/arpd.db (Option -b) und Ausgabe im Terminal (Option -l)

ip[edit | edit source]

ip ist das vielfältigste Kommando aus der Sammlung iproute2. Welche Kommandos es ersetzt zeigt diese Tabelle

altes Kommando ip Kommando
arp ip neigh
ifconfig ip addr, ip link, ip -s
ipmaddr ip maddr
iptunnel ip tunnel
nameif ip link set name
netstat ip -s, ip route
route ip route

Befehle zur Adressanzeige mit ip[edit | edit source]

ip address show [link]		# Anzeige aller IP-Adressen, bzw. eines bestimmten Devices
ip route show			# Routen anzeigen
ip neighbour			# Anzeige der "arp"-Tabelle
ip link show	[link]		# Zustand aller/eines Links (Schnittstellen) anzeigen

Die Befehle können verkürzt werden, solange sie eindeutig bleiben. Mit der Option -s kann zusätzlich eine Paketstatistik ausgegeben werden:

ip -s addr

Bedeutung der angezeigten Flags[edit | edit source]

Bei den Ausgaben von ip addr oder ip link steht in spitzen Klammern eine Zusammenfassung der Schnittstellenkennzeichen (Flags):

Flag Bedeutung
UP das Interface ist eingeschaltet und bereit Pakete zur Übertragung über das Netzwerk zu akzeptieren und es kann Pakete von anderen Knoten im Netzwerk empfangen
LOWER_UP signalisiert, daß ein Kabel eingesteckt ist
LOOPBACK das Interface hat keine Möglichkeit Nachrichten an andere Hosts zu senden (alles geht zurück an den Absender)
BROADCAST das Interface hat die Möglichkeit Nachrichten an alle anderen Hosts im Netzwerk zu senden
POINTOPOINT (PPP) Diese Verbindung hat nur zwei Enden mit zwei angeschlossenen Knoten (Nodes). Alle an den Link gesendeten Pakete erreichen den Peer-Link, und alle empfangenen Pakete stammen vom Peer. Man kann sich diese Verbindung als eine Art serielle Leitung vorstellen. Die häufigste Anwendung ist die Verbindung vom Computer zum Provider, mittels derer der PC vom Provider eine IP-Adresse erhält
MULTICAST ein rein informelles Kennzeichen, das darauf hinweist, dass die Schnittstelle das Multicasting-Protokoll beherrscht. Im Prinzip ist diese Angabe redundant, da sowohl Broadcasting als auch PPP Multicasting-fähig sind
NOARP zeigt in der Regel an, dass das Gerät keine Adressauflösung benötigt und dass die Software oder Hardware weiß, wie Pakete ohne Hilfe der üblichen Protokolle zugestellt werden können

Befehle zum setzen und ändern von Schnittstellen mit ip[edit | edit source]

dafür werden Root-Rechte benötigt (sudo benutzen). Diese Änderungen gehen jedoch bei einem Reboot verloren.

ip link set eth0 down	                        # Interface eth0 deaktivieren
ip link set eth0 up		                # Interface eth0 aktivieren
ip link set eth0 address 00:11:22:33:44:55:66	# neue MAC-Adresse für Interface eth0 setzen
ip link set eth0 name extern		        # Name des Interfaces von eth0 nach "extern" ändern
ip address del <adr> dev <link>                 # Löschen der Adresse auf Device link
ip address add <adr> brd <broadcast-adr> dev <link>  # Hinzufügen der adr zum Link (adr in CIDR-Notation, z.B. 192.168.8.100/24, Broadcast-Adresse muss ebenfalls angegeben werden, es kann auch + oder - angegeben werden, um alle Hostbits auf 1 oder 0 zu setzen)

lnstat[edit | edit source]

lnstat ist ein Ersatz für das alte rtstat-Programm, da es mehr Funktionen enthält. Es wird üblicherweise verwendet, um periodisch eine Auswahl der vom Kernel exportierten statistischen Werte auszugeben. Zusätzlich zu den Routing-Cache-Statistiken unterstützt es jede Art von Statistiken, die der Linux-Kernel über eine Datei in /proc/net/stat/ exportiert.

Jede Datei in /proc/net/stat/ enthält eine Kopfzeile mit den Spaltennamen. Diese Namen werden von lnstat als Schlüssel zur Auswahl der zu druckenden Statistiken verwendet. Für jede im System vorhandene CPU folgt eine Zeile, die die tatsächlichen Werte für jede Spalte der Datei auflistet. lnstat summiert diese Werte (die in Wirklichkeit Zähler sind) vor der Ausgabe auf. Nach jedem Intervall wird nur die Differenz zum letzten Wert gedruckt.

Standardmäßig werden alle Spalten aller Dateien gedruckt. Da man dies meist nicht braucht (sehr unübersichtlich, es sei denn, man wertet dies mit Skripten aus) sollten die interessierenden Dateien und Spalten mit Hilfe der Parameter -f und -k ausgewählt werden. Zur Verarbeitung der Daten empfiehlt sich auch die Option -j, die die Datenausgabe im JSON-Format veranlasst.

Einen Überblick über die verfügbaren Werte erhält man durch die Option -d

Optionen[edit | edit source]

Option Bedeutung
-h, --help Hilfe
-V, --version Programmversion
-c, --count <n> es sollen <n> Zyklen ausgegeben werden
-d, --dump Ausgabe der möglichen Dateien in /proc/net/stat/ und ihrer Werte (Keys)
-f, --file <Datei> Die Werte welcher Datei(en) sollen ausgegeben werden. Es können mehrere Dateien angegeben werden, diese müssen aber immer mit der vorangestellten Option -f angeführt werden: lnstat -f nf_conntrack -f ndisc_cache

Default ist die Ausgabe der Werte aller Dateien

-i, --interval <n> Ausgabe der Werte aller <n> Sekunden
-j, --json Ausgabe der Werte im JSON Format
-k, --keys k,k,k,... zeigt nur die angegeben Werte (Keys). Den Keys kann ein Dateiname in dieser Form Datei:Key vorangestellt werden, dann wird nur nach Werten aus der angegeben Datei gesucht. Ohne diesen Dateinamen werden die Werte der ersten Datei ausgegeben, in der dieser Key gefunden wird
-s, --subject [0-2] Ob und wie oft eine Kopfzeile ausgegeben werden soll. 0 = keine Kopfzeile, 1 = Kopfzeile nur beim Start, 2 = aller 20 Zeilen Ausgabe einer Kopfzeile
-w, --width n,n,n,... Angabe der Breite für jedes Ausgabefeld

nstat[edit | edit source]

nstat liefert Statistiken über den Netzwerkverkehr im SNMP (Simple Network Management Protocol). Es ist gewissermassen ein Ersatz für das ältere netstat -s, ohne jedoch direkt die gleiche Ausgabe zu haben. snstat liefert z.B. keine absoluten, sondern nur inkrementelle Werte, also den Zuwachs seit dem letzten Aufruf. Werte = 0 werden per default nicht angezeigt. Beides kann durch Angabe der Optionen -a (absolute Werte) bzw. -z (auch Nullwerte anzeigen) verändert werden.

Die Ausgabe erfolgt normalerweise in drei Spalten:

  • Spalte 1: Name des Wertes
  • Spalte 2: Wert
  • Spalte 3: Durchschnitt über einen definierbaren Zeitraum (Option -d, default = 60 Sekunden)

Durch die Option -j kann aber auch eine Ausgabe im JSON-Format erfolgen.

Die Namen der Werte erscheinen auf den ersten Blick etwas kryptisch, sie sind jedoch logisch aufgebaut:

Der erste Teil des Namens bezeichnet das Protokoll bzw. Klasse (IP, TCP, UDP usw.), dann folgt eine näherere Klassifizierung (In, Out, Active, Passive usw.) gefolgt von einer weiteren Beschreibung (Fails, Opens, Reset usw.)

 $ nstat
 #kernel
 IpInReceives                    12                 0.0
 IpInDelivers                    12                 0.0
 IpOutRequests                   15                 0.0
 TcpInSegs                       12                 0.0
 TcpOutSegs                      13                 0.0
 TcpRetransSegs                  2                  0.0
 TcpExtTCPHPHits                 6                  0.0
 TcpExtTCPTimeouts               1                  0.0
 TcpExtTCPLossProbes             1                  0.0
 TcpExtTCPOrigDataSent           7                  0.0
 TcpExtTCPDelivered              6                  0.0
 IpExtInOctets                   4701               0.0
 IpExtOutOctets                  3090               0.0
 IpExtInNoECTPkts                12                 0.0

mit etwas Übung und englisch-Kenntnissen kann man also die Bedeutung der Namen herauslesen, z.B.:

IpInReceives = Anzahl der von der IP-Schicht empfangenen Pakete.

Für ganz hartgesottene bietet sich dazu auch das Nachschlagen bzw. Studium der englisch-sprachigen Dokumentation über SNMP counter an, in der die Bedeutung dieser Namen näher erläutert wird.

Optionen[edit | edit source]

Option Bedeutung
-h, --help Hilfemeldung
-a, --ignore Ausgabe von absoluten Werten
-d, --scan=n Intervall innerhalb dessen Werte gesammelt werden sollen (aller n Sekunden)
-j, --json Ausgabe im JSON-Format
-n, --nooutput keine Ausgabe
-p, --pretty "schöne" Ausgabe, zumindest laut Handbuch. Habe aber keinen Unterschied festgestellt, ist also vermutlich default
-t, --interval=n Durchschnitt der letzten n Sekunden
-V, --version Ausgabe der Version
-z, --zeros auch Anzeige von Aktivitäten deren Wert gleich Null war (nicht aktiv)

rtmon[edit | edit source]

rtmon protokolliert Änderungen an der Routingtabelle in einer Datei.

Der einfachste Aufruf sieht so aus

sudo rtmon file <DATEI>

dies schreibt die Ausgaben in die Datei <DATEI>. Welche Werte dabei ausgegeben werden, kann durch die Angabe von Parametern gesteuert werden:

sudo rtmon file <DATEI> [PARAMETER]

als Parameter sind diese Werte zulässig, mehrere werden durch Leerzeichen getrennt:

link     # Network Device
address  # IP-Adresse
route    # Eintrag der Routingtabelle
all      # = link address route

Optionen[edit | edit source]

sudo [OPTION] rtmon file <DATEI> [PARAMETER]

mit diesen Optionen kann die Protokollierung auf bestimmte Internet-Protokolle beschränkt werden:

-4  # nur IPv4 protokollieren
-6  # nur IPv6 protokollieren
-0  # kein Netzwerkprotokoll

Auswertung[edit | edit source]

Bei der erzeugten Ausgabedatei <DATEI> handelt es sich um eine Binärdatei. Sie kann also nicht mit cat oder einem Editor geöffnet werden, sondern muß mit diesem Befehl angezeigt werden:

ip monitor file <DATEI>

Der Inhalt könnte z.B. so aussehen:

Timestamp: Sat Jun 13 21:19:36 2020 266639 us
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default 
   link/ether db:0d:a1:b1:90:7d brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
   link/ether 45:6d:57:d8:79:50 brd ff:ff:ff:ff:ff:ff
Timestamp: Sat Jun 13 21:19:45 2020 841713 us
3: wlan0: <BROADCAST,MULTICAST,UP> 
   link/ether 
Timestamp: Sat Jun 13 21:19:45 2020 851054 us
3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default 
   link/ether 45:6d:57:d8:79:50 brd ff:ff:ff:ff:ff:ff
Timestamp: Sat Jun 13 21:19:45 2020 851201 us
Deleted 3: wlan0    inet6 fe70::b2ce:736d:f01a:4e9a/64 scope link 
      valid_lft forever preferred_lft forever

ss[edit | edit source]

ss ist ein Tool zum Auslesen von Netzwerkstatistiken und ein Ersatz für das ältere netstat, da es schneller ist und mehr TCP-Zustände abgefragt werden können als mit netstat.

Optionen[edit | edit source]

Wenn keine Option verwendet wird, zeigt ss eine Liste der offenen nicht lauschenden Sockets (z.B. TCP/UNIX/UDP) an, die eine Verbindung hergestellt haben. Da diese Liste im allgemeinen sehr lang wird, empfiehlt sich eine Umleitung in eine Datei

ss > sockets.txt
  • -h # Liste aller Optionen und Filter
  • -H # unterdrückt die Ausgabe der üblichen Titelzeile. Erleichtert die Weiterverarbeitung in Skripten
  • -s # Gesamtstatistiken der Verbindungen, geordnet nach Transportprotokoll
  • -l # Liste aller lauschenden Sockets
  • -t # nur TCP-Sockets
  • -u # nur UDP-Sockets
  • -x # Unix domain sockets
  • -4 # nur IP Version 4 sockets
  • -6 # nur IP Version 6 sockets
  • -r # löst IP-Adressen nach Namen auf (z.B. statt 192.168.8.1 -> meine.maschine.lokal)
  • -a # bei den Optionen -t, -u oder -x werden per default nur laufende Verbindungen aufgelistet. Option -a in Verbindung mit -t, -u oder -x sorgt dafür, daß auch die lauschenden gelistet werden.
  • -e # ausführlichere Ausgaben, z.B. uid des Prozessbesitzers
  • -p # zusätzliche Angaben zum Prozess (z.B. pid)
  • -Z # zeigt Sicherheitsinformationen zum Prozess. Dazu muss SELinux aktiviert sein.
  • -z # wie -Z aber zuätzliche Sicherheitsinformationen zu den Sockets
  • -i # zusätzliche Angaben zur TCP-Verbindung

Zustände abfragen[edit | edit source]

mit dem Kommando state können die Zustände der Verbindungen abgefragt werden. Meistens empfiehlt es sich diese mit den oben angeführten Optionen zu filtern. Beispiel:

ss -4 state established  # zeigt alle TCP4-Verbindungen an

Die allgemeine Syntax für ss state lautet

ss [Option] state <Zustand>

folgende Zustände können abgefragt werden:

Zustand Bedeutung
listen Socket wurde durch ein Prozess geöffnet und wartet (lauscht) auf Signale der Gegenstelle
established ordnungsgemäße Verbindung (Normalzustand)
syn-sent Anfrage des lokalen TCP-Sockets bei der Gegenstelle, um eine Verbindung aufzubauen
syn-recv lokales TCP hat von der Gegenstelle eine Antwort bekommen, aber noch nicht darauf reagiert
fin-wait-1 Applikation will die Verbindung beenden, die Gegenstelle hat aber noch nicht darauf reagiert
fin-wait-2 Applikation will die Verbindung beenden, wartet aber noch auf ein Ok (FIN-Signal) der Gegenstelle
close-wait Socket hat von der Gegenstelle ein Signal zum Schliessen bekommen (FIN) und wartet, ob die Applikation den Socket schliesst oder doch weiter sendet
closing Der lokale Socket wartet auf eine Bestätigung der Gegenstelle zum Schliessen, um daraufhin in den Status TIME_WAIT zu gehen.
last-ack Socket hat die Meldung zum Schliessen (FIN) von der Gegenstelle erhalten, muss aber noch eigene Abschlussarbeten abwarten (flush und close), damit sie ihrereits ein bestätigendes FIN-Signal zur Gegenstelle senden kann
time-wait Socket ist vor kurzem geschlossen wurden und wartet eine gewisse Zeitspanne bis er wieder geöffnet werden darf. In der Regel handelt es sich dabei mindestens um die zweifache Zeit, die ein Signal vom lokalen Rechner bis zur entfernten Gegenstelle und zurück benötigt (Round-Trip-Zeit = RTT oder Round Trip Delay = RTD). Die RTT erhält man auch bei einem ping-Kommando.
closed Verbindung und Socket wurden geschlossen, keine Verbindung

Neben diesen detaillierten Zustandsabfragen gibt es noch die Möglichkeit, nach mehreren Zuständen gleichzeitig zu filtern:

Zustand Bedeutung
all alle Zustände
connected alle Zustände außer listen und closed
synchronized alle Verbindungen außer syn-sent
bucket alle Zustände die als Mini-Socket definiert sind, z.B. time-wait
big alle Zustände außer den Mini-Sockets

Beispiele für ss[edit | edit source]

Kommando Bedeutung
ss -s zeigt Gesamtstatistiken der Verbindungen, geordnet nach Transportprotokoll (RAW, UDP, TCP, INET u. FRAG) an.
ss -t Anzeige aller aktiven TCP-Verbindungen
ss -lt Anzeige aller lauschenden Sockets
ss -4 state listening Anzeige aller lauschenden IPv4 Sockets
ss -ltn Anzeige aller lauschenden Sockets (m. Ports statt Service-Namen)
ss state all sport = :ssh Anzeige aller ssh-Verbindungen
ss state connected sport = :ssh wie oben, aber nur die aktiven Verbindungen
ss '( sport = :ftp or dport = :http )' Anzeige der FTP- und HTTP-Verbindungen
ss state all dst 192.168.8.0/24 Anzeige aller Verbindungen zu 192.168.8.0/24
ss -s state all dst 192.168.8.0/24 wie oben, aber mit Verbindungsstatistiken (vgl. ss -s)
ss src 192.168.178.0/24 alle Verbindungen vom Netzwerk 192.168.178.0

Weblinks[edit | edit source]