This page (revision-3) was last changed on 15-Nov-2006 08:40 by MarkusMonderkamp 

This page was created on 03-Oct-2006 21:29 by UnknownAuthor

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
3 15-Nov-2006 08:40 8 KB MarkusMonderkamp to previous Paket-Link korrigiert
2 14-Nov-2006 09:59 8 KB MarkusMonderkamp to previous | to last für JSPWiki mit Thomas' und Peter's Filter
1 03-Oct-2006 21:29 8 KB UnknownAuthor to last

Page References

Incoming links Outgoing links

Version management

Difference between version and


= Autokonfiguration des Netzwerks für Laptops =

== Das Problem ==

Ich (ThomasBayen) setze meinen Laptop an unterschiedlichen Orten
ein. Wenn ich z.B. beim LUG-Treffen sitze, bringe ich das Gerät mit
und möchte mich dort gerne ins LUG-Netz einloggen. An sich kein
Problem: PCMCIA-Netzwerkkarte einstecken und loslegen... aber Halt!
So geht das leider nicht. Die Umgebung ist eine ganz andere, die
Netzwerkparameter unterscheiden sich, etc. Da die
Netzwerkkonfiguration immer auch Besonderheiten innerhalb der
Distributionen bietet, ist diese Anleitung hier sehr
Debian-spezifisch. Dennoch müssten die hier vorgestellten Ideen
grundsätzlich auch auf anderen Distris umsetzbar sein.

Die sicherlich eleganteste Lösung ist, wenn man in jedem Netz, in
dem man sich befindet, einen funktionierenden DHCP-Server hat. Dann
wird die gesamte Konfiguration automatisch erledigt. Leider sind
DHCP-Server nicht so verbreitet, wie es wünschenswert wäre, also
ist diese Lösung nicht praktikabel genug.

Darüberhinaus gibt es besonderen Konfigurations-Bedarf bei
WLAN-Netzen. Hier muss ggf. eine SSID und ein Schlüssel eingestellt
werden. Dies geht nicht automatisch (wo kämen wir da hin, wenn man
sich an einem verschlüsselten Netz automatisch anmelden könnte,
ohne vorherden Schlüssel zu kennen...?).

== Debian Woody ==

Die Interface-Parameter für die Karte (und einige andere
Netzwerk-Parameter) sind in ''/etc/pcmcia/network.opts''
festgelegt. Will ich also eine IP-Adresse im LUG-Netz bekommen,
muss ich diese Datei von Hand ändern. Bin ich wieder zu Hause, ist
eine erneute Änderung fällig.

=== Einfache Lösungen ===

Eine Lösung, die ich vorher praktiziert habe, besteht darin,
mehrere, jeweils richtig konfigurierte Dateien wie z.B.
''network.opts.lug'' und ''network.opts.home'' zu haben und diese
jeweils vor dem Einstöpseln der PCMCIA-Karte auf den richtigen
Platz zu kopieren.

Möglich wäre auch, die PCMCIA-Schemes zu benutzen. Dem Skript
''network.opts'' wird als erster Parameter ein Schema-Name
übergeben, nach dem verschiedene Konfigurationen ausgewählt werden
können. Der Schema-Name muss mit '''cardctl''' gesetzt werden.
Dabei bleibt allerdings die Frage, wer cardctl aufruft. Das Schema
muss nämlich schon gesetzt sein, bevor die Karte eingesteckt wird.

=== mögliche andere Lösungen ===

Dennoch wäre es schön, wenn der Laptop selber erkennen könnte, wo
er sich befindet. Bei genauerer Überlegung sollte es möglich sein,
das herauszufinden. Auf meiner Suche bin ich dabei über folgende
Debian-Pakete gestolpert, die sich mit dem Thema beschäftigen:

* divine - (Beschreibung bezieht sich auf PCMCIA)
* guessnet - (basiert auf laptop-netconf)
* intuitively - (Beschreibung bezieht sich auf PCMCIA, basiert lt.
manpage auf divine)
* laptop-net
* laptop-netconf
* whereami

Ich habe mich mit diesen Paketen etwas beschäftigt und habe meine
Erfahrungen auf
<<[LaptopNetzwerkAutokonfiguration/Pakete|LaptopNetzwerkAutokonfiguration.Pakete]LaptopNetzwerkAutokonfiguration/Pakete erfasst.

=== zu Bedenken ===

...ist, das PCMCIA-Netzwerkkarten, jederzeit ein- und ausgestöpselt
werden können. Die dynamische Konfiguration dieser Karten (in
''/etc/pcmcia/network.opts'') läuft völlig anders ab, als die
Konfiguration normaler, fest eingebauter Interfaces (über
''/etc/interfaces''). Wer also einen Laptop mit einem integrierten
Netzwerkanschluß hat, muss womöglich anders vorgehen. Unten sieht
man jedoch, wie man die Konfiguration auf das normale Debian-System
"umbiegen" kann.

=== Meine Lösung ===

Für mich war wichtig, so wenig wie möglich neue
Konfigurationsdateien und -formate einzuführen. Daher habe ich mich
entschieden, zuerst mal die übliche PCMCIA-Netzwerk-Konfiguration
auf das Verfahren für normale Devices, also die Datei
''/etc/network/interfaces'' umzustellen. Dort habe ich dann
'''guessnet''' benutzt, um die Standorterkennung zu machen. Auf
diese Art und Weise habe ich alle benötigten Einstellungen
übersichtlich in nur einer einzigen Datei. Diese Methode
funktioniert ohne Änderungen auch ohne PCMCIA, also z.B. bei einem
Laptop mit integrierter Netzwerkkarte.

Diese Lösung ist übrigens auch genau die, auf die die
Debian-Maintainer dann später auch gekommen sind, d.h. in späteren
Debian-Versionen (Sarge) ist das genau so geregelt.

==== einmalige Anpassung von ''/etc/pcmcia/network.opts'' ====

Die Datei bleibt fast vollständig im unkonfigurierten Zustand, d.h.
bootp, dhcp, etc. werden auf "n" gestellt und alle
Netzwerk-Parameter stehen auf "". Dann wird ganz unten folgendes
geändert:

 # Extra stuff to do after setting up the interface
 start_fn () { ifup $DEVICE; return; }
 # Extra stuff to do before shutting down the interface
 stop_fn () { ifdown $DEVICE; return; }

Durch diese Änderungen wird die normale PCMCIA-Konfiguration nicht
mehr aufgerufen, dafür aber die normalen ''ifup/ifdown''-Befehle.
Jetzt geschieht die Konfiguration wie unter Sarge.



== Erkennung von Netzwerken ohne DHCP unter Debian Sarge ==

=== Konfiguration von ''/etc/network/interfaces'' ===

 mapping eth0
       script /usr/bin/guessnet
       map 192.168.10.13 1:2:3:4:5:6 192.168.10.1 eth0-home
       map 192.168.11.13 7:8:9:0:1:2 192.168.11.1 eth0-lug

 iface eth0-home inet static
       address 192.168.10.13
       netmask 255.255.255.0
       broadcast 192.168.10.255
       gateway 192.168.10.1
       up echo -e "nameserver 192.168.10.1\ndomain bayen.loc"
>/etc/resolv.conf
       down rm /etc/resolv.conf

 iface eth0-lug inet static
       address 192.168.11.13
       netmask 255.255.255.0
       broadcast 192.168.11.255
       gateway 192.168.11.1
       up echo -e "nameserver 192.168.11.1\ndomain lug.loc"
>/etc/resolv.conf
       down rm /etc/resolv.conf

 iface eth0-none inet dhcp

Wie man sieht, befinden sich sowohl alle Netzwerk-Parameter der
verschiedenen Standorte (inklusive Nameserver) als auch die
Informationen zur Standorterkennung (MAC-Adresse) übersichtlich in
nur einer einzigen Datei. Voila! -- ThomasBayen

== Erkennung von WLAN-Zellen ==

Während ich oben mit "guessnet" arbeite, um die Netze zu erkennen,
gibt es kein vergleichbares Programm, um Access Points zu erkennen.
Also habe ich eines geschrieben:

==== /etc/network/detect-ap ====
<pre><nowiki>
 #!/usr/bin/perl
 # Access Point Erkennung von Thomas Bayen
 open STDIN, '-';
 $erg='wlan';
 while(<STDIN>){
   chomp;
   # macht man die Abfrage zweimal hintereinander, werden die
Ergebnisse besser:
   system "( iwlist $ARGV[0] scan; sleep 1; ) >>/dev/null";
   open CELLS, "iwlist $ARGV[0] scan | grep ESSID |";
   $mapping=$_;
   @erg= grep $_, map {/ESSID:"($mapping)"/ ? $1 : undef}
<CELLS>;
   $erg .= "-$erg[0]" if @erg;
 }
 system "logger 'known wireless cell detected: $erg'";
 print $erg;
</nowiki></pre>

Jetzt muss dieses Skript noch ausführbar gemacht werden und kann
dann aus '''/etc/network/interfaces''' aufgerufen werden:

 chmod a+x /etc/network/detect-ap

==== Auszug aus '''/etc/network/interfaces''' ====

 # WLAN-Erkennung von Access Points:
 mapping eth1
       script /etc/network/detect-ap
       map homeLAN
       map LUG

 # Einstellungen für zu Hause:
 iface wlan-homeLAN inet dhcp
       WIRELESS_ESSID homeLAN
       WIRELESS_KEY 1234-5678-90

 # Einstellungen, wenn ich in der LUG bin:
 iface wlan-LUG inet dhcp
       WIRELESS_ESSID LUG
       WIRELESS_KEY 1234-5678-9012-3456-7890-1234-56
       # hier kann ich z.B. ein VPN zu mir nach Hause aufbauen:
       up /etc/init.d/openvpn start
       down /etc/init.d/openvpn stop

 # Standard-Einstellung: Finde ich nichts, gibts vielleicht ein
unverschlüsseltes WLAN:
 iface wlan inet dhcp

Als Name des Netzwerkes bei ''map ...'' und bei ''iface wlan-...''
dient die ESSID des Netzes. Wer übrigens seine ESSID versteckt (was
ja aus Sicherheitsgründen immer empfohlen wird), kann dieses Skript
nicht benutzen. Wer sein WLAN versteckt, braucht sich nämlich nicht
zu wundern, wenn man es dann nicht finden kann... -- ThomasBayen

== Kabelstöpseln ==

Alles oben gesagte geht davon aus, daß wir irgendein Netzwerk haben
und dann herausfinden wollen, welches das denn nun ist. Alle diese
schönen Programme laufen aber nur, wenn sie gestartet werden, d.h.
normalerweise beim hochfahren des Rechners. Falls dann jedoch kein
Netzwerkkabel eingestöpselt ist, passiert erstmal nichts. Hier
hilft '''ifplugd'''. Dieser beobachtet ein Interface und sobald ein
Netzwerkkabel ein- oder ausgestöpselt wird (was fast alle modernen
Netzwerkkarten merken), startet es ''ifup/ifdown''. Dieses einfache
und praktische Tool kann man einfach mit

 aptitude install ifplugd

installieren und fertig! :-)