Fonera mit OLSR
Aus Freifunk Hannover
Diese Schritt-für-Schritt Anleitung beschreibt, wie man einen La Fonera Router als Freifunk Router verwenden kann.
(Es handelt sich inzwischen um eine revidierte Version der historischen Fassung.)
Inhaltsverzeichnis |
Alternative Firmware
Um der Fonera beizubrigen, auf die eigenen Wünsche einzugehen, kann man die vorhandene Firmware überschreiben und etwas anderes aufspielen.
Freifunk Kamikaze
OpenWrt Kamikaze ab Version 8.09 bringt von Haus aus Möglichkeiten zum Meshen mit. Der Freifunk-Support kann entweder als Paket nachinstalliert werden oder man verwendet direkt einen Freifunk Kamikaze Snapshot: viele Einstellungen sind bereits für Freifunk optimiert und die benötigten Pakete direkt im Image integriert.
Die jeweils aktuelle Version der Snapshot kann unter http://firmware.leipzig.freifunk.net/kamikaze/ oder http://dev.luci.freifunk-halle.net/freifunk-snapshots/ heruntergeladen werden.
Weitere technische Details zur Fonera findet man übrigens im Wiki von OpenWrt.
Freifunk Fonera Pack
Das Freifunk Fonera Pack von Sven-Ola ist ein Experiment, bei dem die original Firmware von FON um zusätzliche Funktionen für die Teilnahme am Freifunk Netzwerk ergänzt wurde. Diese neuen Funktionen können bequem und einfach über ein Webfrontend konfiguriert werden, weshalb das Pack Ideal für Einsteiger geeignet ist. Leider gibt es einige Probleme mit dem Freifunk Pack; so wird der FON Router z.B. von FON als "Dein Router ist offline" erkannt und auch das WLAN Signal bricht bei einigen Anwendern häufig zusammen. Das Fonera Pack wird zur Zeit nicht weiter ntwickelt.
Eine detailierte Beschreibung der Funktionsweise des Freifunk Fonera Pack findet man im Blog.
Mit dem Gerät verbinden
Serielle Schnittstelle
Am besten verschafft man sich Zugang zum Gerät über die serielle Schnittstelle, z.B. mit Hilfe eines handelsüblichen USB-To-Serial Konverter. Eine Diskussion über geeignete Kabel und die Pin-Belegung findet man im Forum [1].
Offensichtlich bootet die Fonera nicht, wenn ein USB-To-Serial Kabel (konkret der TX-Pin) angeschlossen ist. Man muss also zunächst das Kabel (den TX-Pin) entfernen, dann die Fonera mit Strom verbinden und nach ca. 5-8 Sekunden Warten dann das serielle Kabel anschließen.
Ethernet
Die Fonera hört in der Werkseinstellung am LAN-Port auf der IP-Adresse 169.254.255.1, d.h. man gibt sich einfach lokal eine feste IP aus dem Netzwerk 169.254.255.0/24 und kann sich dann mit einem Ethernetkabel verbinden. Das Standard-Login und -passwort für das WebInterface der LaFonera lautet jeweils 'admin'.
Eine besonders einfache Methode, den SSH Zugang freizuschalten, bietet der "Kolofonium Hack" (getestet mit Firmware 0.7.1-2): Über das Webinterface der FON Firmware muss vorübergehend die Adresse 88.198.165.155 als DNS-Server eingetragen und die Fonera einmal neu gestartet werden. Auf diese Weise werden Funktionen zur automatischen Router-Konfiguration so umgeleitet, daß manipulierte Daten eingeschleust und letztlich der SSH Zugang für den Zugriff über WLAN aktiviert wird.
Weitere Methoden zum Freischalten des SSH Zugangs:
- Hacking the La Fonera - PART II (für Firmware 0.7.0-4)
- Hacking la Fonera - Part III (für Firmware 0.7.1-r1)
- Hacking La Fonera mit deutscher Anleitung (für Firmware 0.7.0-4 und 0.7.1-r1)
- "grammofon.pl" Code Injection Script (für Firmware 0.7.0-4)
- "fondue.pl" Code Injection Script (für Firmware 0.7.1-r1)
- Kolofonium Hack (für Firmware 0.7.1-2)
Bootloader Zugriff über Ethernet
Von Haus aus kann man auch bequem über Ethernet auf den RedBoot Bootloader zugreifen. Im Auslieferungszustand der Fonera ist diese Option allerdings deaktiviert und muss zunächst konfiguriert werden.
Der aktivierte Ethernet-Zugriff ist übrigens zwingend erforderlich, um das Easy Flash Utility nutzen zu können.
mit seriellem Kabel
Falls man sich mittels seriellem Kabel verbunden hat und bereits Zugriff auf den Bootloader hat, kann man dies einfach mit den folgenden Befehlen aktivieren:
RedBoot> fconfig bootp_my_ip 169.254.255.1 RedBoot> fconfig bootp_my_ip_mask 255.255.0.0 RedBoot> fconfig boot_script_timeout 10
Weitere Details dazu findet man außerdem im OpenWrt Wiki [2].
von der Konsole
Mit einigen Tricks kann man den Zugang zum Bootloader über Ethernet Kabel aber auch aus einem laufenden System herraus einrichten.
Zuerst muss man sich mit Hilfe eines gepatchten Kernels einen Schreibzugriff auf den Flash-Speicher der Fonera verschaffen:
root@OpenWRT:~# wget http://ipkg.k1k2.de/hack/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma root@OpenWRT:~# mtd -r -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7
Von der Shell aus patcht man die Konfiguration des Bootloaders, so daß dieser beim Booten für 10 Sekunden auf der IP-Adresse 192.168.1.254 Port 9000 per Telnet erreichbar ist. Dazu wird die Konfiguration des Bootloaders im Flash Speicher überschrieben:
root@OpenWRT:~# wget http://ipkg.k1k2.de/hack/out.hex root@OpenWRT:~# mtd -r -e "RedBoot config" write out.hex "RedBoot config"
Dieses Verfahren wurde von Camicia und anderen im DD-WRT Forum entwickelt und kann problemlos nachgemacht werden. Die benötigten Dateien sind alternativ auch hier zu finden: [3] + [4] und wenn wieder erreichbar auch unter [5] + [6]
Auch hierzu findet man weitere Details im OpenWrt Wiki [7].
Überschreiben des Flash-Speichers
Um ein eigenes System auf der Fonera zu installieren, muss man ein neues Root-Dateisystem und einen passenden Kernel in den Flash-Speicher des Gerätes schreiben.
Der Vorgang dauert einige Minuten und darf nicht unterbrochen werden!
Freifunk Easyflash Utility
Das AP51 EasyFlash (alternativ für neuere Version) ist ein ganz hervorragendes Utitility, mit dessen Hilfe das Flashen einer beliebigen neuen Firmware spielend leicht möglich geworden ist. Das Tool ist für Linux und für Windows als Klicki-Bunti bzw. für die Kommandozeile erhätlich. Alle Details und wie man es anwendet, steht im Readme (englisch).
Um das EasyFlash Utility nutzen zu können, muss eigentlich zunächst der Bootloader Zugriff über Ethernet aktiviert werden. Doch im Spezial-Modus macht sich das Utility einen Fehler im Bootloader zu Nutzen, um die neue Firmware direkt aufzuspielen. Das manuelle Freischalten des Bootloader Zugriffs entfällt dann. (Tatsächlich ist das Utility sogar so nett, und erledigt das nebenbei auch noch...)
Benötigt werden folgende Dateien:
Rootfs: openwrt-atheros-root.jffs2-64k (Aktuelle Version)
Kernel: openwrt-atheros-vmlinux.lzma (Aktuelle Version)
Der Spezial-Modus kann wie folgt aktiviert werden:
- Linux/Kommandozeile: als letzten Parameter "freifunc" angeben
- Windows: bei gedrückter Shift-Taste fünf mal auf das Freifunk Logo klicken (die Pfeile zeigen bei aktiviertem Spezial-Modus in die andere Richtung)
Flashen von der Konsole
Wie bereits im Zusammenhang mit dem Überschreiben der Bootloader Konfiguration gezeigt wurde, kann man auch von der Konsole eines laufenden Systems aus mit dem Programm mtd den Flash Speicher überschreiben. Auf diese Weise kann man einfach ein neues OpenWrt Image installieren, nachdem man es mit wget auf die Fonera übertragen hat:
root@OpenWRT:~# wget http://downloads.openwrt.org/kamikaze/8.09/atheros/openwrt-atheros-vmlinux.lzma root@OpenWRT:~# wget http://downloads.openwrt.org/kamikaze/8.09/atheros/openwrt-atheros-root.squashfs root@OpenWRT:~# mtd -e vmlinux.bin.l7 write openwrt-atheros-vmlinux.lzma vmlinux.bin.l7 root@OpenWRT:~# mtd -r -e rootfs write openwrt-atheros-root.squashfs rootfs
Achtung: Dieses Verfahren wurde erfolgreich getestet mit Fon Firmware 0.7.1-r1 und einem Snapshot Image. Allerdings gibt es mehrere Stimmen, die auf diese Weise ihre Geräte "zerschossen" haben. Wer kein serielles Kabel zur Hand hat, sollte vielleicht zunächst den Zugang zum Bootloader über Ethernet freischalten, um im Zweifelsfall noch handlungsfähig zu bleiben.
Flashen mit RedBoot
In den Foneras ist der OpenSource Bootloader RedBoot [8] installiert, mit dem sich u.a. der Flash Speicher überschreiben lässt.
über serielle Konsole
Wenn man über die serielle Schnittstelle verbunden ist, kann man einfach den Flash-Vorgang starten und die zu flashenden Dateien bequem mittels XModem bzw. YModem übertragen.
Es empfiehlt sich, dafür zunächst die Baudrate zu ändern, wenn man nicht nur im Schneckentempo vorran kommen möchte:
RedBoot> baudrate -b 115200
Anschließend muss man natürlich auch das Terminal Programm entsprechen umstellen, damit man dann mit dem eigentlich Flash Vorgang wie folgt fortfahren kann:
RedBoot> fis init
RedBoot> load -r -v -b %{FREEMEMLO} rootfs -m ymodem
Im Terminal-Programm wird ein "C" angezeigt und man kann die Übertragung des neuen Root-Dateisystems (Datei openwrt-atheros-2.6-root.jffs2-64k) starten.
Nachdem die Datei übertragen wurde, erstellt man eine Partition im Flash und speichert dort die übertragene Datei
RedBoot> fis create -f 0xA8030000 -l 0x00700000 rootfs
Die oben genannte Variante ist für den kernel 2.6.19.1, die nachstehende für Kernel 2.6.21.5
RedBoot> fis create -l 0x006f0000 rootfs
Nun überträgt man noch den neuen Kernel (Datei openwrt-atheros-2.6-vmlinux.lzma) und erstellt wiederum eine Partition dafür:
RedBoot> load -r -v -b %{FREEMEMLO} vmlinux -m ymodem
RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
über Ethernet
Für eine Verbindung per Ethernet muss zunächst sichergestellt werden, daß die Netzwerkkarte des Computers zum Zeitpunkt des Bootens der Fonera aktiv ist. Die automatische Netlink Überprüfung moderner Geräte macht einem hier unter Umständen einen Strich durch die Rechnung - Abhilfe schaft aber ein zwischengeschalteter Switch oder Router.
Sobald die Fonera angeschaltet wurde, hat man ca. 10 Sekunden Zeit, um sich per Telnet zu verbinden und dann durch Drücken von CTRL-C den Bootvorgang abzubrechen. Falls man das nicht rechtzeitig hinbekommt oder es anderweitig nicht akzeptiert wird, kann man auch dieses Skript verwenden. Es wird wie folgt verwendet:
perl redboot.pl <fonera_ip>
Wenn man sich per Ethernet verbunden hat, muss man die Dateien mit TFTP oder HTTP auf das Gerät übertragen.
Nachdem man mit der Fonera verbunden ist, muss zunächst eine temporäre Netzwerkkonfiguration einrichtet werden. Die Syntax lautet:
RedBoot> ip_addr -h <server_ip> -l <fonera_ip>/24
Als server_ip muss man eine IP angeben, von der die Dateien übertragen werden sollen. Die fonera_ip muss sich im selben Netzwerk befinden.
RedBoot> ip_addr -h 192.168.1.23 -l 192.168.1.254/24
Als nächstes beginnt man den eigentlichen Flash-Vorgang, erstellt eine Partition im Flash und speichert dort die übertragene Datei:
RedBoot> fis init
RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma
RedBoot> fi cr -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
fis free zeigt den verbleibenden freien Speicher:
RedBoot> fis free 0xA80F0000 .. 0xA87E0000
Letzeres von ersterem abziehen, im Kopf oder mit bc:
server:~# bc obase=16 ibase=16 A87E0000 - A80F0000 6F0000
Nun überträgt man noch das neue rootfs und erstellt wiederum eine Partition dafür (wobei 0xCHANGE bei mir 0x6F0000 ist):
RedBoot> lo -r -b %{FREEMEMLO} openwrt-atheros-2.6-root.squashfs
RedBoot> fi cr -l 0xCHANGE rootfs
Alternativ kann man die Dateien auch mit HTTP auf den Router übertragen, wie u.a. hier [9] beschrieben wird.
neues System booten
Zum Schluss kann man den neuen Kernel laden und booten:
RedBoot> fis load -l vmlinux.bin.l7 RedBoot> exec
Nun sollte der Bootvorgang durchlaufen und man kann sich danach durch Drücken der Enter-Taste in das frische System einloggen.
Please press Enter to activate this console.
Konfiguration
Nachfolgend wird die Konfiguration der Fonera als Freifunk Node mit OLSR beschrieben.
Achtung: Dieser Teil des Artikels ist nicht mehr auf dem neusten Stand und bedarf einer Überarbeitung. Außerdem ist vorgesehen, diesen Teil in einen seperaten Artikel auszugliedern.
OpenWrt konfigurieren
Viele Konfigurationseinstellungen von OpenWrt Kamikaze werden über eine generalisierte Schnittestelle vorgenommen. Alle Einstellungen werden dabei in strukturierten Textdateien gespeichert und können wahlweise über den Befehl uci oder manuell vorgenommen werden.
Passwort setzen
Als erstes muss man ein Passwort vergeben:
root@OpenWRT:~# passwd
So lange kein Passwort gesetzt wurde, kann man sich über telnet ohne Authentifzierung im System einloggen. Nach dem Setzen des Passworts wird telnet deaktiviert und man kann nur noch per SSH zugreifen.
Netzwerk einrichten
Die Konfiguration der Ethernet Schnittstelle erfolgt über die Datei /etc/config/network.
Beispiel für die Konfiguration mit uci:
root@OpenWrt:~# uci show network.lan network.lan=interface network.lan.ifname=eth0.0 network.lan.proto=static network.lan.ipaddr=192.168.1.1 network.lan.netmask=255.255.255.0 root@OpenWrt:~# uci set network.lan.ipaddr="192.168.1.20" root@OpenWrt:~# uci get network.lan.ipaddr 192.168.1.20 root@OpenWrt:~# uci commit root@OpenWrt:~# /etc/init.d/network restart
Beispiel 1 (manuelle Konfiguration): IP-Adresse automatisch beziehen
config interface wan
option ifname eth0
option proto dhcp
Beispiel 2 (manuelle Konfiguration): IP-Adresse manuell setzen
config interface lan
option ifname eth0
option proto static
option ipaddr 169.254.255.1
option netmask 255.255.255.0
Eine ausführliche Beschreibung findet man im OpenWRT Wiki [10].
Um die Fonera ins Freifunk Hannover Netzwerk zu verbinden, müssen die WLAN Einstellungen (Datei /etc/config/wireless) wie folgt angepasst werden.
Beispiel (manuelle Konfiguration):
config wifi-device wifi0
option type atheros
option channel 1
option mode 11bg
# option distance 2000
option diversity 0
option txantenna 1
option rxantenna 1
config wifi-iface
option device wifi0
option mode adhoc
option ssid hannover.freifunk.net
option bssid CA:FF:EE:CA:FF:EE
option bgscan 0
option txpower 79
Außerdem müssen die Netzwerkeinstellungen in der Datei /etc/config/network ergänzt werden:
config interface wlan
option ifname ath0
option proto static
option ipaddr 10.2.25.65
option netmask 255.255.0.0
DNS und DHCP einrichten
Für die richtige DNS-Auflösung empfiehlt sich die Einstellung in der Datei /etc/dnsmasq.conf nach folgendem Muster:
local=/.hannover.freifunk.net/ domain=hannover.freifunk.net expand-hosts resolv-file=/tmp/resolv.conf.auto addn-hosts=/tmp/hosts_olsr server=195.50.140.250 server=212.222.128.68
Um IP-Adressen bequem per DHCP an WLAN Clients zu vergeben, muss folgende Zeile (entsprechend der eigenen IP-Konfiguration) ergänzt werden:
dhcp-range=wlan,10.2.25.81,10.2.25.95,255.255.0.0,23m
In diesem Beispiel wird der Adressbereich 10.2.25.81/28 (14 IPs) verwendet.
Hinweise: die Konfiguriation über uci und /etc/config/dhcp funktioniert im Freifunk Context leider nicht wie erforderlich. Inzwischen wurde ein Patch für diese Einschränkung gepostet, der aber noch nicht in den offiziellen OpenWrt trunk übernommen wurde.
Weitere Informationen zur Konfiguration von dnsmasq gibt es im OpenWrt Wiki [11].
Firewall konfigurieren
Wichtig: Damit der WLAN Verkehr ungehindert weitergeleitet wird und die WLAN DHCP Clients ins Internet gelangen können, muss man folgenden Regeln in der Datei /etc/firewall.user ergänzen.
### Act as Router iptables -A forwarding_rule -j ACCEPT # Masquerade WLAN DHCP Clients iptables -t nat -A POSTROUTING -s 10.2.25.81/28 -j MASQUERADE
Benutzerdefinierte Firewall Regeln können über uci oder manuell in der Datei /etc/config/firewall eingetragen werden. Die Syntax ist benutzerfreundlich und lautet:
forward:<match>:<target>[:<port>]
- Weiterleitung aller Pakete an <target> (optional <port>),
die <match> entsprechen.
accept:<match>
- Erlauben aller Pakete, die <match> entsprechen
drop:<match>
- Verwerfen aller Pakete, die <match> entsprechen
Die Optionen für <match> lauten:
src=<ip>
- Quelladresse <ip>
dest=<ip>
- Zieladresse <ip>
proto=<proto>
- Protokoll Name oder Nummer, z.B. "tcp" oder "udp"
Wird kein Protokoll angegeben, gilt automatisch beides.
sport=<port(s)>
- Quellport(s), z.B. "22", "80,443" oder "6667-6669"
dport=<port(s)>
- Zielport(s)
Um z.B. eine SSH Verbindung über die WAN-Schnittstelle (Ethernet-Kabel) aufbauen zu können, muss der nachstehen Eintrag vorgenommen werden:
accept:proto=tcp dport=22
OLSR installieren
Zunächst muss die Liste der verfügbaren Pakete aktualisiert werden. Dann kann die OLSR Software einfach nachinstalliert werden.
root@OpenWRT:~# ipkg update root@OpenWRT:~# ipkg install olsrd olsrd-mod-nameservice olsrd-mod-dyn-gw olsrd-mod-httpinfo
Eine ausführliche Beschreibung zur Verwendung von ipkg findet man u.a. hier.
OLSR konfigurieren
Für den Betrieb im Freifunk Hannover Netzwerk muss noch die Datei /etc/olsrd.conf mit folgendem Inhalt angelegt werden:
DebugLevel 0
IpVersion 4
AllowNoInt yes
Pollrate 0.1
TcRedundancy 2
MprCoverage 7
LinkQualityFishEye 1
LinkQualityWinSize 100
LinkQualityDijkstraLimit 0 6.0
LinkQualityLevel 2
UseHysteresis no
Interface "ath0"
{
HelloInterval 4.0
HelloValidityTime 72.0
TcInterval 3.0
TcValidityTime 216.0
MidInterval 12.0
MidValidityTime 216.0
HnaInterval 12.0
HnaValidityTime 72.0
}
LoadPlugin "olsrd_dyn_gw.so.0.4"
{
PlParam "Interval" "40"
PlParam "Ping" "194.25.2.129"
PlParam "Ping" "141.1.1.1"
}
LoadPlugin "olsrd_nameservice.so.0.2"
{
PlParam "name" "AP-FON1"
PlParam "suffix" ".hannover.freifunk.net"
PlParam "hosts-file" "/tmp/hosts_olsr"
PlParam "resolv-file" "/tmp/resolv.conf.olsr"
}
LoadPlugin "olsrd_httpinfo.so.0.1"
{
PlParam "port" "8080"
PlParam "Net" "192.168.1.0 255.255.0.0"
PlParam "Net" "10.2.0.0 255.255.0.0"
}
Das Freigeben der Internetverbindung geschieht automatisch durch das olsrd_dyn_gw_plain Plugin. Dieser Teil ist optional.
Die Angaben zum Namen im Abschnitt olsrd_nameservice müssen entsprechend dem eigenen Node-Namen angepasst werden.
Die IP Addressen im Abschnitt olsrd_httpinfo müssen entsprechend dem eigenen Adressebereich für LAN und ggf. WLAN angepasst werden. Dieses Beispiel macht die HTTP-Infoseite von OLSR für die Netzwerke 192.168.1.0/24 und 10.2.0.0/16 verfügbar.
Damit der OLSR Daemon nach einem Neustart des Routers automatisch gestartet wird, muss man noch folgendes ausführen:
root@OpenWRT:~# /etc/init.d/olsrd enable root@OpenWRT:~# /etc/init.d/olsrd start

