Da heute ja Kilometerstandsrausposauntag zu sein scheint, hier der Stand vom A6 2,6 Benziner …
OpenVPN mit der FritzBox …
Da es jemand »für einen Bekannten« nachfragte und the-construct.com abgeschaltet wurde (und der Betreiber sich leider auch sich nicht mehr meldet, obwohl es Angebote gibt, den Kram weiterlaufen zu lasssen), hier kurz die Schritte und Tools, um DropBear (SSH-Server) und OpenVPN auf ‘ner FritzBox der 71er-Klasse an den Start zu bringen. Ich hab’s seinerzeit über sog. Pseudo-Images von the-contruct.com gemacht, da gab’s dann ein Webfrontend, welches ein tar zusammenpackte, welches man über’s Web-IF hochladen konnte und, welches dann über /var/flash/debug.cfg den Kram rebootfest implementierte. Idealerweise rennt der Kram vom USB-Stick, aber wenn man den nicht hat, tut’s ggf. auch der Webspace …
# cat /var/flash/debug.cfg
#!/bin/sh
LED_DEVICE=/proc/led_mod/led
if [ ! -f /proc/led_mod/led ] ; then
LED_DEVICE=/var/led
echo "set led: ${LED_DEVICE}"
fi
# start internet phone led flashing
echo "set internet phone led to blink (modul=14, state=3)"
echo 14,3 > ${LED_DEVICE}
# check kernel version
KERNEL_VERSION=`uname -r | grep 2.6`
if [ -z "${KERNEL_VERSION}" ]
then
KERNEL_VERSION="linux24"
ETHERWAKE="etherwake"
else
KERNEL_VERSION="linux26"
ETHERWAKE="ether-wake"
fi
# init busybox var
BUSYBOX="/bin/busybox"
# wait to be able to interrupt in case of emergency
sleep 15
if [ -z "$(busybox | grep telnetd)" ]
then
while !(ping -c 1 0xdecafbad.net)
do
sleep 5
done
# check if file already exists
if [ ! -f /var/tmp/busybox ]
then
wget -qO /var/tmp/busybox http://0xdecafbad.net/${KERNEL_VERSION}/busybox
# make it executable
chmod +x /var/tmp/busybox
fi
# set busybox var
BUSYBOX="/var/tmp/busybox"
fi
# start telnet deamon with password of web gui
#${BUSYBOX} telnetd -l /sbin/ar7login
# load VPN-Server (OpenVPN)
# create tun-device
mknod /var/tmp/tun c 10 200
# write 'secret.key' to file
cat > /var/tmp/secret.key << 'ENDSECRETKEY'
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
[Keyfile-Daten hier her]
-----END OpenVPN Static key V1-----
ENDSECRETKEY
# write 'server.ovpn' to file
cat > /var/tmp/server.ovpn << 'ENDSERVERCONF'
dev tun0
dev-node /var/tmp/tun
ifconfig 192.0.2.1 192.0.2.6
secret /var/tmp/secret.key
proto udp
remote 192.168.178.4
port 1199
tun-mtu 1500
#keepalive 10 60
verb 4
mssfix
route 192.0.2.0 255.255.255.248
route 192.0.2.0 255.255.255.0
ping 15
ping-restart 60
resolv-retry 60
persist-tun
persist-key
daemon
ENDSERVERCONF
cat > /var/tmp/uu.ovpn << 'ENDSERVERCONF'
dev tun1
dev-node /var/tmp/tun
ifconfig 192.168.4.14 192.168.4.15
secret /var/tmp/secret.key
proto udp
remote 1.2.2.3
port 4711
tun-mtu 1500
fragment 1300
#keepalive 10 60
verb 4
mssfix
route 192.168.4.0 255.255.255.0
ping 15
ping-restart 60
resolv-retry 60
persist-tun
persist-key
daemon
ENDSERVERCONF
# try to load files from USB drive
#for f in /var/media/ftp/*
#do
# if [ -f ${f}/files/${KERNEL_VERSION}/openvpn ]
# then
# echo "copy ${f}/files/${KERNEL_VERSION}/openvpn"
# cp ${f}/files/${KERNEL_VERSION}/openvpn /var/tmp/openvpn
# fi
#done
# check if file already exists
if [ ! -f /var/tmp/openvpn ]
then
# wait for server
while !(ping -c 1 0xdecafbad.net)
do
sleep 5
done
# load files
wget -qO /var/tmp/openvpn http://0xdecafbad.net/${KERNEL_VERSION}/openvpn
fi
# make them executable
chmod +x /var/tmp/openvpn
chmod 0600 /var/tmp/server.ovpn
chmod 0600 /var/tmp/secret.key
# start OpenVPN, add route via Internet Link
/sbin/route add 1.2.2.3 dev dsl
/var/tmp/openvpn --config /var/tmp/server.ovpn
/var/tmp/openvpn --config /var/tmp/uu.ovpn
# load SSH-Server (dropbear) and etherwake
# CONFIGURATION
# SSH
# port
dropbearport="22"
# password
PASSWD='[real PW (MD5?) here]'
# Etherwake
# MAC address
wolmac="01:23:45:67:89:AB"
# interface to use for WOL
# intf = std - ata
# eth0 = LAN1 - WAN
# eth1 = LAN2 - LAN1
wolinterface="eth0"
# CONFIGURATION END
# try to load files from USB drive
#for f in /var/media/ftp/*
#do
# if [ -f ${f}/files/${KERNEL_VERSION}/dropbear ]
# then
# echo "${f}/files/${KERNEL_VERSION}/dropbear"
# cp ${f}/files/${KERNEL_VERSION}/dropbear /var/tmp/dropbear
# fi
#
# if [ -f ${f}/files/${KERNEL_VERSION}/sftp-server ]
# then
# echo "${f}/files/${KERNEL_VERSION}/sftp-server"
# cp ${f}/files/${KERNEL_VERSION}/sftp-server /var/tmp/sftp-server
# fi
#done
# check if file already exists
if [ ! -f /var/tmp/dropbear ]
then
# wait for server
while !(ping -c 1 0xdecafbad.net)
do
sleep 5
done
# load files
wget -qO /var/tmp/dropbear http://0xdecafbad.net/${KERNEL_VERSION}/dropbear
fi
# check if file already exists
if [ ! -f /var/tmp/sftp-server ]
then
# wait for server
while !(ping -c 1 0xdecafbad.net)
do
sleep 5
done
# load files
wget -qO /var/tmp/sftp-server http://0xdecafbad.net/${KERNEL_VERSION}/sftp-server
fi
if [ ! -f /var/tmp/busybox ]
then
# try to load files from USB drive
# for f in /var/media/ftp/*
# do
# if [ -f ${f}/files/${KERNEL_VERSION}/busybox ]
# then
# echo "${f}/files/${KERNEL_VERSION}/busybox"
# cp ${f}/files/${KERNEL_VERSION}/busybox /var/tmp/busybox
# fi
# done
# check if file already exists
if [ ! -f /var/tmp/busybox ]
then
# wait for server
while !(ping -c 1 0xdecafbad.net)
do
sleep 5
done
# load files
wget -qO /var/tmp/busybox http://0xdecafbad.net/${KERNEL_VERSION}/busybox
fi
fi
# make them executable
chmod +x /var/tmp/busybox
chmod +x /var/tmp/dropbear
chmod +x /var/tmp/sftp-server
# set busybox var
BUSYBOX="/var/tmp/busybox"
# change root password
${BUSYBOX} sed -e "/root:/s#^root:[^:]*:#root:${PASSWD}:#" -i /var/tmp/shadow
# create symlink for dropbearkey
ln -s /var/tmp/dropbear /var/tmp/dropbearkey
${BUSYBOX} uudecode -o /var/tmp/dropbear_rsa_host_key << 'RSA'
begin 600 /var/tmp/dropbear_rsa_host_key
[UUENCODED data here]
end
RSA
${BUSYBOX} uudecode -o /var/tmp/dropbear_dss_host_key << 'DSS'
begin 600 /var/tmp/dropbear_dss_host_key
[UUENCODED data here]
end
DSS
# start dropbear
sleep 60
/var/tmp/dropbear -p ${dropbearport} -r /var/tmp/dropbear_rsa_host_key -d /var/tmp/dropbear_dss_host_key
# create simplified WOL script
echo "${BUSYBOX} ${ETHERWAKE} -i ${wolinterface} ${wolmac}" > /var/tmp/startpc
# make it executable
chmod +x /var/tmp/startpc
# stop internet phone led flashing
echo 14,1 > ${LED_DEVICE}
# /var/tmp/busybox uname -a
Linux fritz.fonwlan.box 2.6.13.1-ohio #1 Wed Jan 27 13:20:43 CET 2010 mips unknown
# set | grep CONFIG_VERSION
CONFIG_VERSION='04.80'
CONFIG_VERSION_MAJOR='29'
#
Ja, die echten Keys, Passwörter, IPs usw. habe ich verändert :-) Ja, ich verwende hier zwei OpenVPN-Tunnel, einen initial zu einem Asterisk-Server, der hier im LAN stünde (Route über FB-Oberfläche gesetzt bzw. gleiches Netz), und einen im Internet. Und ACHTUNG: /var/flash/debug.cfg nur mit »cat« beschreiben, also »cat /var/tmp/my-file >/var/flash/debug.cfg« — standard disclaimers apply; your mileage may vary; no liability assumed; following the steps shown here might void your warranty, ruin you sex life, kill your dog or make you unhappy in other ways …
Short: works for me, credits go to the creator of the-construct.com … Alles klar? ;)
Linux und Alzheimer
So, ein Wermutstropfen hängt da noch in der Luft; meine neue ‘Access-Fritzbox’ soll, natürlich, einen Fernwartungszugang per SSH über OpenVPN bekommen, so, wie es die anderen drei Boxen, die ich betreue, auch haben (Mental Note: für Berlin muß ich das noch nachrüsten).
Ist ja recht simpel, insbesondere bei der »Speed!Box« W701V, sprich der abgespeckten 7170 ohne USB: die – noch auf the-construct.com-Vorarbeit basierende – /var/flash/debug.cfg lädt aus dem Netz ‘ne neue busybox, ‘n openvpn-Binary usw., erstellt die Konfigfiles und startet dann OpenVPN als auch einen DropBear-SSH-Server …
Eigentlich easy going, aber:
Feb 6 03:47:35 azrael openvpn[5223]: Authenticate/Decrypt packet error: bad packet ID (may be a replay): [ #9 / time = (1296960344) Sun Feb 6 03:45:44 2011 ] – see the man page entry for --no-replay and --replay-window for more info or silence this warning with --mute-replay-warnings
Tja, mein OpenVPN-Server scheint zu alzheimern, denn:
root@azrael.uu.org:/etc/openvpn # grep "Peer Connection Initiated with" /var/log/messages | tail -6 Feb 6 03:42:44 azrael openvpn[5223]: Peer Connection Initiated with 7.2.2.5:61091 Feb 6 03:43:44 azrael openvpn[5223]: Peer Connection Initiated with 7.2.2.5:12042 Feb 6 03:44:45 azrael openvpn[5223]: Peer Connection Initiated with 7.2.2.5:61091 Feb 6 03:45:44 azrael openvpn[5223]: Peer Connection Initiated with 7.2.2.5:12042 Feb 6 03:46:44 azrael openvpn[5223]: Peer Connection Initiated with 7.2.2.5:61091 Feb 6 03:47:46 azrael openvpn[5223]: Peer Connection Initiated with 79.236.242.50:12042
Eigentlich laufen über diesen Link zwei OpenVPN-Verbindungen. Eine orginiert von der FB zu IP1:Port1 (Port1 = 12042), ferner sendet der DockStar seinen Tunnel zu IP2 (gleicher Host wie IP1 allerdings), Port2 (der oben nicht auftaucht, was am NAT liegen mag).
root@azrael.uu.org:/etc/openvpn # netstat -antup | grep 5223 udp 0 0 1.2.2.30:12042 0.0.0.0:* 5223/openvpn
Schon komisch, da sendet der OpenVPN-Daemon auf dem DockStar das an IP2:Port2, aber lt. Logfile kommt es beim Prozeß an., der auf IP1:Port1 lauscht. Noch spannender ist ein tcpdump, denn der zeigt eigentlich nur Pakete bei IP2:Port2 eingehend – ebenfalls für beide Verbindungen.
Nun ist der VPN-Server eine VMWare-Instanz, aber bislang gab es diesbezüglich angenehmerweise grade keine Probleme in dem Bereich …
Na, ich werde mal ‘ne Mütze voll Schlaf drüber nehmen — und vielleicht morgen den Reboot für den sauberen Stand wagen ;-)
T-Entertain, mein Netz und die Fritzbox
Nachdem ich seit des Ersatzes des P3-Museumsstücks als OpenVPN-Router durch einen Dockstar mit Multicast, genauer dem igmpproxying, Probleme hatte und daher T-Entertain nicht mehr nutzte, habe ich den Samstag genutzt, eine FB als DSL-/PPPoE-Router abzustellen (Schema F, habe ich in Berlin ja auch), das heimischen Netz hinter dem OpenVPN-GW zu versammeln und für Entertainer ein eigenes VLAN über die Etagenswitche zu spannen.
Der Plan war/ist, daß das Netz hinter der FB eine Art DMZ darstellt, hierin kommen T-Entertain-Geräte und ggf. PS3/Wii. Das ist ein VLAN, welches möglichst nur direkte Ports anspricht, da Multicast sonst schon mal Trouble macht (z. B. wenn’s auf dem WLAN landet – da geht dann nix mehr).
Konkret sind’s vier VLANe; 3 ist das zwischen Speedport 300 HS (VDSL-Modem; auf eth0, untagged, ist es auf 192.168.1.99 ansprechbar (Status, Webfrontend und telnet); getaggte VLANs 7 (PPPoE) und 8 (DHCP) laufen über eth0 mit). Um die ‘Speedbox’ (SP701V auf 7170 speed2fritzt) nutzen zu können, habe ich VLANs 7 und 8 als markierte ins VLAN 3 (PVID) hinzugenommen. Per Internet über Port 1 klappen sowohl PPPoE-Einwahl als auch IPTV – im Prinzip.
Der X301T allerdings stellt nach ca. 5 Minuten den Empfang ein, scheint wieder ein Multicasting-Thema zu sein. Nur: warum geht MC ca. 5 Minuten und bricht dann ab?
An einem anderen Anschluß hat meine 7270 als Ersatz für einen karpottgegangenen SP W503V (AVM) problemlos funktioniert; daher denke ich mal, auch die 7170 bekommt das hin, zumal das ja ein »beworbenes« Feature ist. Any hints and tips appreciated …
Yeah! #looqs #meeframe fucked up again: lost WiFi on reboot :(
Just awesome. Even with latest firmware, this piece of junk reboots after roughly one day showing pictures from an UPnP source. Doing so, it looses it’s WiFi hardware, coming up with no network, complaining about no server available. Damned crappy photoframe software; anyone having a Linux handy for that HW?
InfoFrame, quo vadis?
Hach ja. Spannende Geschichte, dieser InfoFrame-Kram ;) Allerdings bin ich doch für meinen Anwendungsfall mittlerweile bei »weniger ist mehr« angekommen, die Standardanzeige umfaßt nur noch Datum, Uhrzeit, Google-Wetter-API-Icon und lokale Temperaturwerte – das ganze über einer Auswahl von derzeit rd. 300 Familienfotos aus den letzten 10+ Jahren (überwiegend Landschaftsbilder, die Wohnung hat ja auch »Publikumsverkehr«).
Soweit, sogut; der im nun im Wohnzimmer stehende Kodak W1020 löste den MeeFrame ab, da jener beim UPnP-Krams immer mal wieder hing, auch so hing, daß der Touchscreen reaktionslos war. Der W1020 bekommt einen RSS-Feed, der alle ~10 Sekunden neu gebaut wird — über den Trick mit symbolischen Links klappt die Darstellung jetzt auch weitgehend zufriedenstellend.
Die Ausgaben habe ich auf Outlined umgestellt (9x Text in Schwarz schreiben und dann in dem Mitte noch einmal in Weiß), damit ist weitgehend auch das »heller-Hintergrund-Problem« gelöst; wenn man auch nicht alles aus der Ferne lesen kann, direkt vor dem Rahmen geht’s nun eigentlich immer ;)
Unschön bleibt aber die fehlende Interaktionsmöglichkeit.
- Meine Kids möchten manche Bilder gerne noch einmal sehen — sie müssen nun 300 * 30 Sekunden warten, bis das fragliche Bild wiederkommt.
- Ich würde jetzt vor diesem Rahmen gerne die anstehenden Termine durchgehen — geht nicht, da CalendarPluging gar nicht konfiguriert. Oder geht jetzt nicht, da erst in ~60 Sekunden jenes Plugin wieder angezeigt wird.
Nein, InfoFrame per se ist zwar eine nette Idee, die moderne Familie möchte aber Interaktion.
Für mich als Technikschabe ist es besoonders schmerzlich, denn im Prinzip könnte jeder der WLAN-Frames Verbindung zu einer (Web-)Serveranwendung aufnehmen und darüber ein Mensch-Maschine-Interface realisieren; aber nein, selbst die WLAN-Fotorahmen sind hochentwickelte dumm-passive Kisten :-( Für ein hausweites »RED ALERT« allerdings fehlt mir der NCC-1701-Unterbau, und ehrlich gesagt ist auch die synchronisierte Anzeige, daß ein Anruf reinkommt, mehr so witzlos, wenn man nicht schnell genug zu einem Mobiilteil zu hechten schafft.
In meiner kleinen Welt zeigt ein InfoFrame einen eingehenden Anruf, und der vorbeilaufende Mensch tippt auf »annehmen« am Frame, woraufhin der Anruf (SIP läßt grüßen) auf den Frame geschoben wird. Eine aufpoppende Option ist dann, ein Mobilteil auszuwählen (in der Fritz-Welt von heute sollte das auch das Android-Telefon mit SIP-Client in der Hosentasche sein können) und den Anruf dorthin zu transferieren — nicht alles ist geeignet für Freisprechen und -hören.
Das wäre dann auch wieder ein Mehrwert, denn die Familie zu schätzen wüßte; so ist der digitale Bilderrahmen zwar nett und – je nach Motivauswahl – auch mal für ein »Ahhh« oder »Ohhh« gut, letztlich aber uninteressanter Sondermüll. (Gut, der Geek in mir sieht das anders, aber meinen Enthusiasmus teilt die Familie nur kurz, wenn es keinen Nutzeffekt hat — man hat’s nicht leicht ;-))
Kurzum: ich habe nun 2-4 »InfoFrames« laufen (Kodak W1020 (WiFi, aktuell per RSS), MeeFrame (WiFi, aktuell per UPnP), SPF-87H an DockStar, Parrot Df3120 per Bluetooth), wobei die beiden letztgenannten eher experimentell sind. Für den SPF-87H schwebt mir eine Interaktionsmöglichkeit vor, der Parrot-BT-Rahmen (mit 320×240 in 32k Farben) wäre latent nett im Badzimmer als Uhr, wenn denn die BT-Verbinduing aus dem gegenüberliegenden Arbietszimmer reichen würde (was sie nicht tut) …
Lustig wäre es schon, bei einem eingenenden Anruf das Konterfei eines bekannten Anrufers einzublenden — basierend auf altem perl-Code habe ich eine Anpassung für InfoFrame ohne Freetz am Wickel und teste derlei gerade … Noch spannender wäre es aber, im OG im Flur beim Klingeln an der Haustür (was über einen Adapter an die Fritz!Box angeflanscht wird, Nebenstelle 050) nicht mehr die Treppe zur Haussprechanlage runterhetzen zu müssen, sondern am Infoframe a) diesen »Anruf« entgegennehmen zu können und b) die Haustür z. B. für einen Lieferdienst öffnen. Öffnete sich am InfoFrame ein SIP-Phone, wäre dies ein Leichtes; ich sehe schon, ich werde doch auf (billige) Android-Tablets warten müssen, um meinen Traum vom InfoFrame zu leben …







