Freifunk Wuppertal/Firmware

Aus wiki.freifunk.net
Wechseln zu: Navigation, Suche
Important.png Wichtig: diese Webseite ist komplett veraltet und reflektiert den Stand von etwa 2013. Die dargestellten Informationen dienen der historischen Rückbetrachtung

Die Wuppertaler Firmware wird innerhalb des Freifunk Rheinland e.V. im fNordeingang Neuss entwickelt und von den Wuppertaler Freifunkern für ihre Bedürfnisse angepasst. Man kann sie in der Wuppertaler Firmwarebäckerei selbst backen und herunterladen.

Andere (ältere/stabile/alternative) Versionen:

Begriffe

Robinson

Ein Knoten, der weder über die Wolke noch über seinen WAN-Port auf das Internet zugreifen kann

Drohne

Ein Knoten, der über die Wolke auf das Internet zugreifen kann.

Queen

Ein Knoten, der als Internetgateway fungiert. Er hat die Adresse 10.3.[0-255].1, da bei der Firmwareentwicklung noch kein DHCP-Splash-Bereich existierte.

Konfiguration der „miniconfig“-Version

Nach dem Fläschen verbindet man den Computer mit dem LAN-Port des Routers. Über den Webbrowser ruft man http://192.168.1.1 auf und befolgt einzeln die erklärten Schritte. Dies dauert ungefähr 0,5–2 Minuten. Es muss ein Passwort und der Knotenname vergeben werden und die Freifunkzelle ausgewählt werden, in unserem Fall Wuppertal ;–)

Nach der Konfiguration startet der Router automatisch neu und kann nicht mehr über den Browser sondern nur über SSH konfiguriert werden. Nur TP-Link Geräte haben die zuvor genannte Webkonfiguration in der Miniconfig-Version. Diese ist aber seit dem Firmwarebäcker obsolet.

Die Eingabe der Geokoordinaten ist optional, sie wird erst in den zukünftigen Versionen verarbeitet, kann aber bereits jetzt im Router gespeichert werden.

Die Geokoordinaten

Es ist geplant die einsatzfähigen Freifunk-Knoten auf einer Karte übersichtlich aufzulisten. Wenn man dies nicht möchte, lässt man das Feld einfach offen.

Zugriff auf den Knoten über den Freifunk

Nur die Knoten die als Gateway zum Internet dienen bzw. sich im Robinson-Zustand befinden erhalten eine IPv4 Adresse. Alle Knoten können jedoch über die IPv6 erreicht werden, die sich aus der MAC-Addresse des Routers bildet. Die MAC in den folgenden Beispielen lautet 12:34:56:78:90:AB

IPv6 Beispiel für Link-Local-Adressen

Zur zweiten Zahl der MAC wird eine Zwei addiert und zwischen der sechsten und siebten Zahl fffe eingefügt.

MAC:        1234 56     78 90AB
IPv6: fe80::1434:56ff:fe78:90ab

IPv6 Beispiel für „normale“ Adressen

MAC:                           1234 5678 90AB
IPv6: fda0:747e:ab29:e1ba:ffff:1234:5678:90ab
  • fda0:747e:ab29:e1ba::/64 ist der Wuppertaler Prefix
  • fda0:747e:ab29:e1ba:ffff::/80 sind die Router mit unserer Firmware

Abweichung von der Regel der IPv6 Vergabe

Durch die unterschiedliche Vergabepraxis in der Firmware, die Geräte- und Geräteversionsabhängig ist, kann die letzte Ziffer um ±2 abweichen. Einfach ausprobieren, wenn dies nicht klappt, dann wurde die IPv6 zufällig vergeben. Bitte melde dies in der Mailingliste. Überprüfen kann man dies dann nur, indem man sich über einen LAN-Port in den Knoten einwählt und

ifconfig br-mesh

eingibt

SSH über IPv6

Link-Local-Adresse

  • bat0 mit wlan0 oder eth1 oder wie auch immer die Netzwerkschnittstelle heißt, mit der man mit dem Freifunk verbunden ist
ssh -6 root@fe80::1434:56ff:fe78:90ab%bat0
# »Passwort« (Standard: admin)

„normale“ IPv6-Adresse

Man sollte der eigenen Schnittstelle eine IPv6 Adresse mit dem Wuppertaler Prefix zuweisen und hier eintragen, wenn man darüber erreichbar sein will (ist natürlich für Testzwecke nicht nötig).

ssh -6 root@fda0:747e:ab29:e1ba:ffff:1234:5678:90ab
# »Passwort« (Standard: admin)

Zugriff auf den Knoten über den LAN-Port

Einen Computer mit dem LAN-Port des Knotens verbinden und den Computer über DHCP eine IP beziehen lassen. Alternativ kann man selbst eine IP vergeben, z. B. 172.29.200.2/24. Der Knoten hat die Adresse 192.168.1.1 in der phip modifizierten Freifunk Rheinland Firmware oder 172.29.200.1 in der originalen Freifunk Rheinland Firmware aus dem fNordeingang in Neuss.

ssh root@192.168.1.1 # bzw
ssh root@172.29.200.1
# »Passwort« (Standard: admin)

# zeigt die MAC
ifconfig wlan0

# zeigt die IPv6 des Knotens im Freifunk
ifconfig br-mesh

Freifunk Miniconfig

Dies war ein Ansatz alte, vom Verein nicht unterstützte Geräte doch noch in die Wolke einzubinden. Dies ist im Augenblick die einzige getestete Möglichkeit für brcm47xx und atheros mittels B.A.T.M.A.N.-adv an der Wolke teilzunehmen. Momentan funktionsfähig:

Sobald der Wechsel auf NetIF vollzogen ist, werden diese Geräte direkt vom Firmwarebäcker unterstützt.

Router Konfigurieren

Uber SSH/Telnet lässt sich ein kleiner Script aufrufen, der den Router für andere Freifunkzellen umkonfiguriert:

freifunk --help

erklärt seine Funktion. Hier die Vorgehensweise für einen frisch gefläschten router:

passwd

das Passwort setzen (ist einfach genug). Dann mit

freifunk set hostname <hostname>

den Hostnamen setzen. Die Freifunkzelleneinstellungen:

freifunk list com

listet alle implementierten Zellen auf

freifunk set com w

versetzt den Router in einen Freifunkknoten für Wuppertal. Es werden wie bei der Webkonfiguration alle Einstellungen automatisch vorgenommen. Anschließend – wenn man mag – die Geokoordinaten:

freifunk set latlong 51.258813,7.146727

Sie werden noch nicht gebraucht, aber bald ;–) Zu guter Letzt: Das unsichere Webinterface sollte noch deaktiviert werden (nur für ar71xx Geräte):

freifunk set miniconfig off

Besonderheit für brcm47xx/atheros: Die Firmware für diese Geräte ist an sich keine Firmware, sondern abgespecktes OpenWrt. Man sollte noch diesen Befehl eingeben, um dem Router eine IPv6 zuzuweisen

freifunk set static on

Fertig. Der Router sollte nun neu gestartet werden:

reboot & exit

„miniconfig“ im Detail

Die Einstellungen von „miniconfig“ befinden sich in /etc/config/ff und /etc/config/node, sehen kann man dies mit:

uci show ff
uci show node

Hier die Schritte, um eine Komplett neue Zelle zu generieren:

KFZ=<KFZ-Kennzeichen der Stadt>
N2N=<Abkürzung für die n2n-Verbindung - none für keine>
uci add_list ff.com.com=${KFZ}
uci set ff.${KFZ}=ffz # ffz bedeutet Freifunkzelle
uci set ff.${KFZ}.name="<Name der Stadt>"
uci set ff.${KFZ}.com="<kurzer Name der Community, als Abkürzung ohne Leerzeichen>" # dies ist gleichzeitig der Name und das Passwort für n2n
uci set ff.${KFZ}.channel=<Kannalnummer>
uci set ff.${KFZ}.batssid=<B.A.T.M.A.N.-SSID>
uci set ff.${KFZ}.bssid=<B.A.T.M.A.N.-BSSID>
uci set ff.${KFZ}.subnet=<IP4- Subnetz der Stadt> # siehe: IP-Netze
uci set ff.${KFZ}.ip6ula=<IP6-Subnetz der Stadt>
uci set ff.${KFZ}.n2n=${N2N}

Optional eine Zweite SSID:

uci set ff.${KFZ}.ssid2="<die Besagte SSID>"

Die n2n-Tunnel, über die die mit dem Internet verbundenen Knoten miteinander Kommunizieren werden so eingestellt:

uci set ff.${N2N}=n2n
uci set ff.${N2N}.amount=1 # Anzahl unterschiedlicher n2n-Tunnel
uci set ff.${N2N}.n2n1=<URL oder IP des n2n-Supernodes>
uci set ff.${N2N}.port1=<Portnr. des n2n-Supernodes>

Weitere Tunnel zur Ausfallsicherheit sind möglich, vergrößern aber den Traffic:

uci set ff.${N2N}.n2n<nr>=
uci set ff.${N2N}.port<nr>=

Alle Änderungen abspeichern

uci commit ff

Freifunk Debuging

Debug-Seite

http://10.3.*.1/cgi-bin/debug zeigt die Knotendaten ohne die Einwahl mittels SSH. Dies gilt für die Entwicklerversionen der Firmware und nicht für die Produktivversionen.

ping6

Tip.png Tipp: ping6 ist auf dem Knoten nicht vorinstalliert.

Listet alle Internetgateways in Wuppertal

ping6 ff02::2%bat0 -c2

Listet alle Knoten in Wuppertal

ping6 ff02::1%bat0 -c2

Was liegt in der Luft?

Mit den nachfolgenden Befehlen erhält man die mit dem Knoten verbundenen Stationen und die Verbindungsqualität

iw dev wlan0 station dump # Nutzer, die mit dem Accesspoint des Knotens verbunden sind
iw dev wlan0-2 station dump # Andere Knoten, die mittels B.A.T.M.A.N. mit dem Knoten meshen
iw dev wlan0-1 station dump # entweder B.A.T.M.A.N. oder die zweite SSID des Routers, in unserem Fall www.wuppertal-freifunk.net

B.A.T.M.A.N.

batctl (Manpage) liefert alle möglichen Einstellungen und Ausgaben. Mit dem Anhängsel -w wird der Bildschirm sekündlich und mit -w X X-sekündlich aktualisiert bis zum Abbruch mit ^C Weil MAC-Adressen genau so schlimm (wenn nicht schlimmer) sind wie IP-Adressen gibt es die Datei /etc/bat-hosts, sie hilft dabei, die MACs lesbarer zu machen indem sie den Hostnamen der MAC für batctl liefert. Um den Flash-ROM zu schonen kann man sie sich im RAM anlegen:

cd /etc && ln -s /tmp/bat-hosts # dies nur einmalig zum Anlegen des Links ausführen

# Liste anpassen
cat > /tmp/bat-hosts << EOF
00:00:00:00:10:00	dieserknoten.vonmir.w.ff
00:00:00:00:00:10	irgendeinhost.weitweg.w.ff
00:00:00:00:20:00	gateway.vonmir.w.ff
00:00:00:00:a0:9b	inderecke.vonmir.w.ff
EOF

Die direkten Nachbarn

batctl o

Hier wird eine Liste mit allen Knoten angezeigt und über welche Nachbarn sie erreicht werden können:

                  Version                       dies ist die MAC der bat0-Schnittstelle, über die der Knoten erreicht wird
[B.A.T.M.A.N. adv 2011.4.0, MainIF/MAC: wlan0-1/00:00:00:00:10:00 (bat0)]
  Originator      last-seen (#/255)           Nexthop [outgoingIF]:   Potential nexthops ...
00:00:00:00:00:10    0.770s   (240) 00:00:00:00:20:00 [   wlan0-1]: 00:00:00:00:20:00 (240)
00:00:00:00:a0:9b    0.360s   (255) 00:00:00:00:a0:9b [   wlan0-1]: 00:00:00:00:20:00 (240) 00:00:00:00:a0:9b (255)
00:00:00:00:20:00    0.290s   (250) 00:00:00:00:20:00 [   wlan0-1]: 00:00:00:00:a0:9b (241) 00:00:00:00:20:00 (250)
^                    ^                ^                              ^
Ziel                 Zuletzt gesehen  am besten zu erreichen über    Weitere Knoten in Reichweite
                                                                     sollte der danach genannte Knoten
                                                                     ausfallen, übernimmt dieser seine
                                                                     Aufgabe

Wie heißen die Gateways ins Internet

… und wie schnell sind sie.

Tip.png Tipp: die Geschwindigkeitseinstellung wird von der Firmware noch ignoriert
batctl gwl

Ping

Die Knoten lassen sich nur anpingen, wenn sie eine IP-Adresse haben. Dank B.A.T.M.A.N. brauchen sie keine und sind direkt über ihre MAC anpingbar.

batctl p 00:00:00:00:00:10
batctl p irgendeinhost.weitweg.w.ff

Traceroute

Traceroute in Wuppertaler Wolke ist langweilig, da durch B.A.T.M.A.N. alle Knoten im gleichen Subnetz liegen und nur einen Hop voreinander entfernt sind. batctl zeigt wie es reell auf der OSI-Ebene 2 aussieht.

batctl tr 00:00:00:00:00:10
batctl tr irgendeinhost.weitweg.w.ff

Die Logdatei des Knotens auslesen

logread für die letzten Ereignisse und logread -f für die aktuellen.

Interne Dienste

Um eigene Server mit dem Freifunk zu verbinden gibt es mehrere Möglichkeiten.

Über WLAN

Derzeit Leider nur für Linux möglich. Das B.A.T.M.A.N.-Routing-Protokoll befindet sich im Kernel, um die Beacons, die die WLAN-Geräte eh aussenden, um ihren Status zu signalisieren, zu modifizieren und mit Routing-Informationen zu versehen. Der Server hat eine WLAN-Schnittstelle und befindet sich in Reichweite einer Freifunk-Wolke und hat B.A.T.M.A.N.-adv (mindestens Version 2011.4.0) installiert.

In den nachfolgenden Befehlen ist wlan0 die WLAN-Schnittstelle:

ifconfig wlan0
ifconfig wlan0 mtu 1528
iwconfig wlan0 mode ad-hoc essid FFW-BATBONE ap 02:CA:FF:EE:E1:BA channel 11
 

Abweichende Befehlskette für eine dumme Centrino WLAN-Karte (hier eth1):

ifconfig eth1 mtu 1528
ifconfig eth1 channel 11
iwconfig eth1 mode ad-hoc essid FFW-BATBONE
sleep 1
ifconfig eth1 up

Und nun der Feinschliff:

batctl if add wlan0
ifconfig wlan0 up
ifconfig bat0 up

ifconfig bat0 10.3.___.___/16 # Die IP-Adressen werden hier vergeben.

route add default gw 10.3.___.___ # Das Gateway ins Internet ist eine Hausaufgabe

Über einen Freifunk-Knoten und seinen LAN-Port

Über SSH in den Knoten einwählen:

  • die Ausgabe der Scope:Global IPv6 Adresse notieren, notfalls auch noch die Scope:Link aufschreiben. Man kann sich schließlich nicht mehr über die IPv4 in den Knoten einwählen, da es auf br-mesh keine IPv4 gibt.
ifconfig br-mesh
  • die Ausgabe dieser Befehle für die Wiederherstellung notieren
uci show network.lan.ifname
uci show network.mesh.ifname
  • nun die Schnittstellen bridgen
uci set network.lan.ifname="" # hier steht keine Schnittstelle
uci set network.mesh.ifname="bat0 eth0.1" # hier stehen beide aufgeschriebenen Schnittstellen
  • und dies abspeichern
uci commit network.lan.ifname
uci commit network.mesh.ifname
  • und den Knoten entweder neu starten
reboot & exit
  • oder dies versuchen
/etc/init.d/network restart

Nun sind LAN und die Freifunk-Wolke miteinander gebrückt. Dem Server kann für seine Ethernet-Schnittstelle eine hier vergebene IP-Adresse zugewiesen werden. Die große Freifunk-Wolke sieht für den Server so aus, als ob es sich um einen riesigen Switch handeln würde. Nur ein Hop zu jedem Gerät in der Wolke. Viel Spaß mit internen Diensten ;–)

Firewall

obsolet seit der 2012-03-06 Version

echo "iptables -I FORWARD -d 192.168.0.0/16 -j DROP" >> /etc/firewall.user
echo "iptables -I FORWARD -d 172.16.0.0/12 -j DROP" >> /etc/firewall.user

schützt das Interne Netzwerk, welches über den WAN-Port erreichbar ist, vor der Freifunk-Wolke.