TCP/IP-Netze mit Linux

16.10.2000 von Jörg Luther
Das Internet-Protokoll TCP/IP gehört zur Standardausstattung von Linux. Mit ihm bauen Sie mit minimalem Aufwand große und kleine Netzwerke auf. tecChannel beschreibt die dafür notwendigen Schritte.

Ob zu Hause, im kleinen Büro oder im Großkonzern - Einzelplatz-PCs sind out, es lebe das Netzwerk! Als Grundlage für die Kommunikation vernetzter Rechner dient heute TCP/IP, das universelle Netzwerkprotokoll des Internets. Innerhalb weniger Jahre hat es alle Konkurrenten - selbst so mächtige Gegner wie Novells IPX oder NetBIOS von IBM/Microsoft - fast völlig verdrängt.

Den Betriebssystemen der Unix-Familie wurde TCP/IP schon als Muttersprache mit in die Wiege gelegt. Daher eignen sich gerade sie ideal zum Aufbau TCP/IP-basierter LANs. Dies gilt nicht nur für die teuren kommerziellen Unix-Derivate, sondern genauso für das für jedermann erschwingliche Linux.

Mit dem Open Source Unix steht ein ideales Netzwerk-Betriebssystem praktisch kostenlos zur Verfügung. Und auch die Netzwerk-Hardware kostet nicht mehr die Welt: Network-Starter-Kits mit Netzwerkkarten, Hub und Verkabelung sind für rund 200 Mark zu haben.

Linux und die Netzwerkkarte

Hubs - und auch ihre leistungsfähigeren und teureren Vettern, die Switches - fungieren im Netz als automatische Verteilerkomponenten. Hier gibt es praktisch nichts zu konfigurieren. Ganz anderes bei den Netzwerkkarten: Sie dienen als zentrale Schnittstelle zwischen dem Datenbus innerhalb und dem Netzwerk außerhalb des Rechners. Jedes IP-Datenpaket von und zum Computer muss dieses Tor passieren.

Bei einer Neuinstallation erkennt Linux alle gängigen und selbst einige eher ungewöhnliche Netzwerkkarten automatisch und lädt das zugehörige Treiber-Modul. Mit welchen NICs das Betriebssystem dabei klar kommt, können Sie im Linux Networking HOWTO nachlesen. Hardware, die Sie in dieser Aufstellung nicht finden, läuft mit ziemlicher Sicherheit nicht unter Linux.

Falls Sie in der Liste ihre NIC weder nach Hersteller- noch Modellnamen finden, ist das jedoch noch kein Grund, sich graue Haare wachsen zu lassen. Linux identifiziert Netzwerkkarten nur im Ausnahmefall nach diesen Kriterien, stattdessen fast immer anhand des verwendeten Ethernet-Controllers. Es lohnt sich also im Zweifelsfall, die Netzwerkkarte zur Hand zu nehmen und den Aufdruck des größten Chips darauf genauer zu studieren.

Das gilt speziell, falls Sie eine Netzwerkkarte nachinstallieren oder gegen eine NIC anderen Typs austauschen wollen. Dazu müssen Sie dem installierten Linux zunächst einmal beibringen, beim Booten des Systems den neuen Treiber mit einzubinden. Das können Sie auf zwei Wegen erledigen: Entweder teilen Sie bei modularem Kernel mit, welches Modul zu laden ist, oder Sie kompilieren einen maßgeschneiderten Kernel neu.

NIC-Treiber als Modul nachladen

Linux lagert die Kernel-Module im Verzeichnis /lib/modules/kernel-version, bei aktuellen Distributionen also üblicherweise in /lib/modules/2.2.16. Hier finden sich zahlreiche, nach dem Einsatzbereich der Module benannte Subdirectorys. Uns interessiert speziell das Unterverzeichnis net, in dem sich die Module für die Netzwerkkarte finden.

Hier picken Sie sich den Treiber für Ihre NIC heraus und merken sich den Namen. Im Falle einer 3Com FastEtherlink 10/100 etwa wäre das 3c59x.o, für eine der sehr verbreiteten Karten mit DEC21x4x-Controller tulip.o, für eine der preiswerten NICs mit Realtek-Chipsatz rtl8139.o.

Nun müssen Sie den gewünschten Treiber noch dem Betriebssystem bekannt machen. Öffnen Sie als root mit Hilfe eines Texteditors das File /etc/conf.modules und fügen Sie hier eine Zeile für das zu ladende Modul ein:

alias eth0 3c59x

Auf diese Weise teilen Sie dem Kernel mit, dass er für das Device eth0 den Treiber 3c59x.o verwenden soll. Nun starten Sie per init 6 den Rechner neu, um nachzuprüfen, dass das Modul bei Systemstart auch wirklich automatisch mit eingebunden wird.

Vom Erfolg des Vorgangs können Sie sich durch den Aufruf des Kommandos ifconfig eth0 überzeugen. Dessen Ausgabe sieht - je nach der von Ihnen eingebundenen NIC - in etwa so wie in der obigen Abbildung aus.

Kernel für die NIC neu kompilieren

Alternativ lässt sich der Support für die gewünschte Netzwerkkarte auch in den Kernel kompilieren. Das funktioniert garantiert bei jeder Distribution und bietet zudem die Gelegenheit, den Kernel auf den neusten Stand zu bringen.

Holen Sie sich dazu die aktuellen Kernel-Quellen bei Kernel.org und installieren Sie diese in das Verzeichnis /usr/src/kernel-version. Wechseln Sie nun in dieses Verzeichnis und starten Sie mit make menuconfig (textbasiert) beziehungsweise make xconfig (grafisch) das Konfigurations-Utility.

Falls Sie eine relativ neue oder ungewöhnliche Netzwerkkarte Ihr Eigen nennen, aktivieren Sie unter Code maturity level options den Punkt Prompt for development and/or incomplete code/drivers. Beim aktuellen Kernel 2.2.17 wählen Sie anschließend aus dem Hauptmenü die Option Network Device Support und dort den Unterpunkt Ethernet (10 or 100Mbit). Hier finden Sie alle verfügbaren NIC-Treiber versammelt.

Suchen Sie den passenden Treiber und markieren Sie dort die Checkbox y, um ihn fest in den Kernel einzubinden. Vergessen Sie nicht, nach der Rückkehr ins Hauptmenü die Konfiguration zu speichern. Jetzt können Sie den neuen Kernel kompilieren und via LILO einbinden. Eine ausführliche Beschreibung dafür findet sich beim Linux Documentation Project.

IP-Adressen auf die Schnelle

Bevor wir daran gehen, das Netzwerk-Interface weiter zu konfigurieren, ist noch ein kurzer Ausflug in die Theorie angesagt. Motto: Woher kommen die IP-Adressen? Wir beschränken unsere Ausführungen dabei auf so genannte Class-C-Netze, die maximal 254 Endgeräte aufnehmen können - für unsere Zwecke mehr als genug.

Für private LANs, die nicht direkt mit dem Internet in Verbindung stehen, hat IANA unter anderem die Netze mit den Nummern 192.168.0.0 bis 192.168.255.0 reserviert. Suchen Sie sich nach Belieben eines dieser Netze für Ihren Gebrauch heraus, sagen wir die 192.168.80.0.

Innerhalb dieses Netzes können Sie die Adressen von 192.168.80.1 bis 192.168.80.254 für Endgeräte frei verwenden. Die 192.168.80.0 bleibt als Netzwerk-Nummer reserviert. Über 192.168.80.255 lassen sich alle Rechner des Netzes gleichzeitig ansprechen. Zur Adressierung in unserem Beispiel wird noch die Netzmaske 255.255.255.0 benötigt, in der alle Bits des Netzwerk-Deskriptors gesetzt, alle Bits der möglichen Maschinen-Adressen aber gelöscht sind.

Jeder Rechner Ihres Netzes muss eine eindeutige Adresse aus dem zur Verfügung stehenden Bereich erhalten. Traditionellerweise nutzt ein Gateway, über den die Verbindung zu anderen Netzen erfolgt, die Adresse 1 oder 254. Somit stehen für die anderen Rechner in unserem Beispiel die IP-Adressen 192.168.80.2 bis 192.168.80.253 zur Disposition.

Netzanbindung mit ifconfig

Um die Netzwerkkarte mit einer eigenen IP-Adresse ins Netz einzubinden, dient der Befehl ifconfig. Um also Ihren Rechner mit der Host Adresse 77 in das Class-C-Netz 192.168.80.0 einzubinden, lautet das vollständige Kommando:

ifconfig eth0 192.168.80.77 netmask 255.255.255.0 up

Das Anhängsel up teilt dem Interface mit, dass jetzt die Aktivierung ansteht. Umgekehrt lässt sich die Karte mit einem einfachen ifconfig eth0 down auch wieder deaktivieren.

Die erfolgreiche Einbindung der Karte prüfen Sie erneut mit Hilfe des Befehls ifconfig eth0. Diesmal sollte die Ausgabe in etwa so wie in der unten stehenden Abbildung aussehen.

Im Gegensatz zu der Meldung unmittelbar nach Einbindung des Treibers, zeigt ifconfig nun auch die IP- und Broadcast-Adresse sowie die Netzwerkmaske an. Ist der Rechner an ein schon laufendes Netz angebunden, findet sich unter RX packets zudem eine bei jedem Aufruf des Kommandos steigende Zahl: Sie signalisiert die als Broadcasts eingegangenen Pakete.

Speichern der NIC-Einstellungen

Zwar eignet sich ifconfig wunderbar, um die Einstellung der NIC zu testen. Auf Dauer wäre es allerdings lästig, die Settings jedes Mal manuell vorzunehmen. Also gilt es, sie zu speichern - aber wo?

Generell ließe sich das ifconfig-Kommando durchaus auch direkt in die Bootkonfiguration einarbeiten. Praktisch jede Distribution regelt jedoch den Vorgang etwas anders. Eine generelle Leitlinie lässt sich hier also nicht geben, im Zweifelsfall hilft das Studium des Distributions-Handbuchs sowie unseres Artikels über Linux-Bootkonfigurationen weiter.

Die allermeisten Distributionen - von vereinzelten Ausnahmen wie Debian einmal abgesehen - bringen jedoch dankenswerterweise Tools zur Netzwerkkonfiguration mit. Es empfiehlt sich dringend, diese auch zu benutzen: Sie ersparen sich auf diese Weise eine Menge Schweiß und Zeit.

Debian-Special

Der Debian-Distribution allerdings liegt selbst in der aktuellsten Version 2.2 noch kein Tool zur Konfiguration der Netzwerkkarte bei. Hier hilft nur das intensive Studium des Handbuchs weiter.

Ein kleiner Tipp für Debian-Jünger: Sie finden die Settings für die Netzwerkkarten in /etc/network/interfaces. Eine typische statische Zuordnung für eine NIC sieht folgendermaßen aus:

# 3C905B-TX auf eth0
iface eth0 inet static
address 192.168.80.77
network 192.168.80.0
netmask 255.255.255.0
broadcast 192.168.80.255
gateway 192.168.80.254

Den Rest erledigt das System im Zuge des Boot-Vorgangs dann selbst. Falls der Rechner als DHCP-Client laufen soll, können Sie sich die Parameterangaben schenken: Ersetzen Sie in diesem Fall in der Kopfzeile das Schlüsselwort static durch dhcp.

Pfad nach außen

Damit der Rechner auch mit anderen Geräten innerhalb des Netzwerks kommunizieren kann, benötigt er passende Wege-Angaben, die so genannten Routen. Den Pfad für die Kommunikation mit den anderen Rechnern im lokalen Netz legen Sie mit dem Aufruf des Kommandos route fest, in unserem Beispiel:

route add -net 192.168.80.0 netmask 255.255.255.0 eth0

Eine Klartext-Übersetzung würde in etwa lauten: "Schicke allen Datenverkehr an das Class-C-Netz 192.168.80.0 über das Interface eth0 nach draußen."

Wollen Sie allerdings nicht nur im eigenen LAN, sondern auch mit Rechnern in anderen Netzen kommunizieren, erweist sich diese Art der Wege-Angabe als äußerst umständlich: Sie müssten für jedes anzusprechende Netz eine eigene Route eintragen. Dem beugt die Möglichkeit zur Angabe einer Default-Route vor:

route add default gw 192.186.80.254 eth0

Deutsche Übersetzung: "Schicke alles, was nicht ins lokale Netz soll, über eth0 an das Gateway mit der IP-Adresse 192.168.80.254".

Diese beiden Standard-Routen legen Sie im Normalfall bereits während der Konfiguration der NIC mit fest. Ob sie tatsächlich eingetragen wurden, überprüfen Sie mit einem Aufruf von route ohne Parameterangabe. Sie sollten dann - in unserem Beispiel - eine Ausgabe ähnlich jener in der oben stehenden Abbildung erhalten.

Testen der Basiskonfiguration

Nachdem Sie die beschriebenen Konfigurationsarbeiten an mindestens zwei der Rechner abgeschlossen haben, steht ein erster Funktionstest Ihres Netzwerks an. Dazu benutzen Sie das Kommando ping, das ein spezielles Datenpaket an die angegebene Gegenstelle verschickt. Sofern diese die Daten erhält, versieht sie sie mit einigen Zusatzinformationen und sendet sie umgehend retour.

In unserem Beispiel haben Sie den PC client (192.168.80.77) und den Gateway-Rechner 192.168.80.254 konfiguriert und senden nun drei Testpakete vom Desktop an den Gateway. Eine saubere Konfiguration vorausgesetzt, erhalten Sie auch umgehend Antwort:

client:~# ping -c3 192.168.80.254
PING 192.168.80.254 (192.168.80.254): 56 data bytes
64 bytes from 192.168.80.254: icmp_seq=0 ttl=64 time=3.2 ms
64 bytes from 192.168.80.254: icmp_seq=1 ttl=64 time=3.0 ms
64 bytes from 192.168.80.254: icmp_seq=2 ttl=64 time=3.0 ms

--- 192.168.80.254 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 3.0/3.0/3.2 ms

Erhalten Sie stattdessen von der Gegenstelle keinerlei Lebenszeichen, gilt es, auf beiden Rechner noch einmal Interface- und Routen-Einstellungen sowie die Verkabelung zu prüfen.

Namensauflösung über /etc/hosts

Um die anderen Rechner im lokalen Netz nicht nur über deren IP-Adressen, sondern auch über leichter zu behaltende Namen ansprechen zu können, erstellen Sie sich eine Datei namens /etc/hosts. In drei durch beliebigen Whitespace getrennten Spalten enthält sie IP-Adressen, den offiziellen Rechnernamen sowie einen Kurznamen für das bequemere Handling:

# /etc/hosts
127.0.0.1 localhost loopback
192.168.80.77 client.mydom.de client
192.168.80.254 gw.mydom.de gw
(... und so weiter ...)

Diese Art der Namensauflösung bringt allerdings einige Nachteile mit sich: So muss die /etc/hosts auf jedem Rechner erstellt und bei Veränderungen im Netz auf jedem Rechner angepasst werden.

Andererseits erfolgt die Auflösung wesentlich schneller als bei der Nutzung über einen Nameserver, sodass selbst in großen LANs jede Maschine über eine /etc/hosts mit den Namen und Adressen der am häufigsten genutzten Verbindungspartner verfügen sollte.

Namensauflösung über DNS

Um die Namensauflösung über einen Nameserver zu regeln, speichern Sie einige Einstellungen in einer Datei namens /etc/resolv.conf. Sie sieht etwa folgendermaßen aus:

# /etc/resolv.conf
domain mydom.de
search mydom.de mydom.local
nameserver 195.30.0.2
nameserver 195.30.0.1

Hinter dem Schlüsselwort domain findet sich der Name des lokalen Netzwerks. Die Eintragungen bei search legen fest, dass bei Angabe eines Rechners ohne voll qualifizierten Namen die Maschine in den Domains mydom.de und mydom.local gesucht werden soll.

Die Angabe für die Nameserver - im Regelfall wohl diejenigen Ihres Providers - lässt sich beliebig oft wiederholen. Bei der Namensauflösung über DNS fragt der Rechner dann die aufgeführten Nameserver der Reihe nach ab, bis er die gewünschte Antwort erhält.

Regeln für die Namensauflösung

Nun müssen Sie dem Rechner noch mitteilen, in welcher Reihenfolge er die beiden Möglichkeiten der Namensauflösung nutzen soll. Dazu erstellen Sie eine Datei namens /etc/host.conf. Sinnigerweise sieht diese folgendermaßen aus:

# /etc/host.conf
order hosts,bind
multi on

Diese Standardkonfiguration weist den Rechner an, zur Namensauflösung zunächst die schnelle Methode über die Auswertung der /etc/hosts zu nutzen. Erst wenn dies nicht zum gewünschten Erfolg führt, wendet er sich an einen Nameserver.

Das Schlüsselwort multi mit der Parameterangabe on spezifiziert, dass beim Vorliegen mehrerer gültigen Adressen für einen Host in der /etc/hosts alle davon zurückgegeben werden sollen. Anderenfalls wird der Host stets nur mit der ersten gefundenen Adresse assoziiert.

Fazit

Nach Abschluss der beschriebenen Konfigurationsarbeiten auf den Rechnern in Ihrem Netzwerk können Sie sich als stolzer Benutzer eines funktionsfähigen TCP/IP-LANs betrachten. Zwar war die Einrichtung nicht besonders schwierig, einen höheren Nutzwert hat Ihr frisch aufgesetztes Netzwerk allerdings auch noch nicht.

Den erhält es erst, indem Sie Ihre Rechner mit nützlichen Netzwerkdiensten aufpäppeln. So eignet sich Linux ideal als Dienstleister für Windows-Clients, wie unsere Workshops Linux als Windows-Server und Linux als Samba-Printserver zeigen. Auch der Außenwelt gegenüber gibt sich Linux gern kommunikativ - lesen Sie dazu unsere Workshops Linux als Webserver und Linux als Dial-up-Router.

Bei Bedarf macht sich Linux auch als DNS- und DHCP-Server nützlich, befördert als Faxmaschine Papierenes über Datenleitungen oder unterhält sich via NFS und NIS mit anderen Unixen. Wie Sie Ihr Linux zu solch nützlichen Tätigkeiten bewegen, lesen Sie in den nächsten Wochen in loser Folge in unserem Linux-Channel. jlu)