TCPIP-Konfiguration und Problemlösung

Wichtung: 7

Beschreibung: Die Kandidaten sollen in der Lage sein, Konfiguration und Status verschiedener Netzwerkschnittstellen zu betrachten, zu ändern und zu überprüfen.

Wichtigste Wissensgebiete:
Manuelle und automatische Konfiguration der Netzwerkschnittstellen und Routing-Tabellen, sowie Hinzufügen, Starten, Stoppen, Neustarten, Löschen und Rekonfigurieren von Netzwerkschnittstellen.
Ändern, Anzeigen und Konfigurieren einer Routingtabelle und manuelle Korrektur einer falsch gesetzten Default-Route.
Konfiguration eines DHCP-Clients.
Grundsätzliche TCP/IP-Host-Konfiguration.
Problemlösung im Zusammenhang mit der Netzwerk-Konfiguration.

Liste wichtiger Dateien, Verzeichnisse und Anwendungen:
/etc/HOSTNAME oder /etc/hostname
/etc/hosts
/etc/networks
/etc/host.conf
/etc/resolv.conf
/etc/nsswitch.conf
ifconfig
ifup & ifdown
route
dhcpcd
dhclient
pump
host
hostname
domainname
dnsdomainname
netstat
ping
traceroute
tcpdump
Netzwerkscripts, die während der Systeminitialisierung ausgeführt werden.

Laden von Netzwerkkarten-Treibern

Wie bereits in vorherigen Kapiteln erklärt hat der Linux-Administrator die Wahl, ob ein Gerätetreiber fest in den Kernel oder als Modul kompiliert werden soll. Im Fall ein Netzwerkkarte bedeutet dies, wenn der Treiber fest in den Kernel kompiliert wird, während des Bootens dass die Schnittstelle zur physikalischen Netzwerkkarte gesetzt wird, welche man sich mit dem Befehl ifconfig anzeigen lassen kann.

# ifconfig 
...
...
eth0 Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42
inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0
UP BROADCAST RUNNING MTU 1500 Metric 0
RX packets 3136 errors 217 dropped 7 overrun 26
TX packets 1752 errors 25 dropped 0 overrun 0
...
...

Die Schnittstellennamen können wiefolgt lauten:

lo = Loopback
eth0, eth1, usw = Ethernetkarten
tr0, tr1, usw = Token-Ring-Karten
arc0, arc1, usw = Arcnet-Karten

ifconfig - Verwalten von Netzwerkkarten

Mit dem Programm ifconfig können Netzwerkkarten verwaltet werden.

// IP-Adresse ändern
# ifconfig eth0 192.168.1.5

// IP-Adresse + Subnetzmaske ändern
# ifconfig eth0 192.168.1.5 broadcast 192.168.1.255 netmask 255.255.255.0

Wichtige Optionen:

up = Diese Flagge aktiviert die Schnittstelle
down = Deaktiviert die Schnittstelle
netmask Adr = Setzt die IP Netzwerksmaske für diese Schnittstelle.

Routingtabellen

Nachdem die Netzwerkkarte installiert wurde, müssen so genannte Routen festgelegt werden. Woher soll das System wissen, wenn die jeweilige Anwendung ein Paket nach 192.168.1.55 schickt? Hier kommen sofort Fragen wie "Über welches Netzwerkinterface wird gesendet?", "Befindet sich die Zieladresse in demselben Subnetz?", "Müssen die Daten ggf. über einen Router versendet werden" auf. Diese Fragen werden in den Routingtabellen beantwortet, in denen genauestens beschrieben wird, über welchen Weg ein Datenpaket gesendet wird.

Aus den oben genannten Fragen wird deutlich, dass man grundlegende Kenntnisse zu Netzwerktopologien besitzen muss und einem die Begriffe Hub, Switch, Router, Gateway oder Subnetz bekannt sollten. Zwar ist heutzutage das Programm ifconfig eigenständig in der Lage, die notwendigen Routingtabellen anzulegen, doch als angehender Linux-Systemverwalter ist nahezu ein Pflicht, solche Routingtabellen manuell zu erstellen. Daher empfiehlt es sich, folgende Informationen nachzulesen:
http://netzmafia.de/skripten/netze/netz7.html

Mit dem Programm route ist es möglich, Routen manuell zu setzen. Startet man route ohne Parameter, so werden die Routing-Tabellen angezeigt:

# route
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0

Prinzipiell definiert Route, wie man von A nach B kommt. Anders als bei einer Firewall, bei der beide Richtungen definiert werden, wird in einer Zeile der Routingtabelle definiert, wie ein Paket von A nach B kommt. In oben genannten Beispiel legt die erste Zeile fest, dass alle Rechner von 192.168.2.1 bis 192.168.2.255 direkt erreichbar sind. 192.168.2.0 steht für die Netzadresse und bezeichnet somit das ganze Subnetz. Bei Gateway ist ein * notiert, was bedeutet, dass kein Gateway benötigt wird. Gebunden wird die Regel an das Netzwerkinterface eth0. Somit werden alle Daten, die an einen Host im Subnetz 192.168.0.2 geschickt werden sollen, ohne Umwege über die Netzwerkkarte eth0 direkt an den Host geschickt werden.

Eine weitere wichtige Angabe sind die Flags, die Auskunft darüber geben, an welches physikalische Gerät die Daten geschickt werden:

U - (up) Route ist frei
H - (host) Ziel ist ein Rechner/Host
G - (gateway) Benutze Gateway

Ein weiteres Beispiel: In einem Rechner, der als Gateway zwischen den Subnetzen 192.168.1.0 und 192.168.2.0 fungiert, sind zwei Netzwerkkarten verbaut.

Destination	Gateway	Genmask	Flags	Metric	Ref	Use	Iface
192.168.2.1 * 255.255.255.255 UH 0 0 0 eth0
192.168.1.2 * 255.255.255.255 UH 0 0 0 eth1
192.168.2.0 192.168.2.1 255.255.255.0 UG 0 0 0 eth0
192.168.2.0 * 255.255.255.0 U 0 0 0 eth0
192.168.1.0 192.168.1.2 255.255.255.0 UG 0 0 0 eth1
192.168.1.0 * 255.255.255.0 U 0 0 0 eth1
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

In den ersten beiden Zeilen werden die internen Netzwerkkarten definiert. Die Adresse von eth0 ist 192.168.2.1 und von eth1 192.168.1.2.

Die Zeilen 3 und 4 definieren das Routing aus dem 192.168.1.0 in das 192.168.2.0 Subnetz. Wenn jetzt nun auf der Netzwerkkarte eth1 (192.168.1.2) Daten ankommen, die an einen Host im 192.168.2.0 Subnetz geschickt werden sollen, so zieht die Regel in Zeile 3. Die Daten werden an das eth0-Interface eingeleitet und dann an den Host gesendet (Zeile 4).

Die Zeilen 5 und 6 machen den umgekehrten Weg. Kommen Daten an eth0 an, die in das 192.168.1.0 Subnetz gesendet werden sollen, so zieht die Regel 5.

Die letzte Zeile definiert den so genannten Default-Gateway. Alle Datenpakete werden an diesen Gateway gesendet, wenn die vorherigen Regeln nicht zugetroffen haben. Hier gilt das Motto: "Wenn der Standard-Gateway nicht weiss wohin, dann kann keiner mehr helfen".

Erstellen von Routingtabellen

Die Beispiele basieren auf oben genannte Routingtabellen des Gateway-Rechners.

// Default Gateway erstellen
route add -net default gw 192.168.2.1 dev eth0

// Zeile 3+4
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0

// Zeile 5+6
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.2 dev eth1

// Routen löschen
route del -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1 dev eth0
route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.2 dev eth1

netstat - Netzwerkverbindungen prüfen

Das Programm netstat bedeutet so viel wie "Netzwerk-Status", was eigentlich schon alles über dieses Programm aussagt. Mit netstat ist es zum Beispiel möglich, Informationen zu Netzwerkverbindungen, Routingtabellen, Schnittstellenstatistiken anzeigen zu lassen.

Startet man netstat ohne Optionen, so werden einem die offenen Sockets angezeigt:

# netstat
Aktive Internetverbindungen (ohne Server)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 linux37.local:33324 195.71.11.67:www-http VERBUNDEN
tcp 0 0 linux37.local:33321 jules.netbeat.de:ftp VERBUNDEN
tcp 0 0 linux37.local:33320 linux40.amov.de:ssh VERBUNDEN
tcp 0 0 linux37.local:33328 195.71.11.67:www-http TIME_WAIT
tcp 0 0 linux37.local:33330 195.71.11.67:www-http VERBUNDEN
tcp 0 0 linux37.local:33325 195.71.11.67:www-http TIME_WAIT
tcp 0 0 linux37.local:33320 linux40.amov.de:ssh VERBUNDEN
udp 0 0 linux37.local:33617 www-proxy.HH1.sr:domain VERBUNDEN
...
...

netstat besitzt folgende Optionen:

-a - Zeigt alle wartenden Verbindunge/Sockets an
-t - (tcp) Zeigt alle offenen TCP-Verbindungen an
-u - (udp) Zeigt alle offenen UDP-Verbindungen an
-x - (unix) Zeigt alle offenen Unix-Sockets an
-w - (raw) Zeigt alle offenen RAW-Sockets an
--ip - (inet) Zeigt alle offenen TCP- und UDP-Verbindungen an (wie -u und -t)
--ax25 - Zeigt alle offenen AX.25-Verbindungen an
--ipx - Zeigt alle offenen IPX-Sockets an
--netrom - Zeigt alle offenen NET/ROM-Verbindungen an
-r - (route) Gibt die Routingtabelle aus
-i - Liefert Statistik über die Schnittstellen
-n - (numeric) Es erfolgt keine Namensauflösung
-p - (programms) PID und Programmname werden angezeigt

Oftmals wird netstat mit der option -nr gestartet, welches die Routingtabellen anzeigt (ähnlich route):

# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
127.0.0.1 * 255.255.255.255 UH 0 0 0 lo
172.16.1.0 * 255.255.255.0 U 0 0 0 eth0
172.16.2.0 172.16.1.1 255.255.255.0 UG 0 0 0 eth0

In der Spalte "Flags" haben die Kürzel folgende Bedeutung:

G - Gateway
U - Interface ist UP
H - Nur ein Host kann über die Route erreicht werden
D - Route wurde von ICMP eingetragen
M - Route wurde von ICMP verbessert

Eine weitere wichtige Option ist -i, welche eine Statistik über die Netzwerkinterfaces anzeigt:

# netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags
lo 0 0 3185 0 0 0 3185 0 0 0 BLRU
eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU

Hier haben die Flags folgende Bedeutung:

B - Broadcast ist gesetzt
L - ist Loopback
M - promiscous mode - Alle Pakete werden empfangen
O - ARP ist ausgeschaltet
P - Point to Point Verbindung
R - Running
U - Up

ifup / ifdown

ifup und ifdown sind Frontends für ifconfig und route, mit denen es möglich ist, Netzwerkschnittstellen und Routen automatisiert initialisiert werden können.

dhcpcd, dhclient, pump - DHCP-Clients

Wenn ein DHCP-Server im Netz aktiv ist, so erspart man sich sämtliche Arbeit, um die Netzwerkkarten zu konfigurieren. Der DHCP-Server hält alle wichtigen Einstellungen parat und die Clients können diese Informationen beziehen.

Hierfür gibt es die DHCP-Clients dhcpcd, dhclient und pump, mit denen Netzwerkkarten per DHCP konfiguriert werden können.

# dhcpcd eth0

tcpdump - Fehleranalyse

Mithilfe des Programms tcpdump kann jedes einzelne Paket des Netzes protokolliert und analysiert werden.

tcpdump -i eth0

Damit werden alle Pakete von eth0 abgehört. Es gibt aber noch weitere Möglichkeiten zur Fehleranalyse:

// Zeigt nur Pakete an den oder vom einem bestimmten Rechner
tcpdump host rechner1

// Zeigt nur Pakete, die zwischen zwei Rechnern ausgetauscht werden.
tcpdump host rechner1 and rechner2

Netzwerk-Konfigurationsdateien

/etc/hosts

In der Datei /etc/hosts werden Ip-Adressen und die zugehörigen Hostnamen eingetragen. Somit können Hostnamen und IP-Adressen aufgelöst werden. Es handelt sich quasi um einen kleinen Nameserver.

# vi /etc/hosts

192.168.1.5 petersPC
192.168.1.6 annesPC
192.168.1.7 www.yahoo.de

/etc/hostname

Die Datei /etc/hostname enthält den Hostnamen des Rechners.

/etc/networks

Ähnlich wie bei der Datei /etc/hosts werden in der Datei /etc/networks die Netzwerknamen eingetragen:

# vi /etc/networks

FirmaMuenchen 192.168.1.0
FirmaBerlin 192.168.2.0
FirmaDresden 192.168.3.0

/etc/host.conf

Die Datei steuert den so genannten Resolver, also den Mechanismus, der für die Auflösung von symbolischen Rechnernamen in IP-Adressen und umgekehrt zuständig ist. In der Datei »/etc/host.conf« bestimmt die mit order beginnende Zeile die Namensauflösung. »hosts« besagt, dass zunächst in der lokalen Datei /etc/hosts nachgesehen werden soll (die lokale Auflösung sollte immer zuerst stehen), anschließend soll ein NIS-Server befragt werden (nis) und, falls immer noch kein Ergebnis erzielt wurde, soll nun die Adresse über DNS ermittelt werden (»bind«, hier kann auch »dns« stehen). multi on besagt, dass ein Rechner durchaus mehrere IP-Adressen haben kann (Gateways, Router,...), mit »multi off« führt eine Anfrage, die verschiedene IP-Adressen ermittelt, zu einem Fehler.

# cat /etc/host.conf
order hosts nis bind
multi on

/etc/resolv.conf

In der Datei /etc/resolv.conf werden zum größten Teil die Nameserver eingetragen, welche die Namensauflösung durchführen.

# cat /etc/resolv.conf
nameserver 142.68.52.6

/etc/nsswitch.conf

Über den Name Service Switch kann man festlegen, welche Dateien, also lokale Dateien oder Netzwerkdienste, bei der Namensauflösung befragt werden sollen.

# cat /etc/nsswitch.conf
hosts: files dns
networks: files dns

Weitere Informationen

http://www.comptechdoc.org/os/linux/usersguide/linux_ugrouting.html
http://www.linux-praxis.de/lpic1/lpi102/1.112.3.html
http://www.linuxhaven.de/dlhp/HOWTO/DE-ISDN-HOWTO-7.html
http://linux.ltc.lu/kapitel7.html