Kapitel 8. Netzwerk
Zurück | 8.2 TCP/IP | Weiter

## 8.2 TCP/IP

Das Protokollpaar TCP/IP hat sich in den vergangenen Jahren, auch unterstützt durch das schnelle Wachstum des Internet, durchgesetzt. Physikalisch besteht das Internet aus allen möglichen Verbindungen, sei es eine Modemstrecke oder ein Ethernet, bis hin zu schnellen ATM-basierten Strecken. Gemeinsam ist allen, dass dort TCP/IP zur Kommunikation eingesetzt wird. Auf allen diesen Verbindungen lassen sich Dienste wie WWW, Mail, News oder IRC benutzen.

Im Folgenden werden die Grundlagen beschrieben; Sie benötigen diese nicht unbedingt für die in diesem Buch vorgestellten einfachen Beispiele. Wenn Sie aber Ihr Netz erweitern wollen oder tiefer in die Materie einsteigen möchten, sollten Sie jetzt weiterlesen.

### 8.2.1 IP-Adressen

Jeder an das Internet (oder an jedes andere IP-basierte Netzwerk) angeschlossene Computer wird über eine einmalige IP-Adresse identifiziert. IP-Adressen haben eine Länge von vier Byte, die normalerweise als vier dezimale Zahlen, getrennt durch Punkte, dargestellt werden. Im Folgenden sehen Sie einige gültige Beispiele:

    127.0.0.1

    192.168.0.5

    240.250.240.250

Anhand einer IP-Adresse lassen sich zwei Dinge feststellen: erstens das Netzwerk, in dem sich ein bestimmter Rechner befindet, und zweitens der Rechner selbst - dies entspricht dem so genannten Netzwerk- und dem Host-Teil der Adresse.

Für den Host-Teil der Adresse gibt es zwei besondere Werte: Wenn alle Bits auf 0 gesetzt sind, nennt man dies die Netzwerkadresse (network address, 0), wenn alle auf 1 gesetzt sind, beschreibt dies alle Rechner in diesem Netz - die so genannte Broadcast-Adresse (255).

### 8.2.2 IP-Interface-Konfiguration

Oder: „Wie kommt die Netzwerkkarte zu Ihrer Adresse?“ In den meisten Fällen werden Sie die Konfiguration Ihrer Netzwerkkarte bereits bei der Installation von Debian GNU/Linux vorgenommen haben. Wenn Sie eine solche Karte später einbauen oder das System mit einer zweiten Karte erweitern, müssen Sie diese von Hand einbinden.

Das Kommando `ifconfig` wird benutzt, um einem Netzwerkinterface (dies kann eine Netzwerkkarte, ein Modem, eine ISDN-Verbindung oder Ähnliches sein...) die benötigten Einstellungen zuzuweisen.

- Loopback - Ein „virtuelles“ Netzwerkinterface. Dieses bezieht sich immer auf den Rechner selbst und hat die IP-Adresse: 127.0.0.1. Interface: `lo`.

- Ethernet - Um zwei oder mehrere Rechner miteinander zu vernetzen, verwendet man eine Netzwerkkarte. Standard ist dabei der Einsatz von Ethernet-Karten. Interface: `eth0`, `eth1`, `eth2` usw.

- Tokenring - Ebenfalls zur Vernetzung über relativ kurze Strecken. Interface: `tr0`, `tr1`, `tr2` usw.

- PPP - „Point-to-Point Protocol“ (Punkt-zu-Punkt-Protokoll). Zur Verwendung über serielle Verbindungen, wie zum Beispiel Modemstrecken, ISDN usw. Interface: `ppp0`, `ppp1`, `ppp2` usw.

- Dummy - Für Systeme, die ansonsten keine Netzwerkverbindungen haben. Interface: `dummy`, `dummy0`, `dummy1` usw.

Es gibt noch einige weitere Beispiele. Wir werden uns hier mit dem am meisten verbreiteten, dem Ethernet, beschäftigen.

Wenn Ihr Kernel die installierte Netzwerkkarte nicht erkennt, müssen Sie das passende Modul laden. Sie können dies temporär mit dem Kommando `insmod` oder `modprobe` durchführen. Wenn Sie das richtige Modul gefunden haben, tragen Sie die nötigen Werte in die Datei `/etc/modutils` ein. Danach ist das Kommando `update-modules` aufzurufen. Für eine NE2000-kompatible Karte wäre dies beispielsweise die Zeile `alias eth0 ne` (in der Datei `/etc/conf.modules`).

Mit dem Kommando `ifconfig` weisen Sie nun der Karte eine IP-Adresse zu. Im einfachsten Fall, also ohne weitere Optionen, gibt `ifconfig` die bisher konfigurierten Interfaces aus:

    # /sbin/ifconfig
    lo        Protokoll:Lokale Schleife
              inet Adresse:127.0.0.1  Maske:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:114099 errors:0 dropped:0 overruns:0 frame:0
              TX packets:114099 errors:0 dropped:0 overruns:0 carrier:0
              Kollisionen:0 Sendewarteschlangenlänge:0
              RX bytes:26702410 (25.4 MiB)  TX bytes:26702410 (25.4 MiB)

Bisher sollte auf Ihrem Rechner lediglich das Loopback-Interface ( `lo`) konfiguriert sein.

Rufen Sie nun `ifconfig` mit dem Namen des Interfaces ( `eth0` für die erste, `eth1` für die zweite Karte usw.) sowie der gewünschten IP-Nummer auf, und sehen Sie sich die Veränderung an:

    # /sbin/ifconfig eth0 192.109.42.23
    # /sbin/ifconfig
    lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
              UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
              RX packets:18584 errors:0 dropped:0 overruns:0 frame:0
              TX packets:18584 errors:0 dropped:0 overruns:0 carrier:0
              Collisions:0

    eth0      Link encap:Ethernet  HWaddr 00:00:F7:C3:45:1B
              inet addr:192.109.42.23   Bcast:192.109.42.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:55 errors:0 dropped:0 overruns:0 frame:0
              TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
              Collisions:7
              Interrupt:10 Base address:0x300

`ifconfig` gibt Ihnen nun auch die Informationen zur Ethernet-Karte aus. Die Werte für die Netzmaske, Broadcast-Adresse usw. wurden automatisch gesetzt. Wenn Sie bei diesen Werten andere Einstellungen benötigen, so müssen Sie diese ebenfalls mit `ifconfig` setzen:

    # /sbin/ifconfig eth0 192.109.42.23 netmask 255.255.255.240

Dies verändert die zuvor angegebenen Werte. Wenn Sie ein Interface komplett deaktivieren wollen, benutzen Sie die Option `down`:

    # /sbin/ifconfig eth0 down

Wenn Sie Ihre Netzwerkkarte bereits bei der Installation von Debian GNU/Linux eingerichtet haben, so werden Sie feststellen, dass einfach schon alles funktioniert... Hierzu wurden die notwendigen Werte in die Datei `/etc/network/interfaces` geschrieben.

    # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

    # The loopback interface
    iface lo inet loopback

    # The first network card - this entry was created during the Debian
    # installation (network, broadcast and gateway are optional)
    iface eth0 inet static
    	address 192.109.42.18
    	netmask 255.255.255.240
    	network 192.109.42.16
    	broadcast 192.109.42.31
    	gateway 192.109.42.17

In dieser Datei sind einige Variablen definiert, die beim Aufruf des Programms `ifup` ausgelesen werden.

Wenn Sie Ihre Netzwerkkarte erst später eingerichtet haben, müssen Sie diese Datei erstellen und sie an Ihre Bedürfnisse anpassen.

### Netzwerkinformationen berechnen

Aus wenigen Angaben eines Netzwerks die fehlenden Informationen zu generieren ist oft auch für den erfahrenen Admnistrator nicht ganz einfach und zudem fehleranfällig, wenn diese Berechnungen von Hand gemacht werden. Abhilfe schafft hier das Programm `sipcalc` (http://www.routemeister.net/projects/sipcalc/).

    wasabi:~# sipcalc 192.168.1.1/24
    -[ipv4 : 192.168.1.1/24] - 0

    [CIDR]
    Host address            - 192.168.1.1
    Host address (decimal)  - 3232235777
    Host address (hex)      - C0A80101
    Network address         - 192.168.1.0
    Network mask            - 255.255.255.0
    Network mask (bits)     - 24
    Network mask (hex)      - FFFFFF00
    Broadcast address       - 192.168.1.255
    Cisco wildcard          - 0.0.0.255
    Addresses in network    - 256
    Network range           - 192.168.1.0 - 192.168.1.255
    Usable range            - 192.168.1.1 - 192.168.1.254

#### 8.2.2.1 `dhclient`

Mit dem Kommando `dhclient` lässt sich eine Anfrage an einen DHCP- (Dynamic Host Configuration Protocol) Server stellen. Von diesem können dann alle notwendigen Information für die Netzwerkkonfiguration bezogen werden.

Als wichtigste Option kann auf der Kommandozeile das gewünschte Netzwerkinterface angegeben werden, welches konfiguriert werden soll.

### Nameserver trotz DHCP vorgeben

Mit einer Anfrage an einen DHCP-Server wird auch meistens neben der IP-Nummer für den anfragenden Client, eine IP-Nummer für einen geeigneten Nameserver mitgeliefert. Dies ist nicht in jedem Falls gewünscht oder sinnvoll. Durch den Eintrag

    prepend domain-name-servers 192.168.15.4;

in der Datei `/etc/dhclient.conf` wird der angegebene Nameserver als erster in die Datei `/etc/resolv.conf` eingetragen und verwendet.

### 8.2.3 IP-Routing

Wenn Sie der Netzwerkkarte die eigenen Einstellungen mitgeteilt haben, müssen Sie dem Linux-Kernel noch beibringen, die IP-Pakete auch an die richtige Stelle zu schicken. Dies kann bei mehreren Netzwerkkarten durchaus richtige Arbeit werden...

Der Kernel hält die Informationen, welcher Rechner oder welches Netzwerk über welchen Weg zu erreichen ist, in der so genannten Routing-Tabelle („routing table“). Das Kommando, um sich diese Tabelle anzusehen, lautet: `route`. Wenn Sie bisher nur das Loopback-Device konfiguriert haben, wird das Ergebnis Folgendes sein:

    # /sbin/route
    Kernel IP routing table
    Destination   Gateway Genmask         Flags Metric Ref    Use Iface
    127.0.0.0     *       255.0.0.0       U     0      0        2 lo

Dies bedeutet, dass alle IP-Pakete (auch „traffic“ genannt) für das Netzwerk `127` über das Loopback-Device (`lo`) geschickt werden sollen.

Wenn Sie nun eine Netzwerkkarte konfiguriert haben, müssen Sie diese auch in die Routing-Tabelle des Kernels eintragen:

    # /sbin/route add -net 192.109.42.0
    # /sbin/route
    Kernel IP routing table
    Destination   Gateway  Genmask        Flags Metric Ref Use Iface
    127.0.0.0     *        255.0.0.0      U     0      0     2 lo
    192.109.42.0  *        255.255.255.0  U     0      0   137 eth0

Dies führt dazu, dass alle IP-Pakete für das Class-C-Netz `192.109.42.xxx` über das Interface `eth0` zu erreichen sind. Wenn Sie nur einen kleinen Teil eines Netzes zur Verfügung haben, müssen Sie dies über die Netzmaske (netmask) steuern:

    # /sbin/route add -net 192.109.42.16 netmask 255.255.255.240

In diesem Beispiel stehen 16 IP-Nummern zur Verfügung (.16 bis .31).

Dies reicht schon aus, um ein kleines internes Netzwerk zu betreiben. Wenn Sie jedoch zwei Netzwerke miteinander verbinden wollen, müssen Sie dies über ein so genanntes „Gateway“ (oder auch „Router“ genannt) tun.

Wenn über das neue Interface nur ein bestimmtes Netzwerk zu erreichen ist und Sie die Adresse des Gateways (Routers) für dieses Netz kennen, müssen Sie die Routing-Tabelle um genau diesen Eintrag ergänzen. Sie erreichen dies mit der Option `-net`:

    # route add -net 193.174.1.0 gw 192.109.42.17

Dies bedeutet, dass das Netz 193.174.1.0 (Class C) über das Gateway 192.109.42.17 zu erreichen ist. Es setzt aber auch voraus, dass schon bekannt ist, wie das Netz 192.109.42.x zu ereichen ist.

Eine andere häufig anzutreffende Möglichkeit ist es, alle IP-Pakete, für die es keinen passenden Eintrag in der Routing-Tabelle gibt, an ein Gateway zu schicken, die so genannte „Default-Route“.

    # route add default gw 192.109.42.17

Dies würde zu folgender Routing-Tabelle führen:

    Kernel IP routing table
    Destination   Gateway       Genmask         Flags Metric Ref Use Iface
    127.0.0.0     *             255.0.0.0       U     0      0     2 lo
    192.109.42.16 0.0.0.0       255.255.255.240 U     0      0     0 eth0
    0.0.0.0       192.109.42.17 0.0.0.0         UG    1      0     0 eth0

Sehen wir uns die Einträge im Einzelnen einmal an: Die erste Zeile bezieht sich auf das Loopback-Device (`127.0.0.0`, `lo`). Wenn Sie einen neueren Kernel verwenden, wird dies unter Umständen nicht angezeigt.

Werfen wir jedoch zunächst noch einmal einen genaueren Blick auf die Datei `/etc/network/interfaces`:

    # /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

    # The loopback interface
    iface lo inet loopback

    # The first network card - this entry was created during the Debian
    # installation (network, broadcast and gateway are optional)
    iface eth0 inet static
    	address 192.109.42.18
    	netmask 255.255.255.240
    	network 192.109.42.16
    	broadcast 192.109.42.16
    	gateway 192.109.42.17

Diese Datei definiert einige Variablen; wenn Sie eine Änderung an dieser Datei vornehmen, können Sie diese einfach mit dem Kommando `ifup eth0` aktivieren. In den ersten Zeilen wird das so genannte Loopback-Device konfiguriert.

Die folgenden Zeilen beinhalten die benötigten Variablen für Ihr Netz.

In dieser Datei werden IP-Nummern verwendet. Wenn Sie das Kommando `route` aufrufen, um sich die Routing-Tabelle anzeigen zu lassen, werden Sie bemerken, dass dort die Namen der Rechner und Netze verwendet werden. Sie können die Ausgabe der IP-Nummern mit der Option `-n` hinter dem Kommando `route` erzwingen.

In der Datei `/etc/hosts` finden Sie den Namen des lokalen Rechners und in der Datei `/etc/networks` den Namen des Netzes. Systeme, deren Name nicht in der Datei `/etc/hosts` beschrieben sind, werden im Allgemeinen über den Nameserver aufgelöst.

### 8.2.4 Domain Name Server - DNS

Jeder mit dem Internet verbundene Rechner oder jedes Netzwerk, das IP als Netzwerk-Protokoll benutzt, hat eine (oder mehrere) IP-Adressen, mit der das Routing von und zu diesem System sichergestellt wird. Da die Benutzer sich diese Zahlenkolonnen nur schwer merken können, kann jedem Rechner (eigentlich jeder IP-Nummer) ein Name zugewiesen werden. Sicher haben Sie dies schon bei der Installation von Debian GNU/Linux bemerkt: Sie werden nach einem Rechnernamen (Hostnamen) gefragt.

Dieser Name wird an verschiedenen Stellen gespeichert. Sie können mit dem Kommando `hostname` den Namen des Rechners herausfinden; es wird der Wert aus der Datei `/etc/hostname` ausgegeben. Wenn Sie dies an einem (dauerhaft) ans Internet angeschlossenen Rechner probieren, besteht dieser Name aus verschiedenen Teilen, die durch Punkte getrennt sind, zum Beispiel `linux.openoffice.de`.

Nur der erste Teil ist der Name des Rechners (Hostname), der Rest wird als „Domain Name“ bezeichnet (hier: `openoffice.de`). Da es natürlich viele Menschen gibt, die möchten, dass ihr Rechner den Namen `linux` bekommt, wurde jeder dieser Namen dadurch einmalig gemacht, dass man ihn einer bestimmten Domäne zuordnet.

Innerhalb einer Domäne (also einer Gruppe von Computern, einem Netzwerk) ist meist eine Person für die Vergabe von Computernamen zuständig und pflegt die Daten(-bank) mit den notwendigen Informationen. Dieses System ist als DNS (Domain Name Service) bekannt. Es ist mit einem Telefonverzeichnis vergleichbar. Sie können nach einem Computernamen suchen und erhalten dessen IP-Adresse.

Vor der Einführung von DNS musste man sich die IP-Adressen der Rechner merken, um sich im Internet bewegen zu können. Namen wurden nur innerhalb kleinerer Netzwerke benutzt und konnten in verschiedenen Netzen doppelt vergeben werden. Diese (lokalen) Namen wurden in der Datei `/etc/hosts` gespeichert. Natürlich können Sie auch heute noch diese Datei benutzen, sie wird auch bei der Installation von Debian GNU/Linux angelegt. Die Datei enthält den Namen des eigenen Rechners und die dazugehörige IP-Adresse.

DNS ist ein sehr umfangreiches Thema; wir werden uns an dieser Stelle nur aus der Sicht des Nutzers (Clients) damit befassen.

Wenn ein Debian GNU/Linux-System die IP-Adresse eines anderen Rechners benötigt (zum Verschicken von Mail oder um eine Webseite aufzurufen), wird ein Teil der C-Library benutzt, um die Informationen zu bekommen - der „Resolver“. Zuerst wird ein Blick in die Datei `/etc/nsswitch.conf` geworfen (können Sie an dieser Stelle auch tun...). In dieser ist aufgeführt, an welchen Stellen versucht werden soll, die IP-Nummer zu finden. Hier sind drei verschiedene Einträge möglich. Wenn mehrere vorhanden sind, werden sie der Reihenfolge nach durchsucht.

- files - Versucht, den Hostnamen in der Datei `/etc/hosts` zu finden.

- dns - Probiert es über eine Nameserver-Abfrage.

- nis - Fragt eine NIS-Datenbank.

Ein üblicher Eintrag in der Datei `/etc/nsswitch.conf` wäre:

    hosts:         files dns

Dieser Eintrag bringt den Resolver dazu, zuerst die Datei `/etc/hosts` und dann den (in `/etc/resolv.conf` definierten) Nameserver (DNS) nach dem Rechnernamen zu durchsuchen.

Die Datei `/etc/resolv.conf` enthält, neben dem Eintrag für einen oder mehrere Nameserver, zunächst den Namen der lokalen Domain.

    domain openoffice.de
    nameserver 194.25.2.129
    nameserver 192.168.22.33

Die erste Zeile bewirkt, dass die lokale Domain an den Rechnernamen (Hostname) angehängt wird, wenn nur ein Rechnername ohne Angabe der Domain angegeben wird. Die folgenden Zeilen beschreiben die (IP-technisch gesehen möglichst gut erreichbaren) Nameserver. Sie sollten hier in jedem Fall IP-Nummern und nicht die Namen der Rechner verwenden.

Alle Programme, die Sie benutzen (zum Beispiel Webbrowser), erfragen automatisch die IP-Nummer, wenn Sie einen Rechnernamen eingeben. Natürlich können Sie aber auch selbst solche Abfragen starten. Das zu Debian GNU/Linux gehörende Paket `dnsutils` enthält das Programm `nslookup`. Sie können `nslookup` interaktiv benutzen, um mehrere Abfragen nacheinander zu starten. Die häufigste Anwendung ist aber, `nslookup` für eine einzelne Abfrage zu benutzen. Hierzu geben Sie nach dem Kommando einfach den Namen des gesuchten Rechners an:

    # nslookup www.debian.org

    Server:		194.25.2.129
    Address:	194.25.2.129#53

    Non-authoritative answer:
    Name:	www.debian.org
    Address: 198.186.203.20

Nach dem befragten Server wird weiter unten die IP-Adresse für den gewünschten Server angegeben.

### 8.2.5 resolv.conf

Auf die Datei `/etc/resolv.conf` wurde ja schon im vorherigen Abschnitt eingegangen. Hier noch ein etwas erweitertes Beispiel:

    domain openoffice.de
    search openoffice.de debiananwenderhandbuch.de debian.org
    nameserver 194.25.2.129
    nameserver 192.168.22.33

Hinzugekommen ist die zweite Zeile. Diese ist nicht zwingend notwendig, erleichtert aber die Arbeit. Mit dieser Zeile werden einfach (wenn Sie nur den Hostnamen angeben) die angegebenen Domains nach dem gewünschten Namen durchsucht, und der Hostname wird automatisch um den Domainnamen ergänzt.

### 8.2.6 `resolvconf`

Das Paket `resolvconf` verwaltet Informationen über die aktuell verfügbaren Nameserver.

Die Datei `/etc/resolv.conf` war ursprünglich eine statische Konfigurationsdatei in der nur sehr selten Anpassungen vom Administrator vorgenommen wurden. Mit der Verbreitung von mobilen Computern wurde es jedoch üblich, dass ein Rechner sehr häufig in verschiedenen Netzwerken eingesetzt wurde. Um am jeweils aktuellen Standort eine Auflösung von Rechnernamen in IP-Adressen zu erlauben, muss die Datei `/etc/resolv.conf` an den aktuellen Standort angepasst werden. Eine ganze Reihe von Paketen erledigen dies durch direktes ändern der Datei `/etc/resolv.conf`. Dies sind beispielsweise `pcmcia-cs`, `ppp`, `pppconfig`, `pppoeconf`, `webmin` und `dhcp-client` und noch viele andere. Alle diese Pakete kooperieren aber nicht bei Änderungen an der Datei, jedes Paket überschreibt die Anpassung eines anderen Paketes. `resolvconf` soll zu einer Vereinheitlichung bei der Verwaltung der Datei `/etc/resolv.conf` beitragen.

Im Zusammenhang mit der Installation von `resolvconf` ist darauf zu achten auch allen anderen Pakete zu aktualisieren die Änderungen an der Datei `/etc/resolv.conf` vornehmen. Diese Pakete werden laufend aktualisiert und auch die Zusammenarbeit mit `resolvconf` hin optimiert. Mit der Version „Sarge“ von Debian ist ein Grossteil der Pakete bereits angepasst.

Nach der Installation von `resolvconf` sind zunächst alle Programme die bisher in die Datei `/etc/resolv.conf` geschrieben haben zu stoppen und hinsichtlich der Konfiguration anzupassen. Einige wenige müssen komplett entfernt werden. Eine detaillierte Auflistung findet sich in der Datei /usr/share/doc/resolvconf/README.gz.

Für jedes logische Interface, welches in der Datei `/etc/network/interfaces` aufgeführt ist, muss nun ein Eintrag in der Form

    dns-nameservers 11.22.33.44 55.66.77.88
    dns-search bla.org blub.org

hinzugefügt werden. Weiterhin sind hier Einträge mit den Schlüsselwörtern `dns-domain` und `dns-sortlist` erlaubt. Die zu jedem Interface aufgeführten Optionen werden beim aktivieren eines Interfaces in die Datei `/etc/resolv.conf` geschrieben, jeweils ohne die vorangestellte Zeichenkette `dns-`.

Zurück | Nach oben | Weiter
Kapitel 8. Netzwerk | Zum Anfang | Kapitel 9. Server-Dienste

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).