Wie ich am lokalen Datenverkehr teilhabe

Weil mir der Network-Manager vor langer Zeit einmal zu viel auf den Sack gegangen ist, bin ich auf WICD umgestiegen. Der machte mir dann aber aus verschiedenen Gründen auch nicht all zu lange Spaß. Etwa zu dieser Zeit flog mit dann zufällig ein kleines Shell-Script von 'grenouille' in die Hände, mit dem er seine diversen Netze direkt aus der Shell verwaltete.

Ich habe ein paar encfs Zeilen in das Script gehackt und es viele Jahre lang absolut zufrieden benutzt und gelegentlich ausgebaut. By popular demand ist es dann irgendwann in ein Git-Repo gewandert und veröffentlicht worden. Plötzlich benutzen Member das Script, die ich kaum bis garnicht kenne, und das finde ich super.


Das grobe Ganze

Am Laptop will man häufig das WLAN wechseln. Das soll schnell und komfortabel von statten gehen. Schnell und komfortabel heisst bei mir 'wpa_supplicant'. Alles Geläufige, was es da so drum herum gibt ist meiner persönlichen Ansicht nach... nicht ganz so überzeugend.

Der große Nachteil bei wpa_supplicant ist, dass für verschlüsselte WLANs eine Konfigurationsdatei mit dem Klartextpasswort fuer das jeweilige WLAN im Dateisystem hinterlegt werden muss. Die Dateien gehören zwar root, allerdings ist das kein großes Hindernis, wenn das Notebook mal geklaut werden sollte. Ich persönlich bin kein großer Freund davon ganze Partitionen oder gar die ganze HDD zu verschlüsseln - das schafft nur Komplexität an Stellen wo man keine haben will. Der Benefit sind zahlreiche verschlüsselte open-source Binaries und Libs, während das Betriebssystem unnötig ackern muss und ich am Ende nicht mehr booten kann, weil "Nein? Doch! Oh!".

Darum benutze ich seit Jahren encfs, um einzelne Verzeichnisse zu verschlüsseln, wo es Sinn ergibt - unter Anderem, um meine ganzen wpa_supplicant Konfigurationsdateien zu verschlüsseln. Um meine ganzen encfs Verzeichnisse besser verwalten zu können, habe ich einen kleinen Wrapper namens enconfig drum herum gehackt.

Und weil ich so verdammt faul bin, habe ich einen Bash-Alias fuer alle meine Netze, die die beiden Wrapper wrappen. :P


Einrichtung

Hier versuche ich mal eine kleine Anleitung zusammen zu stellen, um mein Setup nach zu bauen. Feedback und Verbesserungsvorschläge gerne per Mail.

enconfig

Zuerst installieren wir encfs, wpa_supplicant und enconfig. Wir brauchen den wpa_supplicant zwar noch nicht wirklich fuer enconfig, aber wir installieren ihn einfach gleich mal mit.

Als root:

aptitude install encfs wpa_supplicant
git clone git@github.com/baccenfutter/enconfig.git
ln -s $PWD/enconfig/enconfig /usr/local/bin/
ln -s /usr/local/bin/enconfig /usr/local/bin/encup
ln -s /usr/local/bin/enconfig /usr/local/bin/encdown
echo "/etc/wpa_wupplicant/.wpa /etc/wpa_supplicant/wpa" > ~/.privatedirs
encup 1

Dann erstellen wir eine erste wpa_supplicant.cfg:

ssid="access-point-ssid"  # hier die SSID des AP eintragen
encup 1
cat << EOF > /etc/wpa_supplicant/wpa/foo.conf
network={
    ssdid=$ssid
    key_mgmt=NONE
}
EOF
encdown 1

Fertig.

Net-Conf

Kommen wir zur Installation von Net-Conf.

Als root:

aptitude install python-ipaddr pip
pip install net-conf
ln -s /usr/lib/python2.7/site-packages/netconf/netconf.sh /usr/local/bin/netconf

Dann erstellen wir eine kleine Public-AP config:

netconf     # einmal durchlaufen lassen, damit das
            # Konfigurationsverzeichnis erstellt wird
cd ~/.config/net_conf
cp static-wifi-example foo.py
cd -

... und probieren sie auch gleich mal aus:

netconf foo

Runde Ecken

Jetzt einfach beliebig viel wpa_supplicant.cfgs nach /etc/wpa_supplicant/wpa/ legen und dann einen Bash-Alias für die Wichtigsten einrichten:

alias net_mywifi='encup 1 && netconf foo && encdown 1'
net_mywifi

Die meisten Orte, an denen ich mein Laptop aufklappe sind Orte, an denen ich mich häufiger aufhalten (e.g. zu Hause, auf der c-base, etc). Ich klappe mein Notebook auf und tippe 'net_cbase' und schwupps bin ich online.


# net_cbase 
Mounting /etc/wpa_supplicant/wpa
EncFS Password:

utils      killing all daemons...
utils      resetting all interfaces...
iface      ifup: wlan0
supplicant connecting: /etc/wpa_supplicant/wpa/c-base-crew.cfg
iface      ifup: wlan0
address    configuring: 10.0.x.xx/23 -> wlan0
gateway    routing via: 10.0.1.254
iface      ifup: wlan0
address    configuring: 2a02:f28:4::x:x:x:1/64 -> wlan0
gateway    routing via: 2a02:f28:4::1
resolver   resolving via: 10.0.1.254
Unmounting /etc/wpa_supplicant/wpa