Iproute2

    Aus mxlinuxusers.de

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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 englischsprachigen Dokumentation über SNMP counter an, in der die Bedeutung dieser Namen näher erläutert wird.

    Optionen[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]

    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[Bearbeiten | Quelltext bearbeiten]