WPA Substitute

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche

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:

Fritz netz.jpg

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.