WPA Substitute
Inhaltsverzeichnis
WPA-Ersatz für Fritzbox und Konsorten
Funktioniert im Moment nur für einen Client! TODO: Umstellung auf TAP-Device für bis zu 253 Client XD
Wir ersetzen die WPA-Verschlüsselung durch OpenVPN um die Anwendung älterer Hardware zu ermöglichen, die kein WPA unterstützt. Viele Anregungen zu dieser Anleitung entstammen diesen Seiten, dort gibt es viele Details nachzulesen!
Ein Nachteil sei nicht verschwiegen: die CPU in der Fritzbox ist zu schwach um den vollen WLAN-Durchsatz durch den VPN-Tunnel zu erreichen. Bei mir brachte sie ca. 350kByte/sec beim Kopieren großer Dateien- der Download eines DSL2000 ist ca. 230kByte/sec- man wird also bei höheren Bandbreiten ab 6000 ausgebremst!
Dies alles bezieht sich auf eine Fritzbox 7170 mit der Firmware-Version 29.04.57. Auf baugleichen Modellen und z.B. OpenWRT-Installationen sollte das ähnlich funktionieren- wer hier etwas entwickelt, bitte ruhig hinzufügen!
ACHTUNG! Wir sind nicht schuld daran, wenn die Fritzbox danach nicht mehr funktioniert oder ihr nicht mehr ins Internet kommt! Daher nicht wild auf der Box herumpfuschen und immer einen Backup der Konfiguration und ein sog. Rettungsimage bei der Hand haben!
Server auf der Fritzbox
Im Webinterface LAN und WLAN trennen: Erweiterte Einstellungen-> System -> Netzwerkeinstellungen -> Knopf "IP-Adressen" -> Alle Computer befinden sich im selben IP-Netzwerk
Den Haken wegnehmen, für WLAN anderes Subnetz vergeben, wir verwenden hier 192.168.182.1, 255.255.255.0, DHCP-Server muss anbleiben:
Zuerst müssen wir einen statischen Openvpn key erzeugen, indem wir auf unserer Desktopmaschine folgendes eintippen:
openvpn --genkey --secret /tmp/secret.key
Da wir auf der Fritzbox keinen Platz auf dem Flash ROM haben, müssen wir das Openvpn Binary bei jedem Start neu herunterladen und die Konfigs neu anlegen. Dazu editieren wir die Datei /var/flash/debug.cfg wie folgt. Man muss jedoch beachten, dass die Fritzbox komische Dinge wenn man direkt im Flash editiert. Dies umgeht man indem man die Datei debug.cfg vorher nach /var/tmp kopiert ( falls sie schon existiert ), dort editiert und mit `cp /var/tmp/debug.cfg /var/flash/debug.cfg' wieder zurück kopiert.
Der Inhalt der Datei ist dann wie folgt, wobei jedoch der OpenVPN Key durch den Inhalt der vorher erzeugten Key Datei ersetzt werden muss (/tmp/secret.key):
#!/bin/sh i=0 while !(ping -c 1 www.dokucode.de); do i=$(( $i + 1)) if [ $i -gt 5 ]; then exit fi sleep 5 done cd /var/tmp if [ ! -e openvpn ]; then wget http://www.dokucode.de/files/openvpn fi chmod a+x openvpn cat > secret.key <<EOFKEY # # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -----END OpenVPN Static key V1----- EOFKEY cat > /var/tmp/server.ovpn << 'END-SERVER-OVPN' # dev tun0 dev-node /var/tmp/tun ifconfig 192.168.200.2 192.168.200.1 tun-mtu 1500 float mssfix #Pfad zum Key File secret /var/tmp/secret.key #Protokoll auf TCP und Port 1194 proto udp port 1194 #Protokollierung auf 4 verb 4 #Routen setzen, bei route Subnetz des Clients eintragen route 192.168.87.0 255.255.255.0 #Verbindung erhalten ping 15 ping-restart 120 END-SERVER-OVPN # tun device erzeugen mknod /var/tmp/tun c 10 200 # forwarding auf dem wlan interface abschalten echo 0 > /proc/sys/net/ipv4/conf/wlan/forwarding ./openvpn --config ./server.ovpn & exit 0
Jetzt die Fritzbox einmal rebooten, eine Kerze anzünden und hoffentlich freuen.
Wenn es funktioniert hat sieht man einen Openvpn Prozess, wenn man `ps w' aufruft:
# ps w | grep openvpn 959 root 792 S ./openvpn --config ./server.ovpn 379 root 272 S grep openvpn
Das Ganze ist natürlich nach jedem Firmware-Update zu wiederholen! Unbedingt auch daran denken, dass dann vermutlich das WLAN auch wieder offen und das Forwarding auf das LAN/WAN wieder hergestellt ist!!! %)
Openvpn Client Linux
Nachdem wir Openvpn installiert haben, legen wir eine Datei /etc/openvpn/wlan.ovpn mit folgendem Inhalt an:
dev tun tun-mtu 1500 mssfix proto udp remote 192.168.182.1 1194 secret /etc/openvpn/wlan.key nobind persist-key persist-tun verb 4 up /etc/openvpn/wlan.up
Hierbei ist zu beachten, dass 192.168.182.1 die Ip Adresse der Fritzbox im Wlan ist. Die Datei /etc/openvpn/wlan.up sieht wie folgt aus:
#!/bin/sh INTERFACE=$1; shift ifconfig $INTERFACE 192.168.87.1 ip route add 192.168.1.0/24 dev $INTERFACE ip route del default ip route add default dev $INTERFACE exit 0;
Diese Datei muss man mit `chmod a+x /etc/openvpn/wlan.up' unbedingt ausführbar machen. Zu beachten ist hierbei, dass 192.168.87.1 die zukünftige Ip Adresse des Clients sein wird. Sie muss aus dem Bereich 192.168.87.0/24 stammen. D.h. aus dem "normalen" LAN erreicht man den Client jetzt unter dieser IP-Adresse. Das hat einen schönen Nebeneffekt: der Client erhält unabhängig vom DHCP-Lease immer dieselbe IP, die man nun in die /etc/hosts eintragen kann. Leider hat die Fritzbox im Gegensatz zu jedem Billigrouter bis heute keine Möglichkeit, schmerzlos für einen best. MAC immer diesselbe IP zu vergeben :-(
Nachdem man nun sich mit dem Wlan verbunden hat und eine Adresse per DHCP bekommen hat, kann man nun das Vpn Tunneling mit `openvpn --config /etc/openvpn/wlan.ovpn' anschalten. Nun sollte man bequem sowohl ins LAN, als auch ins WAN pingen können.
Einbindung in den KDE Network Manager
Nun wollen wir erreichen, dass der Openvpn Prozess automatisch gestartet wird, wenn wir uns in unser Wlan einloggen, und beendet wenn wir uns wieder trennen.
Dazu müssen wir zwei Dateien anlegen
/etc/network/if-up.d/ourvpn
#!/bin/sh WLAN_ESSID=WaveLAN if iwconfig 2>/dev/null | grep -q $WLAN_ESSID; then openvpn --script-security 2 --config /etc/openvpn/wlan.ovpn & fi
Die --script-security 2 -Option ist bei neueren openvpn-Clients nötig, kann oder muss ggf. weggelassen werden!
/etc/network/if-down.d/ourvpn
#!/bin/sh PID=`ps ax | grep -v grep | grep openvpn.*wlan.ovpn | awk '{print $1}'` if [ -n $PID ]; then kill $PID fi
Die beiden Dateien noch ausführbar machen:
chmod a+x /etc/network/if-down.d/ourvpn /etc/network/if-up.d/ourvpn
Und schon sind wir fertig und können WPA in der Fritzbox deaktivieren.