Dynamische Netzwerkkonfiguration mit Ubuntu
Datum: 28. September 2006 - Kategorie Ubuntu/Debian
Das Problem und die Idee
Das Notebook wird in verschiedenen Netzwerkumgebungen genutzt, dabei WLAN mit WPA, WLAN
unverschlüsselt, (W)LAN ohne/mit DHCP.
Das System soll nun automatisch bei Einstecken eines LAN-Kabels oder bei Erkennung eines
WLAN-Netzes die Verbindung herstellen, wobei mit einiges Tests festgestellt wird, welche
Konfiguration benötigt wird.
Benötigte Software
Ubuntu (Debian natürlich auch) bietet alles, was man braucht:
- wpa_supplicant: Scannt als Daemon nach WLAN-Netzen, stellt die Verbindung her (und erledigt die Verschlüsselung).
- ifplugd: Reagiert auf Ereignisse (Kabel ein-/ausgesteckt bzw. WLAN-Verbindung vorhanden/weg)
- guessnet: Kann Tests auf Netzwerken durchführen, obwohl noch keine eigene IP vorhanden ist.
wpa_supplicant: Installation, Konfiguration
Das Paket wpa_supplicant wird normal installiert. Damit wpa_supplicant als Daemon gestartet wird, muss das Initskript /etc/init.d/wpasupplicant (falls nicht vorhanden) in die Runlevels eingetragen werden - ich habe den Rang 19 verwendet (vor ifplugd).
Zur Konfigurationsdatei /etc/wpa_supplicant.conf bzw. /etc/wpa_supplicant/wpa_supplicant.conf (je nach Distribution und Version) finden sich hier Informationen: ubuntuusers.de-Wiki. Mit wpa_cli kann man sehr gut testen, ob das Verbinden an sich funktioniert.
ifplugd: Installation
Einfach das gleichnamige Paket installieren. ifplugd registriert sogenannte Link beats, d.h. die Ereignisse für LAN-Kabel oder auch von WLAN-Netzen (von wpa_supplicant ausgelöst). ifplugd wird automatisch über ein Initskript gestartet.
guessnet: Installation
guessnet führt die Tests durch, um die benötigte Netzwerkkonfiguration festzustellen. Das Paket heißt ebenfalls guessnet.
resolvconf: Installation
Falls noch nicht installiert, benötigen wir resolvconf, damit wir DNS-Server bequem konfigurieren können.
Dynamische Netzwerkkonfiguration über /etc/network/interfaces
In der /etc/network/interfaces wird der normale "iface"-Eintrag durch "mapping" ersetzt und dafür
ein "script" angegeben - nämlich guessnet. Die "map"-Einträge sind Parameter für das Skript
(die möglichen Netze).
ifplugd sorgt dafür, dass bei Link beats guessnet aufgerufen wird. Guessnet führt parallel die Tests durch (test1, test2...).
Der erste erfolgreiche Test bestimmt, welche Konfiguration guessnet auswählt. Alle restlichen Angaben sind ganz normal.
Die Form der Tests sieht man am besten an folgendem Beispiel, die Manpage zu guessnet ist auch sehr hilfreich.
# The loopback network interface
auto lo
iface lo inet loopback
# Konfiguration für LAN, hier eth0
mapping eth0
script guessnet-ifupdown
map fritzlan
map statlan
iface fritzlan inet dhcp
test1 peer address 192.168.178.1 source 192.168.178.50
iface statlan inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1
test1 peer address 192.168.0.1 mac 00:00:00:00:00:00 source 192.168.0.10
# Konfiguration für WLAN, hier eth1
mapping eth1
script guessnet-ifupdown
map uni
map dsl
iface uni inet dhcp
test1 wireless essid uninetz
iface dsl inet static
address 192.168.178.50
netmask 255.255.255.0
gateway 192.168.178.1
dns-nameservers 192.168.178.1
test1 wireless essid wlan
Tipp: Dies ist nur eine Grundkonfiguration, man kann noch sehr viel anpassen: z.B. kann man dynamisch die Firewallregeln anpassen oder auch Proxyeinstellungen ändern lassen.
Alternativen
Eine sehr einfache und oft ausreichende Alternative ist Networkmanager. Es ist graphisch und unterstützt auch Link beats und WPA, allerdings keine statischen Netzwerkkonfigurationen.
Quellen
Eine sehr ausführliche Anleitung gibt es hier:
Howto: Netzwerkverbindung automatisch
konfigurieren unter Debian/Ubuntu.
Bei mir hat dies im Wesentlichen gleich funktioniert, nur einige Änderungen für Ubuntu waren nötig.