Einführung zu diversen Netzwerk-Werkzeugen

Content

Der POSIX-Standard umfasst nur einen sehr kleinen Umfang traditioneller Kommandos auf der Kommandozeile – Netzwerk-Werkzeuge gehören nicht dazu. Trotz der fehlenden Standardisierung sind viele Werkzeuge auch über eine breite Vielfalt von Plattformen hinweg verfügbar, auch wenn sich der Funktionsumfang und die Einzelheiten unterscheiden können. Gelegentlich bieten einige Plattformen auch alternative Werkzeuge und Schnittstellen an. Im Folgenden fokussieren wir uns aber auf plattformübergreifende Werkzeuge, wobei wir typischerweise uns sowohl die Ausgaben auf einem Solaris- als auch einem Linux-System ansehen.

Welche IP-Adressen haben wir auf unserem Rechner?

Einen Überblick über die zur Verfügung stehenden Netzwerke und die auf den Netzwerken zum Einsatz kommenden IP-Adressen bietet das Kommando ifconfig. So sieht die typische Ausgabe auf einer unserer Maschinen im Pool-Raum E.44 aus:

heim$ /sbin/ifconfig
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 134.60.66.33  netmask 255.255.254.0  broadcast 134.60.67.255
        inet6 fe80::219:99ff:fef9:fb70  prefixlen 64  scopeid 0x20<link>
        ether 00:19:99:f9:fb:70  txqueuelen 1000  (Ethernet)
        RX packets 96139411  bytes 17877458122 (16.6 GiB)
        RX errors 0  dropped 1712  overruns 0  frame 0
        TX packets 3956533  bytes 1832248800 (1.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf7c00000-f7c20000  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3362  bytes 295471 (288.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3362  bytes 295471 (288.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
heim$ 

Zu sehen sind hier zwei Netzwerke, enp0s25 und lo. Bei älteren Linux-Systemen würde statt enp0s25 eher eth0 erscheinen. Die Änderung erfolgte, um Netzwerknamen nicht von Zufälligkeiten beim Hochfahren eines Rechners abhängig zu machen. Somit steht „en“ für Ethernet, „p“ für PCI. Die numerischen Angaben spezifizieren den PCI-Slot:

heim$ lspci | grep -i ethernet
00:19.0 Ethernet controller: Intel Corporation 82579LM Gigabit Network Connection (rev 04)
heim$ 

Der Slot „00:19.0“ ist in Hex angegeben, „00“ identifiziert hier den PCI-Bus und 0x19 = 25 identifiziert das PCI-Gerät innerhalb eines PCI-Busses. Weitere Infos zu diesem Namensschema finden sich hier:

https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

Neben „enp0s25“ wird auch noch „lo“ genannt – hierbei handelt es sich um das sogenannte Loopback-Device, d.h. das ist ein Netzwerk, das traditionell nur virtuell innerhalb des Systems existiert. Hierfür wird traditionell die IP-Adresse 127.0.0.1 zugewiesen, wobei das gesamte 127er-Netzwerk für solche lokale Netzwerke zur Verfügung steht. In der zweiten Zeile steht hier jeweils die IPv4-Adresse, sofern vorhanden:

heim$ /sbin/ifconfig | grep '\<inet\>'
sh: 1: Syntax error: ";" unexpected
heim$ 

Somit besitzt diese Maschine zwei IPv4-Adressen: 134.60.66.33 wird für die Ethernet-Schnittstelle verwendet, 127.0.0.1 für das Loopback-Device.

Das ifconfig-Kommando sieht unter Solaris ähnlich aus, es wird aber zusätzlich noch die Option „-a“ benötigt:

theon$ /usr/sbin/ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
	inet 127.0.0.1 netmask ff000000 
net0: flags=100001000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,PHYSRUNNING> mtu 1500 index 2
	inet 134.60.66.7 netmask fffffe00 broadcast 134.60.67.255
net0:1: flags=100001000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,PHYSRUNNING> mtu 1500 index 2
	inet 134.60.66.76 netmask fffffe00 broadcast 134.60.67.255
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
	inet6 ::1/128 
net0: flags=120002000840<RUNNING,MULTICAST,IPv6,PHYSRUNNING> mtu 1500 index 2
	inet6 ::/0 
theon$ 

Wie zu erkennen ist, gibt es hier ein anderes Namensschema – das Ethernet-Device nennt sich „net0“. Da die Maschine mehr als eine IP-Adresse auf diesem Gerät hat, gibt es „net0“ und „net0:1“ mit den IPv4-Adressen 134.60.66.7 und 134.60.66.251. Wie unter Linux gibt es ein Loopback-Device, hier mit dem Namen „lo0“, das wie üblich standardmäßig die IP-Adresse 127.0.0.1 besitzt.

Welche Namen sind den IP-Adressen zugeordnet?

DNS-Abfragen auf der Kommandozeile können am besten mit dem Werkzeug dig durchgeführt werden, das zum weitverbreiteten ISC-BIND-Paket gehört (ISC = Internet Systems Consortium, BIND = Berkeley Internet Name Domain). Über den Namensdienst können sowohl Rechnernamen zu IP-Adressen als auch umgekehrt IP-Adressen zu Namen abgebildet werden. Diese Abbildungen sind voneinander unabhängig und keinesfalls bijektiv. Weder sind allen IP-Adressen Namen zugeordnet und Namen können auch u.U. mehrere IP-Adressen zugeordnet sein, die wiederum auf andere Namen abgebildet werden.

So erfolgt eine Abbildung von einem Rechnernamen zu einer IP-Adresse:

heim$ dig theon.mathematik.uni-ulm.de a

; <<>> DiG 9.11.5-P4-5.1+deb10u8-Debian <<>> theon.mathematik.uni-ulm.de a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6213
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 8

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;theon.mathematik.uni-ulm.de.	IN	A

;; ANSWER SECTION:
theon.mathematik.uni-ulm.de. 86400 IN	A	134.60.66.7

;; AUTHORITY SECTION:
mathematik.uni-ulm.de.	86400	IN	NS	dns3.belwue.de.
mathematik.uni-ulm.de.	86400	IN	NS	titania.mathematik.uni-ulm.de.
mathematik.uni-ulm.de.	86400	IN	NS	dns1.uni-ulm.de.
mathematik.uni-ulm.de.	86400	IN	NS	dns1.belwue.de.

;; ADDITIONAL SECTION:
dns1.belwue.de.		2920	IN	A	129.143.2.10
dns1.uni-ulm.de.	90931	IN	A	134.60.1.111
dns3.belwue.de.		2481	IN	A	129.143.253.133
titania.mathematik.uni-ulm.de. 86400 IN	A	134.60.66.21
dns1.belwue.de.		2920	IN	AAAA	2001:7c0::53:10
dns1.uni-ulm.de.	90931	IN	AAAA	2001:7c0:3100::111
dns3.belwue.de.		2481	IN	AAAA	2001:7c0:0:253::133

;; Query time: 1 msec
;; SERVER: 134.60.66.21#53(134.60.66.21)
;; WHEN: Fri Nov 25 10:38:15 CET 2022
;; MSG SIZE  rcvd: 306
heim$ 

Das „a“ steht hier für die Frage nach einem sogenannten A-Record im Namensdienst, das ist ein Eintrag mit einer IPv4-Adresse. Mit „aaaa“ ist eine Abfrage nach IPv6-Adressen möglich. Das Werkzeug dig ist in seiner Antwort sehr ausführlich. Relevant ist hier die „ANSWER SECTION“, in der der gewünschte A-Record zitiert wird.

Die umgekehrte Abbildung von IP-Adressen zu Namen ist mit der Option „-x“ möglich:

heim$ dig -x 134.60.66.7

; <<>> DiG 9.11.5-P4-5.1+deb10u8-Debian <<>> -x 134.60.66.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10796
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 8

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;7.66.60.134.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
7.66.60.134.in-addr.arpa. 86400	IN	PTR	theon.mathematik.uni-ulm.de.

;; AUTHORITY SECTION:
66.60.134.in-addr.arpa.	86400	IN	NS	dns1.belwue.de.
66.60.134.in-addr.arpa.	86400	IN	NS	dns1.uni-ulm.de.
66.60.134.in-addr.arpa.	86400	IN	NS	dns3.belwue.de.
66.60.134.in-addr.arpa.	86400	IN	NS	titania.mathematik.uni-ulm.de.

;; ADDITIONAL SECTION:
dns1.belwue.de.		2919	IN	A	129.143.2.10
dns1.uni-ulm.de.	90930	IN	A	134.60.1.111
dns3.belwue.de.		2480	IN	A	129.143.253.133
titania.mathematik.uni-ulm.de. 86400 IN	A	134.60.66.21
dns1.belwue.de.		2919	IN	AAAA	2001:7c0::53:10
dns1.uni-ulm.de.	90930	IN	AAAA	2001:7c0:3100::111
dns3.belwue.de.		2480	IN	AAAA	2001:7c0:0:253::133

;; Query time: 1 msec
;; SERVER: 134.60.66.21#53(134.60.66.21)
;; WHEN: Fri Nov 25 10:38:16 CET 2022
;; MSG SIZE  rcvd: 328
heim$ 

In der „ANSWER SECTION“ wird nun ein sogenannter PTR-Record zitiert, der für die umgekehrte Abbildung zuständig ist. Natürlich kann das auch für 127.0.0.1 probiert werden. Auf einem wohlkonfigurierten Namensdienst sollte dabei „localhost“ zurückgeliefert werden:

heim$ dig -x 127.0.0.1

; <<>> DiG 9.11.5-P4-5.1+deb10u8-Debian <<>> -x 127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11196
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;1.0.0.127.in-addr.arpa.		IN	PTR

;; ANSWER SECTION:
1.0.0.127.in-addr.arpa.	86400	IN	PTR	localhost.

;; AUTHORITY SECTION:
0.0.127.in-addr.arpa.	86400	IN	NS	titania.mathematik.uni-ulm.de.

;; ADDITIONAL SECTION:
titania.mathematik.uni-ulm.de. 86400 IN	A	134.60.66.21

;; Query time: 1 msec
;; SERVER: 134.60.66.21#53(134.60.66.21)
;; WHEN: Fri Nov 25 10:38:16 CET 2022
;; MSG SIZE  rcvd: 133
heim$ 

Fragen