Netzwerk Konfiguration

Linux ist ein Netzwerkbetriebssystem. Damit Linux jedoch in einem Netzwerk teilnehmen kann, muß es wissen welche Netzwerkkonfiguration es verwenden soll. Die Befehle für die Netzwerkkonfiguration sind auf allen Linuxdistributionen gleich. Allerdings überlebt eine solche Konfiguration keinen Neustart. Wie man eine Netzwerkkonfiguration so abspeichern kann, daß diese bei jedem booten geladen und angewendet wird, ist jedoch Distributionsspezifisch. Ich werde hier sowohl die generellen Linuxbefehle zur Netzwerkkonfiguration erläutern, als auch wie man seine Netzwerkkonfiguration auf einigen ausgewählten Linuxdistributionen dauerhaft speichern kann.

Ein Netzwerkinterface konfigurieren

Netzwerkinterfaces heißen unter Linux eth. Das erste Netzwerkinterface heißt eth0, das zweite eth1 usw. Im Gegensatz zu anderen Hardwaregeräten werden Netzwerkinterfaces nicht als Gerätedateien unter /dev angelegt. Netzwerkkarten sind also eine Ausnahme von der Unixregel, "alles ist eine Datei".

Der Befehl um eine Netzwerkkarte zu konfigurieren lautet ifconfig. Gibt man einfach nur ifconfig als Befehl ohne weitere Parameter an, werden alle aktiven Netzwerkinterfaces des Systems aufgelistet. Die Ausgabe kann z. B. so aussehen:

eth0      Link encap:Ethernet HWaddr 00:1b:b9:b9:d6:c0
          inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0
          inet6 addr: fe80::21b:b9ff:feb9:d6c0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:12717196 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10458037 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:11576490352 (10.7 GiB) TX bytes:9508753657 (8.8 GiB)
          Interrupt:19 Base address:0xdead
lo        Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING MTU:16436 Metric:1
          RX packets:137584 errors:0 dropped:0 overruns:0 frame:0
          TX packets:137584 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:22549698 (21.5 MiB) TX bytes:22549698 (21.5 MiB)

In der vorderen Spalte findet man jeweils den Namen für das Netzwerkinterface für welches die nachfolgenden Informationen gelten. In diesem Beispiel sieht man eth0 (also die erste Netzwerkkarte des Systems) und lo. lo steht für das Loopback-Interface. Das ist die virtuelle Netzwerkkarte die für lokale Verbindungen auf die IP-Adresse 127.0.0.1 verwendet wird. lo wird von allen Linux-Distributionen automatisch konfiguriert, so das man sich im Normalfall nicht weiter darum kümmern muß.

Die jeweils eingerückten Zeilen gehören zu dem davor stehenden Netzwerkinterface. In der ersten Zeile sieht man den Typ des Netzwerkinterfaces (im Sinne des ISO-OSI Layer 2), also meistens Ethernet, sowie die Hadrware-Adresse, also die MAC-Adresse der Netzwerkkarte. In der zweiten Zeile findet sich die IPv4 Konfiguration der Netzwerkkarte, also die IPv4 Adresse, die Netzwerkmaske und die Broadcastadresse. In der dritten Zeile findet sich die IPv6 Adresse der Netzwerkkarte.

In der vierten Zeile kommen Flags die auf der Netzwerkkarte gesetzt sind, wie etwa UP, welches markiert das die Netzwerkkarte aktiv ist, oder auch spezielle Flags wie PROMISC, für den promiscous mode einer Netzwerkkarte. Außerdem wird hier auch die MTU angezeigt. Die MTU ist die maximum transmission unit, also die Zahl die bestimmt wieviele Byte als einzelnes Paket maximal zuläßig sind.

Die letzten paar Zeilen sind statistische Zähler. RX steht dabei für received, also empfangen und TX für transferred, also versendet. RX packets, gibt also die Anzahl aller empfangenen Pakete an und TX bytes gibt die Anzahl aller versendeten Bytes an.

Die meisten dieser Parameter sind auch durch den Befehl ifconfig veränderbar (die statistischen Werte natürlich nicht). Mit ifconfig kann ich also nicht nur die IP-Adresse einer Netzwerkkarte setzen, sondern auch Flags setzen oder die MAC-Adresse überschreiben. Das überschreiben der MAC-Adresse findet dabei natürlich nur softwareseitig statt. Auf der Hardware selbst behält die Netzwerkkarte ihre firmenseitig vergeben MAC-Adresse immer bei.

ifconfig eth0 up

Mit diesem Befehl wird die Netzwerkkarte eth0 aktiviert.

ifconfig eth0 down

Mit diesem Befehl wird die Netzwerkkarte eth0 deaktiviert. Eine deaktivierte Netzwerkkarte taucht in der Auflistung des Befehls ifconfig gar nicht erst auf.

ifconfig eth0 192.168.0.25 netmask 255.255.255.0

Dieser Befehl weist der Schnittstelle eth0 die IP-Adresse 192.168.0.25 und die Netzwerkmaske 255.255.255.0 zu. Wird die Angabe der Netzwerkmaske weggelassen, wird automatisch eine Netzwerkklasse entsprechend der Regeln des Classbased Routings zugewiesen. Da die IP 192.168.0.25 ohnehin eine IP in einem Klasse C Netzwerk (entspricht der Netzwerkmaske 255.255.255.0) wäre, kann man also in diesem Beispiel die Netzwerkklasse auch weglassen und erhält die gleiche Konfiguration.

ifconfig eth0 hw ether 00:1b:b9:b9:d6:c8

Mit diesem Kommando setzt man die MAC Adresse von eth0 auf den angegebenen Wert.

ifconfig eth0 promisc

Dies aktiviert den promiscous mode der Netzwerkkarte eth0. Der promiscous mode wird beispielsweise von vielen Netzwerksnifferprogrammen benötigt. Netzwerksniffer setzen diesen Modus jedoch meist automatisch beim starten.

ifconfig eth0 -promisc

Dies deaktiviert den promiscous mode wieder.

Alle weiteren Optionen von ifconfig kann man am besten in dessen Manpage nachlesen.

DNS und Routing

Für ein funktionierendes Netzwerk benötigt man nicht nur eine IP-Adresse, sondern auch Routing und Namensauflösung. Diese Eigenschaften sind nicht Netzwerkkartenspezifisch und werden daher auch nicht mit ifconfig konfiguriert. Für das Routing gibt es einen eigenen Befehl: route.

Gebe ich nur das Kommando route ohne Argumente ein, erhalte ich die momentane Routingtabelle ausgegeben. Jede Zeile bildet dabei einen Routingeintrag. Soll ein Netzwerkpaket übertragen werden sieht der Kernel in der Routingtabelle nach und geht dabei so lange die Einträge vom ersten bis zum letzten durch bis ein Eintrag auf das Ziel des Netzwerkpaketes paßt. Der erste passende Eintrag wird verwendet. Sollten mehrere Einträge passen, ist also auch die Reihenfolge der Einträge wichtig. Die letzte Route sollte immer eine Default-Route sein, die auf alle Pakete paßt.

Für das lokale Subnetz erstellt der Kernel im allgemeinen bereits beim konfigurieren des Interfaces mit ifconfig automatisch einen entsprechenden Routingeintrag. Sollte man nicht noch zusätzliche spezielle Routen in einzelne Subnetze benötigen, braucht man dann nur noch das Default Gateway konfigurieren, also die Adresse an die alle Pakete die nicht ins lokale Netz gehen sollen, geschickt werden.

route add default gw 192.168.0.1

Dieser Befehl setzt als Adresse des Default Gateways 192.168.0.1. Die Syntax von route erfordert als Option die Operation die man durchführen möchte, also z. B. add für hinzufügen einer Route oder del für entfernen einer Route und danach die Zielnetzwerkadresse, bzw. wenn man für das Default Gateway alle Adressen angeben möchte kann man einfach den Begriff "default" verwenden. Danach wird mit "gw" die Adresse des Gateways selbst angegeben.

route del default

Dieser Befehl löscht die Default Route wieder. Beim löschen einer Route ist also nur das Zielnetz als Angabe ausreichend.

Per default versucht der Befehl route auch eine Namensauflösung durchzuführen. Möchte man dies verhindern (manchmal kommt es dabei zu Verzögerungen) kann man für route den zusätzlichen Parameter -n verwenden.

Für die Namensauflösung muß man dem System bekannt geben, welche DNS-Server es benutzen soll. Die zu verwendenden DNS-Server werden in der Datei /etc/resolv.conf festgelegt. In dieser Datei ist jede Zeile eine Konfigurationsanweisung. Die IP eines Nameservers wird dabei mit der Anweisung "nameserver" angegeben. Mehrere Nameserver kommen jeweils in getrennte Zeilen, dabei sind bis zu 3 Nameserveradressen möglich. Zusätzlich können auch noch weitere Optionen für die Namensauflösung angegeben werden, wie etwa ein Suchpfad. Der Suchpfad ist ein Suffix, der jedem Namen angehängt wird der kein vollständiger sogenannter FQDN (=fully qualified domain name) ist. Gebe ich also statt host.domain, nur host an, wird der Wert des Suchpfades als Suffix an host angehängt. Ein Suchpfad wird mit dem Parameter "search" angegeben. Eine beispielhafte /etc/resolv.conf:

search meinefirma
nameserver 192.168.0.20
nameserver 192.168.0.1

In diesem Beispiel werden die beiden DNS 192.168.0.1 und 192.168.0.20 konfiguriert und als Suchpfad die Domäne meinefirma benutzt.

Außer einem DNS-Server läßt sich für die Namensauflösung auch eine statische Konfiguration verwenden. Diese Aufgabe hat die Datei /etc/hosts. In diese Datei kann man pro Host eine Zeile schreiben, bei der in der ersten Spalte eine IP-Adresse steht und in der zweiten Spalte, getrennt durch Leerzeichen oder Tabulator ein Hostname. Da das pflegen einer /etc/hosts Datei (auf allen beteiligten Rechnern!) in einem Netzwerk ab einer gewissen Größe zu aufwendig wird, wird man meistens eher einen oder mehrere DNS-Server zur Namensauflösung verwenden.

Die Reihenfolge in der welcher Mechanismus zur Namensauflösung verwendet wird, wird in der Datei /etc/nsswitch.conf festgelegt. Diese Datei legt nicht nur die Quelle für Namensauflösung in Bezug auf Hosts im Netzwerk fest, sondern auch andere Informationsquellen, wie etwa Benutzerinformationen und Gruppeninformationen. In der /etc/nsswitch.conf gibt es eine Zeile die mit "hosts:" beginnt. In diese Zeile kann eingetragen werden wodurch und in welcher Reihenfolge Netzwerknamen aufgelöst werden.

hosts: files dns

Diese Zeile in der /etc/nsswitch.conf besagt z. B. das die Namensauflösung zuerst durch die Datei /etc/hosts versucht werden soll und wenn dies ergebnislos bleibt, die konfigurierten DNS-Server befragt werden sollen.

DHCP

Mit Befehlen wie ifconfig Kann ich eine statische Netzwerkkonfiguration erreichen. Was aber wenn ich die Aufgabe der Netzwerkkonfiguration komplett durch einen DHCP-Server erledigen lassen will? Natürlich kann ich auch das erreichen. Unter Linux gibt es 2 verschiedene weit verbreitete DHCP-Clientprogramme. Das eine heißt dhclient und das andere dhcpcd. Der Aufruf ist bei beiden Programmen einfach:

dhclient eth0

dhcpcd eth0

Im ersten Fall wird wird die Netzwerkschnittstelle eth0 über dhclient mit DHCP konfiguriert, und im zweiten Fall mit dhcpcd. Man muß bei beiden Programmen also im einfachsten Fall nur die Netzwerkschnittstelle die eine IP bekommen soll, angeben. Sofern es der DHCP-Server anbietet, wird dabei nicht nur die IP Adresse der Schnittstelle gesetzt, sondern auch das Default Gateway und es werden auch die zuständigen Nameserver in die Datei /etc/resolv.conf geschrieben. Weitere Optionen zu beiden Programmen kann man in deren Manpages nachlesen.

Wlan

In Wlans gibt es einige zusätzliche Parameter zu konfigurieren, außer denen, die man mit ifconfig einstellen kann. Daher gibt es einige wlanspezifische Kommandos, vor allem iwconfig.

iwconfig eth1 essid mywlan

Mit diesem Befehl wird der Wlankarte eth1 gesagt, das sie zum Wlan mit dem Namen mywlan gehört. Die ESSID ist der Netzwerkname eines Wlans, mit dem ein zusammengehöriges Netz von anderen unterschieden wird. Manche Wlankarten haben unter Linux auch schon mal Bezeichnungen die vom ethX Namensschema abweichen wie etwa wlan0.

iwconfig wlan0 mode Ad-Hoc

Mit diesem Befehl wird die Wlankarte wlan0 in den Ad-Hoc Modus versetzt. Wlankarten können sich im Managed Modus oder im Ad-Hoc Modus oder im Master Modus (oder im Monitor Modus, der in etwa dem Promiscous Modus normaler Netzwerkkarten entspricht) befinden. Im Managed Modus, ist der Rechner Mitglied in einem durch einen Accesspoint kontrollierten Wlan, während im Ad-Hoc Modus eine Direktverbindung zu einer anderen Wlankarte aufgebaut wird. Der Master Modus macht die Wlankarte selber zum Accesspoint. Nicht alle Modi werden von allen Treibern und Karten unterstützt, zumindest der Managed Modus ist aber immer möglich.

iwconfig eth1 channel 3

Mit diesem Befehl wird die Wlankarte eth1 auf den Funkkanal 3 festgelegt. Normalerweise ist eine solche Kanalfestlegung nicht nötig, da der Kanal automatisch ausgewählt wird. Sollte es aber mal zu Störungen durch viele Nachbarwlans kommen, die den selben Kanal benutzen, kann man auf einen anderen Kanal ausweichen.

iwconfig eth1 key s:geheim

Mit diesem Befehl wird der WEP Schlüssel den die Wlankarte verwendet auf "geheim" gestellt. Mit:

iwconfig eth1 key off

wird die Verschlüsselung wieder abgestellt. WEP-Verschlüsselung ist allerdings bekanntermassen knackbar und unsicher. Zur Absicherung eines Wlans sollte daher entweder das sicherere WPA verwendet werden oder man konfiguriert ein VPN oder benutzt andere Methoden der Authentifizierung und/oder Verschlüsselung je nach Sicherheitsanforderungen an das Wlan.

Die Möglichkeit zur WPA Verschlüsselung (die unter Linux nicht für alle Netzwerkkarten unterstützt wird) bietet das Programm wpa_supplicant. Näheres hierzu kann man in der Manpage zu wpa_supplicant lesen.

Um auch feststellen zu können welche Wlans überhaupt in meiner Reichweite sind kann ich den Befehl iwlist verwenden:

iwlist eth1 scan

Dieser Befehl liefert eine Auflistung sämtlicher in Reichweite befindlicher Wlans der Umgebung, mit Ihrer ESSID, der Sendestärke und noch weiteren Angaben.

Möchte man sich mit seiner Wlankarte mal temporär in ein öffentliches Netzwerk einloggen, genügen, da öffentliche Wlans im allgemeinen nicht verschlüsselt sind, Befehle wie die folgenden:

ifconfig eth1 up
iwconfig eth1 essid publicnet
dhclient eth1

Der erste Befehl aktiviert die Netzwerkkarte eth1. Der zweite Befehl konfiguriert die Zugehörigkeit zum Netz mit der ESSID publicnet und der dritte Befehl holt sich per DHCP eine Netzwerkkonfiguration.

Dauerhafte Konfiguration

Mit Ausnahme der DNS-Konfiguration, die in eine Datei geschrieben wurde, sind alle bisherigen Konfigurationen insofern nur temporär, als das diese bei einem Neustart verloren gehen. Natürlich bringen aber alle Linuxdistributionen auch Konfigurationsdateien mit, in denen sich dauerhafte Einstellungen machen lassen. Diese sind allerdings je nach Linuxdistribution verschieden. Hinzu kommt, das immer mehr Linuxdistributionen grafische Tools anbieten mit denen sich "auf die Schnelle" auch mehrere Netzwerkkonfigurationen z. B. für wechselnde Arbeitsumgebungen bei einem mobilen Notebook erstellen lassen. Derartige Programme überschreiben unter Umständen eine anderweitig angegebene Konfiguration.

Debian/Ubuntu

Bei Debian und Ubuntu gibt es für die dauerhafte Netzwerkkonfiguration Konfigurationsdateien im Verzeichnis /etc/network. Die für die Netzwerkkartenkonfiguration wichtige Datei darin ist /etc/network/interfaces. In dieser Datei wird jedes zu konfigurierende Netzwerkinterface aufgeführt:

auto lo
iface lo inet loopback

In diesem Beispiel, das so bereits vorkonfiguriert sein sollte, wird die Loopback-Schnittstelle beim hochfahren automatisch gestartet. Die erste Zeile besagt mit auto, daß die benannte Schnittstelle beim booten automatisch aktiviert werden soll. Möglich wäre statt auto auch allow-hotplug, für Netzwerkschnittstellen die im laufenden Betrieb entfernt werden können (z. B. PC-Cards an Notebooks).

Die Zeile die mit iface beginnt definiert die weiteren Parameter für die Schnittstelle. Hier ein etwas ausführlicheres Beispiel:

auto eth0
iface eth0 inet static
        address 192.168.0.112
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1

In diesem Beispiel wird die Netzwerkschnittstelle eth0 automatisch beim booten gestartet und mit einer Konfiguration mit statischer IP-Adresse versehen. inet meint dabei eine IPv4 Konfiguration (IPv6 würde inet6 verwenden), static steht eben für eine statische Konfiguration (also kein DHCP). Eingerückt darunter wird die statische Konfiguration angegeben, also IP Adresse, Netzwerkmaske, Netzwerkadresse, Broadcast-Adresse und das Standardgateway. Die DNS Konfiguration könnte auch mit aufgenommen werden, ist aber ohnehin bereits in der Datei /etc/resolv.conf zu finden.

Eine Konfiguration mit DHCP würde so aussehen:

auto eth0
iface eth0 inet dhcp

Weitere Informationen zu den zusätzlichen Möglichkeiten der /etc/network/interfaces findet man in der Manpage interfaces auf Debian/Ubuntu Systemen.

Suse

Unter Suse wird als primäres Konfigurationswerkzeug auch für die Netzwerkkonfiguration Yast verwendet. Yast gibt es als grafische Anwendung, aber genauso auch, falls es sich um einen Server ohne grafische Oberfläche handelt, als Kommandozeilenprogramm. Ruft man in der Shell einfach den Befehl yast auf, startet sich das ncurses Frontend von Yast (ncurses simuliert pseudografische Elemente auf der Kommandozeile). Die Bedienung sollte für jeden der mit den Netzwerkbegriffen vertraut ist, intuitiv möglich sein. Das entsprechende Yast-Modul für die Netzwerkkonfiguration findet sich unter: "Network Devices" -> "Network Settings".

Die eigentlichen Dateien in denen sich die Netzwerkkonfiguration befindet, liegen unter /etc/sysconfig/network. Die Dateien in diesem Verzeichnis sind ausführlich kommentiert und können auch von Hand editiert werden. Yast macht letztendlich nichts anderes, als diese Dateien zu editieren und das Netzwerk anschließend neu zu starten. Allerdings sollte man sich dann für eine von beiden Methoden entscheiden: Entweder Yast zu benutzen, oder die Dateien von Hand zu editieren.

Netzwerkanalyse

Außer der Konfiguration des Netzwerks braucht man manchmal auch noch Tools zur Analyse des Netzwerkverkehrs. Mit netstat kann man sich Netzwerkverbindungen ansehen:

netstat -antu

Mit diesem Befehl läßt man sich alle TCP- und UDP-Verbindungen anzeigen, inklusive der lauschenden Ports ohne aktive Verbindung. Dabei steht der Parameter -a für die Anzeige auch von geöffneten Ports ohne aktive Verbindung, der Parameter -n steht dafür Netzwerkadressen nicht per DNS in Namen aufzulösen, der Parameter -t steht für TCP-Verbindungen und der Parameter -u für UDP-Verbindungen.

netstat kennt viele weitere Parameter, wie etwa -l für die Anzeige nur der offenen Ports oder -A für Adressfamilien, wobei mit Adressfamilien so etwas wie inet für IPv4 oder inet6 für IPv6 gemeint ist. Interessant ist auch der Parameter -p um sich anzeigen zu lassen welches Programm oder welcher Prozess eine bestimmte Verbindung aufgebaut hat. Alle Parameter kann man in der Manpage zu netstat nachlesen.

Selbstverständlich gibt es unter Linux auch noch weitere Tools zur tieferen Netzwerkanalyse, wie etwa tcpdump und wireshark zum aufzeichnen und analysieren der Pakete oder nmap als Portscanner.


René Maroufi, dozent (at) maruweb.de
Creative Commons By ND