Ubuntu 12.04 Precise Pangolin
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Guessnet ist ein kleines Hilfsprogramm, dass in Kombination mit anderen Hilfsprogrammen wie ifplugd und wpa-supplicant die Konfiguration der Netzwerkschnittstellen übernimmt, wenn sich ein Rechner, z.B. ein Laptop, zwischen verschiedenen Netzen bewegt.
Vorteile gegenüber dem Network-Manager, der eine ähnliche Funktion erfüllt, sind u.a. die Möglichkeit auch statische IP-Adressen oder gar PPPoE-Verbindungen mit einzubeziehen und die nahtlose Integration in das Debian-Netzwerkmanagement, das auch von Ubuntu verwendet wird. Außerdem benötigt man keine grafische Oberfläche.
Folgende Pakete müssen auf jeden Fall installiert werden [1]:
guessnet (universe)
ifplugd (universe )
resolvconf (universe )
mit apturl
Paketliste zum Kopieren:
sudo apt-get install guessnet ifplugd resolvconf
sudo aptitude install guessnet ifplugd resolvconf
Als erstes muss ifplugd mitgeteilt werden, welche Schnittstellen überhaupt beobachtet werden sollen. Dazu trägt man in einem Editor[2] mit Root-Rechten diese in die Datei /etc/default/ifplugd ein :
INTERFACES="eth0"
Dann muss die Datei /etc/network/interfaces[3], das Herzstück der Netzwerkkonfiguration angepasst werden [4]. Das Loopback-Interface bleibt, wie es ist:
auto lo iface lo inet loopback
Nun kommt der neue Abschnitt, der die Kontrolle an Guessnet übergibt:
mapping eth0 script /usr/sbin/guessnet-ifupdown map timeout: 3 map default: unbekannt
Wenn Guessnet Schwierigkeiten bekommt, das Netz innerhalb von drei Sekunden zu erkennen, muss der Timeout-Wert entsprechend erhöht werden.
Nun kommen beliebig viele Netzwerkdefinitionen. Diese sehen im Großen und Ganzen genauso aus, wie bisher. Allerdings werden die Definitionsblöcke jetzt nicht mehr über den Namen der Schnittstelle (eth0
, etc.) unterschieden, sondern bekommen beliebige Namen. Außerdem bekommen sie Teststatements, über die Guessnet ermittelt, welche Beschreibung zur Anwendung kommen soll. auto
-Deklarationen sind überflüssig, da sich ifplugd um die Aktivierung der Schnittstelle(n) kümmert.
Hat man bspw. zu Hause feste IP-Adressen und eigene Nameserver, sieht der Abschnitt etwa so aus:
iface zuhause inet static address 192.168.1.6 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.1 192.168.1.2 dns-search home.lan test1 peer address 192.168.1.1 mac 12:34:56:78:90:AB source 192.168.1.6 test2 peer address 192.168.1.5 mac AB:CD:EF:AB:CD:EF
Hierbei überprüft Guessnet das Vorhandensein eines der Rechner 192.168.1.1 und 192.168.1.5 mit der jeweils angegebenen MAC-Adresse im lokalen Netz. Hat einer der Tests Erfolg, geht Guessnet davon aus, dass der Rechner gerade "zuhause" angeschlossen wurde, und weist über den Debian-/Ubuntu-ifupdown
-Mechanismus die angegebenen Netzwerkdaten zu. Die dns
-Optionen werden von den Programmen und Skripten des Pakets resolvconf verarbeitet, welche daraufhin die Namensauflösung entsprechend umkonfigurieren.
Die MAC-Adressen der anderen Rechner kann man sehr leicht mit dem Befehl arp -a
herausfinden. Evtl. muss man vorher noch ein wenig Datenverkehr zum gewünschten Gerät erzeugen, bspw. mit ping -c 1 RECHNER
.
Manche Geräte machen Probleme, wenn Guessnet seine Tests durchführt, ohne selber eine IP-Adresse zu besitzen. In diesem Fall kann man mit source ip
eine IP angeben, die für die Tests benutzt werden soll. Diese sollte natürlich am besten nicht in Gebrauch durch andere Rechner sein, um deren Netzverbindung nicht zu beeinträchtigen. Wenn man keine statische Adresse zur Verfügung hat, sollte man deshalb erst einmal die allgemeine Netzwerkadresse (meist mit '0' am Ende) verwenden.
Für den Fall, dass der Rechner gar nicht verbunden ist, sollte man eine "leere" Konfiguration verwenden, und außerdem fehlt noch die Standardeinstellung unbekannt
, falls alle Tests fehlschlagen:
iface keinnetz inet manual test missing-cable iface unbekannt inet dhcp
Um dieselbe Wirkung in einem drahtlosen Netzwerk zu erzielen, muss man leider komplett anders vorgehen, da ifplugd nicht mit verschlüsselten Netzen umgehen kann. Zum Glück stellt der wpa-supplicant eine ähnliche Funktionsweise namens "Roaming" bereit.
Hierzu muss man erst eine passende Datei /etc/wpa_supplicant/wpa_supplicant.conf erstellen, wo die Informationen über die bekannten WLAN-Netze hinterlegt werden - wie es im Artikel WLAN/wpa supplicant beschrieben ist. Zusätzlich kann man dort jedem einzelnen Netz ein Attribut id_str
zuweisen, womit dann später die verschiedenen Profile unterschieden werden, wie folgender Auszug zeigt:
network={ ssid="MeinWLAN" id_str="wlan-home" # sonstige Angaben, z.B. Schlüssel }
Nun muss ein entsprechender Block in der /etc/network/interfaces[5] erstellt bzw. umgeändert werden [4]. Im Gegensatz zur o.a. Kabelkonfiguration mit ifplugd braucht man dieses Mal zwingend ein auto
-Statement, damit das WPA-Roaming gleich beim Systemstart mitstartet:
auto eth1 iface eth1 inet manual wpa-driver wext wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf wpa-roam-default-iface unknown-wlan
Wichtig ist, dass der Typ der Schnittstelle auf manual
gesetzt wird, denn die Konfiguration wird nicht mehr direkt von ifupdown
erledigt, sondern vom wpa-supplicant und seinen Helferprogrammen. Als Treiber sollte der generische Treiber der Wireless Extensions, wext
, in den meisten Fällen funktionieren. Die wpa-roam
-Zeile gibt einerseits den Befehl überhaupt Roaming durchzuführen und gibt gleichzeitig die Konfigurationsdatei des wpa-supplicant an. wpa-roam-default-iface
gibt den Namen des Profils an, der bei Netzen ohne id_str
verwendet werden soll.
Die einzelnen Profile werden in benannten Abschnitten festgelegt, wie weiter oben erläutert. test
-Statements sind natürlich nicht nötig, da die Identifizierung über die SSID des WLANs stattfindet.
Wer die Flexibilität der Guessnet-Tests schätzt, (weil er bspw. oft in verschiedenen Netzen verkehrt, die alle "linksys" oder "Fritz!Box-Fon" heißen) der kann zusätzlich Guessnet über den wpa-supplicant ausführen. Hierfür sei auf die Informationen in der Datei /usr/share/doc/wpasupplicant/README.modes.gz verwiesen.
Leider gibt es keine einfache Möglichkeit Ubuntu herausfinden zu lassen, welche Default-Route verwendet werden soll, falls mehrere davon konfiguriert sind. Wer z.B. an einem verkabelten LAN angeschlossen ist, sich aber auch in Reichweite eines der konfigurierten WLANs befindet, sendet seinen Traffic nur über ein Interfaces, welches zufällig bestimmt wird. Das ist lästig, wenn dies dummerweise gerade das 10MBit-WLAN und nicht das 1GBit-LAN ist.
Um das zu verhindern, kann man sich entweder einen Routing-Daemon installieren (was nicht Thema dieses Artikels ist) oder man deaktiviert zur LAN-Benutzung die WLAN-Schnittstelle.
Sollte die automatische Erkennung nicht funktionieren, kann mittels folgendem Befehl eine Debug-Ausgabe zur Fehlersuche erzeugt werden.
guessnet -i --verbose --debug
Diese Revision wurde am 23. Mai 2015 12:48 von frustschieber erstellt.