Do
Jun
07
2007
Remotezugriff auf OpenWrt-Router (Updated)
Lange Zeit hatte ich einen Account bei dyndns. Dadurch konnte ich meinen Rechner zuhause trotz DSL aus dem Internet ansprechen. Die dynamisch vergebene IP-Adresse wurde automatisch durch eine Helferapplikation bei dyndns mit einem URL verbunden.
Inzwischen bin ich weg von dyndns, ich brauche es eigentlich auch gar nicht. Dank meines Asus-Routers mit OpenWrt kann ich zeitgesteuert meine IP-Adresse zuhause in eine Textdatei auf meinem gemieteten Webspace schreiben lassen. Dadurch kann ich von überall auf Router und meinen Rechner zuhause (sofern er eingeschaltet ist) zugreifen.
Ziel: Der Router soll periodisch seine IP-Adressen auslesen und in eine Textdatei auf einem FTP-Account schreiben.
Der erste Schritt, ist die Installation einiger Pakete auf dem Router, damit ein Upload möglich ist. Prinzipiell geht es auch via ftp, ich bevorzuge jedoch curl.
ipkg install curl
Als nächstes lege ich ein Skript an, welches für das Auslesen und Hochladen der IP-Infos zuständig ist: /mnt/usb/usr/bin/publish_ip.sh
#!/bin/sh
date > /tmp/ip
ifconfig vlan1 | grep -v inet6 | grep inet | cut -f2 -d: | awk '{print $1}' >> /tmp/ip
curl -T /tmp/ip -u username:password ftp://ftp.webspace.de/ip/inet_addr
Zeile 1 ist die Shebang, in Zeile 2 wird ein aktueller Zeitstempel in die Datei /tmp/ip geschrieben. Zeile 3 führt das Programm ifconfig aus und sucht dort nach der IP-Adresse, indem die Ausgabe von ifconfig via grep durchforstet, mittels cut zurechtgestutzt und anhand von awk ausgegeben wird. Das Ergebnis wird an die Datei /tmp/ip angehangen. In Zeile 4 sorgt curl dafür, dass die Textdatei via ftp auf den Webspace kopiert wird. Das geht natürlich auch mit ftp oder anderen ftp-fähigen Werkzeugen.
Nicht vergessen: Die Datei muss ausführbar sein:
chmod +x /mnt/usb/usr/bin/publish_ip.sh
Dann wird ein Cronjob eingerichtet. Wenn Cron bereits läuft, ist alles gut, alternativ muss es eingerichtet werden:
Eine Datei namens /etc/init.d/S61 muss mit dem folgenden Inhalt angelegt werden (dies sollte via Webinterface auch automatisch gehen):
#!/bin/sh
crond -c /etc/crontabs -b
Diese Datei muss ausführbar gemacht werden:
chmod +x /etc/init.d/S61crond
Dann folgt entweder ein Neustart oder der Aufruf des crond-Startskripts:
sh /etc/init.d/S61crond
Das Anlegen des Cronjobs kann unter anderem durch den Befehl “crontab -e” erfolgen. Folgende Zeile füge ich hinzu:
59 4 * * * /mnt/usb/usr/bin/publish_ip.sh
Somit wird jeden Morgen gegen 5 Uhr Uhr das Skript ausgeführt und die IP-Adresse auf den Webspace geladen. Das Ergebnis sieht in etwa so aus:
Sun Jun 10 04:59:01 CEST 2007 26.134.211.32
Die IP-Adresse des Routers im Internet am 10. Juni um 04:59 Uhr ist also 26.134.211.32.
Um den Komfort noch etwas zu erhöhen, könnte das kleine Skript publish_ip.sh ebensogut eine HTML-Seite generieren, die anhand eines Meta-Tags im Head der Seite eine automatische Weiterleitung vornimmt:
<meta http-equiv="Refresh" content="5; url=127.0.0.1">
Update für Kamikaze: Um die aktuelle WAN-IP herauszufinden, lautet das Kommando
ifconfig eth0.1 | grep -v inet6 | grep inet | cut -f2 -d: | awk '{print $1}' >> /tmp/ip
Noch einfacher wäre es doch, gleich eine HTML-Datei zu gerenieren, die direkt auf die IP des Routers weiterleitet.
— Martin · Jun 7, 11:52 · #
Stimmt, das wird dann die nächste Ausbaustufe :-)
— Stephan · Jun 7, 12:47 · #
Hey, danke.
So kann ich mir das kleine dnydns schenken, welches immer dazu gut ist, dass man an seine IP den Hinweis hängt: Bitte, bitte liebe Skriptkiddies hier ist meine IP und nun müllt mich zu.
— Stulle · Jun 10, 21:04 · #
Ich erhalte “Cannot find a package named curl”. ipkg update wurde natürlich durchgeführt. Welche OpenWrt Version nutzt Du?
— Ralf · Jun 16, 22:46 · #
Ich habe zusätzlich noch x-wrt installiert. Zur Sicherheit meine verwendeten Sourcen:
root@OpenWrt:~# cat /etc/ipkg.conf
src 0.9-backports http://downloads.openwrt.org/backports/0.9
src whiterussian http://downloads.openwrt.org/whiterussian/packages
src non-free http://downloads.openwrt.org/whiterussian/packages/non-free
src X-Wrt http://download2.berlios.de/pub/xwrt/packages
dest root /
dest ram /tmp
dest usb /mnt/usb
dann ein ipkg update und schon sollte curl dabei sein :-)
— Stephan · Jun 17, 00:28 · #
Was von X-Wrt hast Du denn installiert? Das gesamte OpenWrt ersetzt??? Mehr Details, bitte!
— Ralf · Jun 17, 01:58 · #
Jetzt hat der Curl Install geklappt, allerdings kommt beim Aufruf von curl auf der Kommandozeile:
curl: can’t load library ‘libssl.so.0.9.7’
— Ralf · Jun 17, 02:10 · #
Hi Ralf,
falls Du das noch liesst. Versuch mal aus dem root-Verzeichnis:
find | grep libssl
Die Datei lag bei mir schon rum, hatte allerdings keine ausführenden Rechte.
Dann also:
chmod a+x libssl.so.0.9.7
p.s.
Stephan, schöne Seite. Nutze selbst txp und openwrt und stolperte per google immer mal wieder über Deine Seite
— hannes · Aug 23, 20:10 · #