Opennet Firmware
Dies ist eine vorerst stark experimentelle Anleitung zur Installation von OpenVPN auf einem ASUS-Router WL500g auf Basis von OpenVPN-whiterussian. Leider ist es bisher nicht gelungen, openvpn unter der Freifunk-Firmware zum laufen zu bekommen. Daher ist für eine Nutzung von openvpn nach dieser Methode ein firmware-update nötig. Ich übernehm also für nichts eine Garantie ;)
Inhaltsverzeichnis |
Anpassungen an OpenWRT Whiterussian
Im folgenden Abschnitt werden die an einem Standardsystem (OpenWRT whiterussian rc2, siehe [1]) vorgenommenen Änderungen beschrieben. Da OpenWRT-whiterussian für die Nutzung im opennet neu compiliert werden musste, enthält die (später) zu installierende Version diese Anpassungen bereits. Hier sind alle nochmals übersichtlich aufgeführt, damit Kommentare, was gut / schlecht / richtig / falsch ist, leichter fallen.
Konfiguration
zusätzlich zur Standardkonfiguration wurden folgende Module ausgewählt:
- iproute2 routing control (ip)
- openvpn - Open source VPN solution using SSL
hier die config für Interessierte. Einiges könnte bestimmt noch weggelassen werden, aber da die standard-configuration lief, hab ich mich auf's ergänzen beschränkt.
Aus der Freifunk-Firmware übernommene Dateien
- in Zeile 10 hinzugefügt: sleep 125 (damit rdate hoffentlich die Zeit gesetzt hat)
- Zeile 4 auskommentiert da /proc/net/wireless in whiterussian nicht unterstützt wird
- Anpassungen, da /proc/net/wireless in whiterussian nicht unterstützt wird
rene@wintermute ~ $ diff -Naur netparam ../netparam --- orig_netparam 2005-08-13 01:35:22.000000000 +0200 +++ netparam 2005-08-12 20:21:39.000000000 +0200 @@ -83,11 +83,8 @@ } FS = o - wdev = "" - while(getline<"/proc/net/wireless") { - if (/^$/) break - if (sub(":", "")) wdev = $1 - } + wdev = ENVIRON["NVRAM_wl0_ifname"] + if ("" == wdev) "nvram get wl0_ifname"|getline wdev printdev(wdev, wdev, "", "WIFI") printdev("lo", "lo", "", "LO")
Neue Dateien
- /etc/openvpn/opennet.conf
Siehe OpenVPN_Konfiguration
- /etc/openvpn/opennet_up.sh
#!/bin/sh eval $(/usr/bin/netparam) ip route flush table 3 ip route add throw $LANNET/$LANPRE table 3 ip route add default via $route_vpn_gateway table 3 iptables -t nat -A POSTROUTING -o $dev -s $LANNET/$LANPRE -j SNAT --to-source $ifconfig_local
- /etc/openvpn/opennet_down.sh
#!/bin/sh eval $(/usr/bin/netparam) iptables -t nat -D POSTROUTING -o $dev -s $LANNET/$LANPRE -j SNAT --to-source $ifconfig_local
- /etc/local.fw
- MASQUERADING entfernt, da dies im entsprechenden Kernel nicht zu funktionieren scheint, durch SNAT in opennet_up und opennet_down - scripten ersetzt.
# Place your firewall addons here case $1 in start) #variable defintions; TUNDEV="tun0" #SNAT in den Tunnel # MASQUERADING seems not to work well in 2.4.30 # see this news-entry: # http://groups-beta.google.com/group/lucky.linux.kernel/browse_frm/thread/9631983ea435086c/576b4816db12e2e7 # so SNAT is now done in vpn_up.sh #iptables -t nat -A POSTROUTING -o $TUNDEV -s $LANNET/$LANPRE -j MASQUERADE #eingehende frames iptables -I FORWARD 1 -i $TUNDEV -o $LANDEV -m state --state INVALID -j DROP iptables -I FORWARD 2 -i $TUNDEV -o $LANDEV -s ! $LANNET/$LANPRE -d $LANNET/$LANPRE -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -I FORWARD 3 -i $TUNDEV -o $LANDEV -j LOG --log-prefix "FRAMEDROP-FWIN:" iptables -I FORWARD 4 -i $TUNDEV -o $LANDEV -j DROP #ausgehende Verbindungen iptables -I FORWARD 5 -i $LANDEV -o $TUNDEV -m state --state INVALID -j DROP iptables -I FORWARD 6 -i $LANDEV -o $TUNDEV -s $LANNET/$LANPRE -d ! $LANNET/$LANPRE -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -I FORWARD 7 -i $LANDEV -o $TUNDEV -j LOG --log-prefix "FRAMEDROP-FWOUT:" iptables -I FORWARD 8 -i $LANDEV -o $TUNDEV -j DROP #local output iptables -I OUTPUT 1 -o $TUNDEV -j ACCEPT #local input iptables -I INPUT 1 -i $TUNDEV -m state --state INVALID -j DROP iptables -I INPUT 2 -i $TUNDEV -p tcp --dport 22 -j ACCEPT iptables -I INPUT 3 -i $TUNDEV -p tcp --dport 80 -j ACCEPT iptables -I INPUT 4 -i $TUNDEV -p icmp -j ACCEPT iptables -I INPUT 5 -i $TUNDEV -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -I INPUT 6 -i $TUNDEV -j LOG --log-prefix "FRAMEDROP-IN" iptables -I INPUT 7 -i $TUNDEV -j DROP #prepare a table for openvpn policy-routing ip rule add unicast from $LANNET/$LANPRE table 3 #load tun module # insmod tun # not needed, loaded by /etc/modules.d ;; stop) eval $(/usr/bin/netparam) ### S45firewall setzt beim stoppen die Parameter nicht echo "local_top $LANNET/$LANPRE" ip rule del unicast from $LANNET/$LANPRE table 3 echo "local_stop" ;; esac
Installation
In der folgenden Beschreibung wird davon ausgegangen, dass auf dem Router bereits eine funtionierende und lauffähige Version der Freifunk-Software installiert war. Dies wird als Basis genommen, die Firmware wird selbstverständlich auch ausgehend von anderen Vorraussetzungen installierbar sein...
Erlärung (technix): Die Firware Installation muss (soweit ich das probieren konnte) zweimal durchgeführt werden. Ziel ist eine (veränderbare) squashfs-Installation. Zuerst wird eine neue (beliebige) whiterussian-variante als jffs2-4MB installiert. Erst diese enthält die entsprechend aktuelle Versin von mtd, um die modifizierte whiterussian als squashfs zu installieren.
erster Durchgang: install whiterussian jffs
folgende Datei herunterladen: http://downloads.openwrt.org/whiterussian/rc2/bin/openwrt-brcm-2.4-jffs2-4MB.trx
beim ASUS-Router Power-Stecker ziehen (und ruhig mal 10 Sekunden Pause machen, der Router mag das auch), Reset-Button drücken , dabei Power-Stecker eintöpseln und während die Power-LED blinkt (Resettaste kann losgelasen werden) folgendes auf einem verbunden lokalen Rechner eingeben:
(Technix: die default-route muss dabei zum Router zeigen)
rene@local ~ $ tftp 172.16.0.1 tftp> binary tftp> trace Packet tracing on. tftp> get ASUSSPACELINK\x01\x01\xa8\xc0 /dev/null sent RRQ <file=ASUSSPACELINK\x01\x01\xa8\xc0, mode=octet> received DATA <block=1, 0 bytes> tftp> put openwrt-brcm-2.4-jffs2-4MB.trx ASUSSPACELINK ....ausgeschnitten.... sent DATA <block=4225, 0 bytes> received ACK <block=4225> tftp>quit
Der Router sollte nun neu starten. Er bietet jetzt nur einen telnet-zugang an, also muss das passwort geändert werden. Falls dies fehlschlägt (bei mir immer beim ersten Versuch), nicht verzagen, 'reboot' eingeben , der router startet neu und nochmal versuchen...
rene@local ~ $ telnet 172.16.0.1 === IMPORTANT ============================ Use 'passwd' to set your login password this will disable telnet and enable SSH ------------------------------------------ BusyBox v1.00 (2005.08.05-19:08+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M WHITE RUSSIAN (RC2) ------------------------------- * 2 oz Vodka Mix the Vodka and Kahlua together * 1 oz Kahlua over ice, then float the cream or * 1/2oz cream milk on the top. --------------------------------------------------- root@OpenWrt:/# passwd Changing password for root Enter the new password (minimum of 5, maximum of 8 characters) Please use a combination of upper and lower case letters and numbers. Enter new password: Re-enter new password: Password changed. root@OpenWrt:/#
zweiter Durchgang: install modified whiterussian sqashfs
folgende Datei herunterladen: http://absorb.it/whiterussian/opennet-openwrt-brcm-2.4-squashfs_0.1.trx Datei auf den router kopieren:
rene@local ~ $ scp openwrt-brcm-2.4-squashfs.trx root@172.16.0.1:/tmp root@172.16.0.1's password: openwrt-brcm-2.4-squashfs.trx 100% 2020KB 252.5KB/s 00:08 rene@wintermute ~ $
neue Firmware installieren:
rene@local ~ $ ssh 172.16.0.1 -l root root@172.16.0.1's password: BusyBox v1.00 (2005.07.18-21:49+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M WHITE RUSSIAN (RC2) ------------------------------- * 2 oz Vodka Mix the Vodka and Kahlua together * 1 oz Kahlua over ice, then float the cream or * 1/2oz cream milk on the top. --------------------------------------------------- root@OpenWrt:~# cd /tmp/ root@OpenWrt:~# mtd -e linux -r write openwrt-brcm-2.4-squashfs.trx linux Writing openwrt-brcm-2.4-squashfs.trx to linux ... Unlocking linux ... Erasing linux ... Unlocking linux ... root@OpenWrt:~# Connection to 172.16.0.1 closed by remote host. Connection to 172.16.0.1 closed. rene@local ~ $
Der Router sollte nun wieder neu starten. Zuerst muss wieder über telnet dass passwort geändert werden...
Use 'passwd' to set your login password this will disable telnet and enable SSH ------------------------------------------ BusyBox v1.00 (2005.08.05-19:08+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M WHITE RUSSIAN (RC2) ------------------------------- --- adapted for opennet --- opennet-initiative.de - root@OpenWrt:/# passwd Changing password for root Enter the new password (minimum of 5, maximum of 8 characters) Please use a combination of upper and lower case letters and numbers. Enter new password: Re-enter new password: Password changed. root@OpenWrt:/#
OpenVPN-Anpassung
nun müssen die openvpn-keys noch in das Verzeichnis /etc/openvpn kopiert werden:
root@local:~# cd /etc/openvpn root@local:/etc/openvpn# scp *.key root@172.16.0.1:/etc/openvpn root@172.16.0.1's password: ap_XX.key 100% 887 0.9KB/s 00:00 root@local:/etc/openvpn# scp *.crt root@172.16.0.1:/etc/openvpn root@172.16.0.1's password: ap_XX.crt 100% 4263 4.2KB/s 00:00 opennet-ca.crt 100% 1627 1.6KB/s 00:00 wintermute openvpn #
Wenn der Key und das Certifikat tatsächlich ap_XX.key bzw ap_XX.crt heissen (mit den zwei großen X), braucht die Konfigurationsdatei nicht verändert werden, sonst muss auf dem Router die Datei /etc/openvpn/openvpn.conf angepasstt werden.
Router neustarten, Geduld haben und 5 Minuten nach einem Neustart (vielleicht etwas unglücklich, die Wartepause) sollte der Tunnel aufgebaut werden.
rene@wintermute /etc/openvpn $ tracepath www.heise.de 1: 172.16.0.2 (172.16.0.2) 0.287ms pmtu 1492 1: 172.16.0.1 (172.16.0.1) 18.886ms 2: 192.168.3.46 (192.168.3.46) 19.550ms 3: 8.aps.on (192.168.1.8) 29.847ms 4: 15.aps.on (192.168.1.15) 89.338ms 5: titan.on (192.168.0.254) 411.074ms 6: 217.0.116.105 (217.0.116.105) asymm 7 114.248ms 7: 217.0.71.70 (217.0.71.70) 88.572ms 8: 62.154.32.174 (62.154.32.174) asymm 10 106.498ms 9: m-ec1.M.DE.net.DTAG.DE (62.154.27.234) asymm 12 143.748ms 10: c4.m.de.plusline.net (212.19.63.109) asymm 12 130.013ms 11: heise1.f.de.plusline.net (213.83.57.21) 218.912ms 12: heise1.f.de.plusline.net (213.83.57.21) asymm 11 138.400ms Resume: pmtu 1492 rene@wintermute /etc/openvpn $ tracepath www.heise.de 1: 172.16.0.2 (172.16.0.2) 0.298ms pmtu 1492 1: 172.16.0.1 (172.16.0.1) 1.223ms 2: 10.1.0.1 (10.1.0.1) 73.335ms 3: 217.0.116.105 (217.0.116.105) asymm 4 162.812ms 4: 217.0.71.70 (217.0.71.70) 89.402ms 5: 62.154.32.174 (62.154.32.174) asymm 7 118.480ms 6: m-ec1.M.DE.net.DTAG.DE (62.154.27.234) asymm 9 154.122ms 7: c4.m.de.plusline.net (212.19.63.109) asymm 9 165.260ms 8: heise1.f.de.plusline.net (213.83.57.21) 155.406ms 9: heise1.f.de.plusline.net (213.83.57.21) asymm 8 309.705ms Resume: pmtu 1492 rene@wintermute /etc/openvpn $