Manuelle Netzwerkkonfiguration unter LinuxMan könnte in Versuchung kommen zu meinen, ein Netzwerk mit Linux aufzubauen stelle sich angesichts der Konfigurationsprogramme großer Distributionen als trivial dar. Doch der Umgang mit einer unbekannten Distribution ohne grafische Tools kann sich schnell wie der erste Kontakt mit Linux herausstellen - man fühlt sich hilflos, weiß nicht, wo was zu konfigurieren ist. Deswegen kann es eigentlich nur hilfreich sein zu wissen, wie man auch von Hand eine Netzwerkkarte unter Linux konfiguriert. Genau dies ist Anliegen der folgenden Beschreibung, die sich an alle richtet, die nicht nur auf Tools, sondern auch auf ihr eigenes Wissen setzen wollen... Treiber ladenDer wichtigste und schwierigste Teil stellt das Laden des entsprechenden Kernel-Moduls dar. Dieses Thema kann in all seiner Fülle hier natürlich nicht betrachtet werden, da die Treiberkonfiguration unter Linux oftmals ein paar Probleme bereitet. Zudem kann ich nicht für zig Hundert Karten eine Beschreibung liefern, deshalb soll hier nur ein Allgemeinweg beschrieben werden, der trotzdem meistens zum Ziel führen dürfte. Zunächst einmal muss man herausfinden, welche Netzwerkkarte man besitzt. Im Normalfall befindet sich diese (wenn man nicht gerade eine PCMCIA-Karte in einem Laptop konfigurieren will) in einem PCI-Slot, womit sich durch das Programm lspci , welches von root gestartet werden muss, viele Informationen auslesen lassen. Alternativ kann
auch ein "cat /proc/pci " ausgeführt werden, was annähernd denselben Effekt hat.Ein sehr verbreiteter Chipsatz ist der Realtek RTL-8139, da er sehr billig ist und sich trotzdem über viele Jahre hinweg bewährt hat. Auch in meinem Rechner ist eine Karte mit solch einem Chip vorhanden und lspci führt zu folgender Ausgabe: [...] 00:09.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10) [...]Natürlich ermöglicht es lspci auch detailliertere Informationen darzustellen. lspci -vv gibt alles aus,
was lspci auslesen kann, für weitere Informationen sollte man lspci die erste Anlaufstelle sein...Q: Woher weiß ich nun, welchen Treiber ich laden muss? A: Dies ist wohl der unsicherste Teil der ganzen Angelegenheit. Zunächst sollte man in das Verzeichnis /lib/modules/<kernel-version>/kernel/drivers/net
wechseln, da hier alle Module abgelegt sind, die Treiber für Netzwerkkarten darstellen. Hier kann man suchen und
schauen, ob es eine Datei gibt, welche vom Namen her der gefundenen Netzwerkkarte ähnelt. Ist man sich unsicher, so
kann man mit "modinfo <modul>.o " herausfinden, ob es sich bei dem angegebenen Modul um einen
Treiber für die eigene Netzwerkkarte handelt. Z.B. liefert "modinfo 8139too.o " folgende Ausgabe:
bash$ modinfo 8139too.o filename: /lib/modules/2.4.23/kernel/drivers/net/8139too.o description: "RealTek RTL-8139 Fast Ethernet driver" author: "Jeff Garzik" license: "GPL" parm: multicast_filter_limit int, description "8139too maximum number of filtered multicast addresses" parm: max_interrupt_work int, description "8139too maximum events handled per interrupt" parm: media int array (min = 1, max = 8), description "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps" parm: full_duplex int array (min = 1, max = 8), description "8139too: Force full duplex for board(s) (1)" parm: debug int, description "8139too bitmapped message enable number"Neben der Beschreibung des Moduls werden vor allem auch die unter "parm" aufgeführten Parameter mit ausgegeben. Diese könnten wichtig werden, falls der Treiber Probleme verursacht. Das Modul mit den entsprechenden Parametern zu laden kann dann die Lösung sein... Q: Ich kann kein passendes Modul finden, was tun? A: Zunächst einmal sollte man bei Google suchen, ob es ein Kernelmodul für die entsprechende Karte gibt. Ist dies der Fall, das entsprechende Modul fehlt allerdings in dem o.a. Ordner, dann hilft nur noch eine Neukonfiguration und -kompilierung des Kernels, was ich hier jedoch nicht weiter verfolgen werde... Ist das Modul gefunden, so wird es Zeit, dem System mitzuteilen, dass selbiges für den Betrieb eines Netzwerkgerätes eingesetzt werden soll. Am einfachsten ist dies mit dem Tool modconf möglich. Aktiviert man hier das
entsprechende Modul, so wird automatisch ein Eintrag in die /etc/modules.conf geschrieben und der
Treiber der Netzwerkkarte wird fortan bei jedem Bootvorgang automatisch geladen. Sollte modconf nicht zur Verfügung
stehen, ist es notwendig, die /etc/modules.conf um folgenden Eintrag zu erweitern:
alias eth0 <modulname>Zusätzlich können hier auch die oben erwähnten Parameter als Option gesetzt werden, sodass sie beim Laden des Moduls aktiviert werden: options <modulname> <parameterliste>Dieser manuelle Eintrag in /etc/modules.conf hat denselben Effekt wie eine Aktivierung in modconf: bei einem erneuten Bootvorgang wird das Modul geladen und steht nun als Device eth0 zur Verfügung. Zudem kann man nun den Treiber auch ohne Neubooten einbinden: " modprobe <modulname> " liest
die entsprechende Konfiguration aus der modules.conf aus und aktiviert die Karte inklusive etwaigen Parametern...
/etc/network/interfaces -- Netzwerkdaten konfigurierenDie wichtigsten Daten des Netzwerkes wie IP-Adresse, Subnet Mask, Gateway, Hostname etc. können in der Datei /etc/network/interfaces eingestellt werden. Dies ist die Konfigurationsdatei für die Programme
ifup/ifdown, welche (zumeist beim Systemstart) für das Konfigurieren der Netzwerkkarte zuständig sind. Sollten
diese Tools nicht installiert sein, verfügt ihr System wohl über einen anderen Mechanismus zur Konfiguration beim
Booten - vielleicht ähnlich dem von ROCK Linux - siehe nächster Abschnitt.Folgende Zeilen sollten in der interfaces-Datei so oder so ähnlich bereits vorhanden sein: auto lo iface lo inet loopbackDies sind die Einträge des loopback-Devices, welches von systeminterner Bedeutung ist. Soll sich das System die Daten des Netzwerkes über einen DHCP-Server holen, so sind folgende zusätzliche Einträge notwendig: auto eth0 iface eth0 inet dhcpWill man dem Rechner über die Schnittstelle eth0 eine statische IP-Adresse samt zusätzlicher Optionen zuweisen, fügt man stattdessen einfach ein paar Zeilen folgender Art an: auto eth0 iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1Erläuterung: " auto eth0 " legt fest, dass das Device eth0 beim Systemstart mit den angegebenen Daten konfiguriert werden soll." iface eth0 inet static " spezifiziert eth0 als Device mit den folgenden statischen Konfigurationsdaten." address 192.168.0.2 " legt die zu verwendende IP-Adresse fest, hier eine Adresse in einem Klasse-C-LAN." netmask 255.255.255.0 " ist die zum Klasse-C-Netz gehörende Netzmaske (wichtig für das Routing und für Subnetze)." network 192.168.0.0 " zeigt die Zugehörigkeit zum Klasse-C-Netz." broadcast 192.168.0.255 " beschreibt die Adresse zum Broadcasten von Paketen im Netzwerk." gateway 192.168.0.1 " legt die Adresse des default-Gateways fest, über den Pakete in andere Netze geroutet werden sollen.Der Befehl " ifup eth0 " aktiviert nun die Netzwerkkarte mit der entsprechenden Konfiguration,
"ifdown eth0 " deaktiviert sie wieder. Einen Überblick über die derzeit aktivierten Netzwerkinterfaces liefert
ifconfig , welchem man ebenfalls Parameter übergeben kann, wodurch die Netzwerkkarte temporär konfiguriert
wird. Näheres hierzu erfährt man mit "man ifconfig ".../etc/conf/network -- Netzwerkkonfiguration unter "ROCK Linux" u.a.Ist das ifup/ifdown-Paket nicht installiert und somit auch keine /etc/network/interfaces vorhanden, so verfügt die eigene Linux-Distribution über einen anderen Mechanismus zum automatischen Laden von Netzwerkdaten. Wahrscheinlich ist dann die Konfiguration, wie sie auch bei ROCK Linux stattfindet: nämlich in der Datei /etc/conf/network. Diese definiert die beiden Shellfunktionen start_net() und stop_net(), welche vom /etc/init.d/network-Bootskript beim Booten bzw. Shutdown des Rechners aufgerufen werden. Anfangs hatte ich ein paar Probleme mit der netmask-Einstellung meines ROCK Linux, da die /etc/conf/network in etwa so aussah: DHCP="off" IF="eth0" IPADDR="192.168.0.2" GATEWAY="192.168.0.1" xx() { echo ">> $*" ; eval "$*" ; return $? ; } start_net() { if [ -f /etc/mactab ]; then xx nameif -c /etc/mactab fi if [ ".$DHCP" = ".on" ]; then xx /sbin/dhclient -q $IF else xx ip link set $IF up for addr in $IPADDR; do xx ip addr add $addr dev $IF done [ "$GATEWAY" ] && xx ip route add default via $GATEWAY fi return 0 } [...]Das Problem dabei ist, dass kein netmask-Eintrag vorhanden ist, was zu einer falschen Netzmaske (255.255.255.255) für dieses Klasse-C-Netz führt, womit kein Datenverkehr möglich ist... Die Lösung bestand in einer Um-Konfiguration der Datei, sodass sie wie folgt aussieht: # modifizierte "/etc/conf/network"-Datei mit gültigem netmask-Eintrag DHCP="off" IF="eth0" IPADDR="192.168.0.2" NETMASK="255.255.255.0" GATEWAY="192.168.0.1" # start and stop functions (called by /etc/init.d/network) xx() { echo ">> $*" ; eval "$*" ; } start_net() { if [ -f /etc/mactab ]; then xx nameif -c /etc/mactab fi if [ ".$DHCP" = ".on" ] ; then echo "starting dhclient." /sbin/dhclient -q $IF else echo "setting up network ..." xx ifconfig $IF $IPADDR netmask $NETMASK up xx route add default gw $GATEWAY dev $IF fi return 0 } stop_net() { if [ ".$DHCP" = ".on" ] ; then echo "stopping dhclient." killall -15 /sbin/dhclient ifconfig $IF down else echo "shutting down network ..." xx route del default gw $GATEWAY dev $IF xx ifconfig $IF down fi return 0 }Statt dem Befehl "ip" wird hier "ifconfig" aufgerufen, um die Netzwerkkonfiguration aufzusetzen. Ich finde, dies ist eine saubere und elegante Lösung des Problems, welche mir auch noch nie Sorgen bereitet hat. Wie man außerdem sieht, ist die Konfigurationsdatei sehr flexibel mit zusätzlichen Einträgen. So könnte man z.B. auch seine Firewall hiermit aufsetzen, was nur ein paar Zeilen mehr Code benötigen würde - Rum-Experimentieren macht hier richtig Laune :o) /etc/hostname -- Hostname einstellenDie Datei /etc/hostname enthält den Hostnamen des Rechners. Sie sollte von /etc/network/interfaces mit
der Option "hostname" modifiziert werden, man kann sie aber auch manuell oder mit einem Editor bzw. dem Kommando
"hostname" ändern./etc/hosts -- Host-Aliases festlegenIn der Datei /etc/hosts werden Host-Namen bekannter IP-Adressen im LAN vergeben. So muss man sich nicht die ganze Adresse, sondern nur noch einen Alias merken, wie es auch beim Betrieb über einen DNS-Server der Fall ist. Der prinzipielle Aufbau einer solchen Aliaszeile ist folgender: IP-Adresse voller Rechnername AbkürzungDer "volle Rechnername" sollte aus der vollständigen Bezeichnung des Rechners mit Domainname bestehen, bei der "Abkürzung" kann man eine gewünschte Kurzform des Rechnernamens eingeben. Z.B. würde die Zeile: 192.168.0.1 gateway.localdomain gwdem Rechner mit der IP-Adresse 192.168.0.1 den vollständigen Namen "gateway.localdomain.de" und die Abkürzung "gw" zuweisen, sodass man diesen fortan über diese beiden Aliase ansprechen kann. In der Datei sollte sich auch immer ein Alias für 127.0.0.1, also die Adresse des Loopback-Interfaces befinden, welcher dann "localhost" wäre... /etc/networks -- Netzwerknamen einstellenIn der /etc/networks werden Aliase für ganze Netzwerke festgelegt. Oft ist nur folgender Eintrag
vorhanden und auch ausreichend:
loopback 127.0.0.0 /etc/host.conf -- Rechnernamen auflösenIn dieser Datei findet man die Reihenfolge der Auflösung von Rechnernamen. Meist sind folgende Zeilen sinnvoll: order hosts,bind multi onHierbei wird die Reihenfolge der Auflösung so festgelegt, dass beim Zugriff auf einen anderen Rechner über seinen Namen zunächst die /etc/hosts nach passenden Einträgen durchsucht und dann mit der Abfrage über
einen in der Datei /etc/resolv.conf eingetragenen Nameserver begonnen wird. "multi on "
spezifiziert, dass ein Lookup des zu einer IP-Adresse gehörenden Rechnernamens alle Vorkommen dessen in der
hosts-Datei zurückgibt anstatt nur des ersten. Weitere Optionen lesen sie bitte in "man host.conf "
nach.../etc/resolv.conf -- Nameserver eintragenIn dieser Datei stehen die Nameserver, welche zum Auflösen von Rechnernamen verwendet werden sollen. Die gebräuchlichste Form ist wohl folgende: domain localdomain nameserver nameserver1 nameserver nameserver2 [...}" domain localdomain " spezifiziert den Namen der lokalen Domain. Der Eintrag hat zur Folge, dass die
lokale Domain automatisch angehängt wird, wenn nur ein Rechner ohne Domainname angegeben wurde. Mit der Option
"nameserver" können ein oder mehrere Nameserver eingestellt werden, die zum Auflösen von Rechnernamen verwendet
werden sollen. Besitzt man eine Einwahlverbindung zum Internet, so muss hier meist nichts eingetragen werden, da das
Dial-in-Programm dynamisch Einträge generiert, die es beim Verbindungsaufbau erhält. Sollte dies nicht der Fall sein,
so fügt man einfach einen Nameserver hinzu, dessen IP-Adresse man bei seinem Provider erfragt. Weitere Optionen sind
in "man resolv.conf " nachzulesen."/sbin/route" -- Routing einstellenSchlussendlich muss man noch einstellen, über welche Rechner/Interfaces Pakete geroutet werden sollen, um in andere Netzwerke zu gelangen. Dies ist besonders dann notwendig, wenn ein Rechner die Verbindung zum Internet herstellt und andere Rechner im LAN dann über diesen Internet-Zugriff erhalten sollen. Doch darauf soll hier nicht eingegangen werden. Der Linux-Kernel hält die Informationen, wie Pakete geroutet werden sollen, in der sogenannten "Routing Tabelle". Mit dem Befehl /sbin/route kann diese Tabelle ausgegeben werden. Per default sollte nur das
Loopback-Device erscheinen. Mit der Option "gateway" in der Datei /etc/network/interfaces kann man von ifup bei
Aktivierung des Netzwerkinterfaces auch gleich einen Standard-Gateway in die Routing-Tabelle eintragen lassen.
Um dies manuell zu tun, muss die folgende erste route-Kommandozeile ausgeführt werden:
bash$ route add default gw <ip-adresse oder rechnername> bash$ route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0Die zweite Zeile bestimmt eth0 als das Device, über welches Pakete in das Netzwerk 192.56.76.0 geroutet werden sollen. Die Netzmaske ist hier optional, da es die eines Klasse-C-Netzes ist, für Subnetze muss sie allerdings entsprechend modifiziert werden. Setzt man anstelle von "add" ein "del" in die Kommandozeile, so wird der entsprechende Eintrag aus der Routing-Tabelle gelöscht. Für erweiterte Optionen bezüglich des Routings ist " man route " sehr aufschlussreich.Nach obigen Einstellungen könnte die Kernel-Routing-Tabelle z.B. wie folgt aussehen: bash$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface loopback * 255.0.0.0 U 0 0 0 lo default 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 192.56.76.0 * 255.255.255.0 U 0 0 0 eth0 Finally...Somit wäre eigentlich alles Wesentliche gesagt, was man zur manuellen Konfiguration eines Netzwerkinterfaces sagen kann. Natürlich wurden Spezialfälle wie pcmcia und erweitertes Routing nicht behandelt, dieser Text sollte sich auch nur an Privatanwender richten, die mit ihren Desktop-PCs ein kleines Home-LAN aufbauen wollen. Ich hoffe, dass inhaltlich alles soweit in Ordnung geht, für weitere Fragen, Anregungen und Hinweise ist eine Mail an mich wie immer willkommen :o) (c) 2004 by RTC, www.linux-related.de
|