Howto/Freifunk-Knoten aufstellen

Aus Freifunk MWU Wiki
Zur Navigation springen Zur Suche springen

Dies ist eine allgemeine Anleitung zur Teilnahme am Netz von Freifunk Mainz. An dieser Stellen setzen wir voraus, dass du dir bereits einen geeigneten Router zugelegt hast.

Hier findest du eine Tabelle mit den von uns empfohlenen Geräten.

Der Prozess der Installation und Konfiguration umfasst folgende Schritte:

Router Flashen: OpenWrt installieren

Der Router kommt von Haus aus mit einer Firmware des Herstellers. Damit können wir nicht arbeiten. Deswegen muss zunächst ein freies Betriebssystem namens OpenWrt als Firmware auf den Router aufgespielt werden. Diesen Schritt nennen wir "Flashen". Eine grobe Übersicht, wie das Flashen vor sich geht findet man hier.

Um den Prozess einfacher zu machen, und da der Speicherplatz auf den billigeren Routern sehr begrenzt ist, haben wir vorkompilierte Images im Angebot: Die jeweils aktuelle Version für deinen Router liegt unter images.freifunk-mainz.de.

Alternativ kann dem Router auch ein "normales" OpenWRT verpasst werden, dann muss man jedoch die benötigten Pakete folgendermaßen von Hand nachinstallieren:

Der Pfad in "/etc/opkg.conf" hat sich geändert! Die erste Zeile muss nun "src/gz barrier_breaker http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/packages" lauten. (das letzte 'packages' ist neu)

opkg update
opkg install kmod-batman-adv tinc


(Hinweis: Wenn du nicht unser vorgefertigtes Image verwendest, musst du sicher stellen, dass du die richtige Version des Batman-Protokolls aus 2013 installierst, damit dein Knoten mit unserem Netz kompatibel ist (2013.4.0))

Router konfigurieren

Nachdem OpenWRT erfolgreich auf den Router geflasht ist, bezieht dieser zunächst automatisch die IP-Adresse 192.168.1.1. Da bereits ein DHCP Server initial auf den Kisten läuft musst du dir keine eigene IP-Adresse setzen.

Passwort setzen

Bei OpenWRT ist es üblich, dass das erste Einloggen per Telnet erfolgt, um das Root-Passwort zu ändern. Windows-Benutzer haben eventuell kein Telnet zur Verfügung. Stattdessen kann hier Putty benutzt werden (darin als Protokoll dann Telnet wählen).

Folgende Befehle musst du auf der Kommandozeile eingeben:

telnet 192.168.1.1
passwd <enter>
Neues Passwort eingeben: 
Neues Passwort wiederholen: 
(Achtet darauf, das die Passwortänderung auch bestätigt wird 
und ihr euch nicht beim Wiederholen vertippt habt).

Danach ist Telnet auf Port 23 abgeschaltet und künftige Verbindungen nur noch per SSH möglich. Verbindung trennen und nun mit folgenden Möglichkeiten neu einloggen:

Unix-Benutzer: Die weiteren Einlogvorgänge erfolgen dann über SSH als Benutzer root:

$ ssh root@192.168.1.1

Windows-Benutzer: Mittels dem kostenlosen Tool PUTTY (Download) - Hier Login per IP Adresse und SSH (Port 22). Beim Verbindungsaufbau wird ein Vertrauensschlüssel angezeigt, den man speichern kann.

Benutzer eingeben: "root"
Passwort eingeben: was du oben mit passwd neu gesetzt hattest

Putty sample1.jpg

Empfehlung: Sicherung der wichtigsten Dateien

Die Praxis zeigt, dass es gut ist, später nochmal einen Blick in die Original-Dateien werfen zu können, wenn es um definierte Hardware Eigenschaften geht. Wer mag legt Kopien an von:

mkdir -p /etc/config/originals
cp /etc/config/* /etc/config/originals

Die Meldung "omitting directory originals" ignorieren.

  • Alternativ: Für ein Backup ohne Fehlermeldung (dafür aber schlimm einzugeben ;)
mkdir -p /etc/config/originals/
cd /etc/config
cp -r `ls -A /etc/config/ | grep -v 'originals'` /etc/config/originals/

Netzwerk konfigurieren

IP-Adresse benötigt?

Die IP-Adresse für Deinen Router suchst Du Dir selbst aus und dokumentierst sie in diesem Wiki; selbstverständlich kannst Du nur eine bisher noch frei Adresse verwenden. Lege Dir hier im Wiki ein Konto an und dokumentiere Deinen neuen Router auf Deiner Benutzerseite. Für Letzteres gibt es eine Vorlage namens "Node". Wie diese benutzt wird, schaust Du Dir am einfachsten auf den seiten anderer Benutzer ab.

Bitte beachte vor Auswahl der Adresse die Nodeliste, so dass die Adresse tatsächlich noch frei ist. Du benötigest für einen Router nur eine Adresse.

Verschiedene Interface-Namen bei Routern:

Leider unterscheiden sich die Addressierungen der Netzwerkinterfaces der Router je nach Modell und Hardware-Revision. Im folgenden der Anleitung werden die Interfaces als <WAN-IF> und <SWITCH-IF> bezeichnet.


Todo: Du hast einen Router, der nicht in der Tabelle ist? Dann bitte nachtragen.
Solltest du zu den Helden gehören, die ein Todo gelöst haben, darfst du diesen Hinweis löschen.

Router-Modell HW-Revision WAN-Interface Switch-Interface 2,4 GHz 5 GHz
tl-wr741nd v2,v5 eth1 eth0 Ja Nein
tl-wr841nd v5 eth1 eth0 Ja Nein
tl-wr841nd v7 & v8 eth0 eth1 Ja Nein
tl-wr1043nd v 1.x eth0.2 eth0.1 Ja Nein
tl-wr1043nd v 2.x eth0 eth1 Ja Nein
tl-wdr3500 v1 eth1 eth0 Ja Ja
tl-wdr3600 v1 eth1 eth0 Ja Ja
tl-wdr4300 v1.x eth0.2 eth0.1 Ja Ja
wrt160nl v1 eth1 eth0 Ja Nein
nanostation M5 keine Markierung eth0 n.v. nein ja

Datei NETWORK bearbeiten

Laden der Datei network in den Editor. Eine Hilfe gibt es: hier

vi /etc/config/network

Wenn du dich mit den wichtigsten VI-Befehlen bekannt gemacht hast, solltest du zuerst den wichtigen BEFEHL ":set noai" eingeben. Dieser verhindert, dass eingefügte Blöcke nicht zeilenweise nach rechts verschoben werden.

Einige Teile der Datei müssen jetzt ausgetauscht, andere ergänzt werden.

Gehen wir die Blöcke einfach mal durch:



config interface 'loopback' → Der ganze Block bleibt erhalten



config globals 'globals' → Der ganze Block (2 Zeilen) fliegt raus! (Oder mit # auskommentieren)


An dieser Stelle fügen wir ein: (Bei Putty-Nutzern = Shift-Einfg)

config interface 'vpn'
       option ifname 'freifunk_vpn'
       option mtu '1500'
       option proto 'batadv'
       option mesh 'bat0'

config interface 'mesh'
       option ifname 'adhoc0'
       option mtu '1528'
       option proto 'batadv'
       option mesh 'bat0'



config interface 'lan' → Dieser Block wird gleich entfernt, vorher jedoch die Zeile option ifname suchen und den Namen des Interfaces mit der Angabe in der Tabelle oben vergleichen. Dieser Name ist das <SWITCH-IF>. Block danach löschen. (Oder mit # auskommentieren)

Hinweis für Leute mit Vorbildung:
Das LAN Interface wird nicht vernichtet, sondern durch den neuen Block umbenannt in "freifunk".

An dieser Stelle einsetzen: Für Router nur mit 2,4 GHz ...

config interface 'freifunk'
       option ifname '<SWITCH-IF> bat0 freifunk_wlan'
       option type 'bridge'
       option proto 'static'
       #  Eure IP-Addresse aus dem bei ipaddr ersetzen (IP-Adresse bekommt ihr über hallo@freifunk-mainz.de)
       option ipaddr  '10.37.X.X'
       option netmask '255.255.0.0'
       option dns     '10.37.4.1'

Für Router mit 2,4 GHz und 5 GHz ...

config interface 'freifunk'
       option ifname '<SWITCH-IF> bat0 freifunk_wlan freifunk_wlan2'
       option type 'bridge'
       option proto 'static'
       #  Eure IP-Addresse aus dem WIKI bei ipaddr ersetzen (IP-Adresse bekommt ihr über hallo@freifunk-mainz.de)
       option ipaddr  '10.37.X.X'
       option netmask '255.255.0.0'
       option dns     '10.37.4.1'



config interface 'wan' → Dieser Block bleibt erhalten



config interface 'wan6' → Der ganze Block (3 Zeilen) fliegt raus! (Oder mit # auskommentieren)



config switch... → Diese (beiden) Blöcke bleiben erhalten


Speichern und raus: Bei 'vi' mit ESC :wq

DNS Ausschalten

DNS und DHCP abschalten durch einmaliges Absetzen des folgenden Befehls, damit keine IP-Adressen vom Router selbst verteilt werden:

/etc/init.d/dnsmasq disable


WLAN konfigurieren

Laden der Datei wireless in den Editor. Eine Hilfe für den vi-editor gibt es: hier

vi /etc/config/wireless

Der Inhalt wird modifiziert und ergänzt. Gehen wir wieder die Blöcke durch



config wifi-device radio0 → Dieser Block bleibt erhalten. Bei dieser Zeile prüfen, ob Kanal 11 eingestellt ist: option channel 11.


Danach das WLAN einschalten (im selben Block config wifi-device radio0):



option disabled 1 → diese Zeile entfernen (Oder mit # auskommentieren)


In der Original-Datei gibt es dahinter nun einen Block:



config wifi-iface → Dieser ganze Block wird entfernt und statt dessen durch gleich zwei Blöcke ersetzt! (Oder mit # auskommentieren)


Einfügen an dieser Stelle:

config wifi-iface
       option device     'radio0'
       option encryption 'none'
       option ssid       'mesh'
       option ifname     'adhoc0'
       option mode       'adhoc'
       option bssid      '02:ca:ff:ee:ba:be'

config wifi-iface
       option device     'radio0'
       option mode       'ap'
       option encryption 'none'
       option ifname     'freifunk_wlan'
       option ssid       'Freifunk Mainz'
       option network    'freifunk'
       option isolate    '1'


Nur bei einem Dualband Router mit 2,4 und 5 GHz geht es in der Originaldatei weiter. Alle anderen speichern jetzt und sind fertig mit der Bearbeitung dieser Datei.

Bei Routern mit zusätzlichem 5 GHz-Band gibt es jetzt noch einmal die gleichen Blöcke für "radio1".



config wifi-device radio1 → Dieser Block bleibt erhalten.


Danach das WLAN einschalten (im selben Block config wifi-device radio1):



option disabled 1 → diese Zeile entfernen (Oder mit # auskommentieren)


In der Original-Datei gibt es dahinter wieder nur einen Block:



config wifi-iface → Dieser ganze Block wird entfernt und statt dessen durch gleich zwei Blöcke ersetzt! (Oder mit # auskommentieren)


Der letzte Block wird wieder entfernt und durch diese Blöcke ersetzt:

config wifi-iface
     option device     'radio1'
     option mode       'adhoc'
     option encryption 'none'
     option ifname     'adhoc0'
     option ssid       'mesh'
     option bssid      '02:ca:ff:ee:ba:be'

config wifi-iface
     option device     'radio1'
     option mode       'ap'
     option encryption 'none'
     option ifname     'freifunk_wlan2'
     option ssid       'Freifunk Mainz'
     option network    'freifunk'
     option isolate    '1'

Wir speichern wieder mit ESC :wq

Tinc konfigurieren

Reiner Mesh-Node?

Auch wenn der Router nur als Mesh-Node, also ohne DSL Zugang, nur mit reiner Funkverbindung zu Nachbar-Knoten dienen soll, lohnt es sich die folgenden Schritte trotzdem durchzuführen. Das Melden des öffentlichen Schlüssels kann dann aber entfallen. Man ist gut vorbereitet, falls der Node dann später doch mal an einen DSL-Anschluss angeschlossen werden soll.

Tinc auszuschalten ist zwar nicht unbedingt nötig, hilft dem Router dann allerdings Resourcen zu sparen. Wie das Aus- und Einschalten von Tinc geht, steht am Ende unter [weitere Handgriffe].

Datei TINC bearbeiten

Laden der Datei tinc in den Editor. Eine Hilfe für den VI-Editor gibt es: hier

vi /etc/config/tinc

Der komplette Inhalt wird gelöscht und mit folgendem Inhalt gefüllt (NODENAME bitte austauschen):

Man kann vor dem öffnen komfortabel die Datei leeren

echo > /etc/config/tinc

Sicher hast du ja das obige Backup aller Dateien gemacht, oder? Wirklich? Ganz sicher?

config tinc-net 'ffmz'
       option enabled '1'
       option generate_keys '1'
       # NODENAME ersetzen. Wird aus der IP im Wiki erstellt durch Entfernung der Punkte
       # z.B. 10.37.1.100 wird zu  10371100. Es kann zu Doppeldeutigkeiten kommen.
       option Name 'NODENAME'
       option key_size '2048'
       option logfile '/tmp/log/tinc.ffmz.log'
       option debug '0'
       # gate2 ist derzeit das einzig existierende Gateway
       list ConnectTo 'gate2'
       option DirectOnly '1'
       option Forwarding 'off'
       option Interface 'freifunk_vpn'
       option Mode 'switch'
       option Compression '10'


Der NODENAME muss hier eingesetzt werden. Dazu gerade mal ein Wort, warum es bei der Namensbildung zu Doppeldeutigkeiten kommen kann und was man dagegen tun kann. Wir benutzen dazu die IP-Adresse des Gerätes, die du in der NETWORK Datei eingetragen hast und entfernen einfach alle Punkte.

Beispiel: die IP 10.37.11.60 würde zu 10371160 wenn man nur die Punkte entfernt. Jetzt ergibt aber 10.37.1.160 den gleichen Nodenamen. Soweit klar?. Um den Namen wieder eindeutig zu bekommen sollte man den 3.+4. Block der Adresse mit linksbündigen Nullen auffüllen. Das sieht dann so aus: 10.37.11.60 wird dann zu 1037011060 - Leuchtet ein? Der Nodename wird benutzt um den Dateinamen von TINC erstellen zu lassen, der den privaten Schlüssel enthält. Einfach weiterlesen...

TINC-Key und Nodenamen schon mal früher erstellt?
Du hattest schon mal für das Gerät einen Nodenamen und TINC Keys gemeldet zum Eintragen am Server, dann BEHALTE die Daten bei. Verwende den Nodenamen weiter. Lasse mit dem nächsten Kommando die Schlüssel erzeugen und setze die TINC-Keys, die du von früher gesichert hattest wieder ein. Hast du die alten Schlüssel nicht mehr oder einen anderen Nodenamen benutzt, musst du den öffentlichen Schlüssel samt NODENAMEN neu melden.

Speicher und verlassen des Editors wieder mit ESC :wq

Tinc neu starten damit einmalig die Schlüssel generiert werden (Achtung: zum erneuten Generieren von Schlüsseln muss das Verzeichnis "/etc/tinc/ffmz" gelöscht oder verschoben werden!)

/etc/init.d/tinc restart

Durch "......." wird eine Tätigkeit angezeigt. Danach finden wir ein neues Verzeichnis mit neuen Dateien.

cd /etc/tinc/ffmz

Zeigt eine rsa_key.priv und ein weiteres Unterverzeichnis hosts. Die rsa_key.priv beinhaltet den privaten Schlüssel der nicht herausgegeben, aber extern als Sicherheitskopie aufbewahrt werden sollte. Genau so verhält es sich mit dem öffentlichen Schlüssel den wir im hosts Unterverzeichnis finden.

cd /etc/tinc/ffmz/hosts

Der öffentliche Schlüssel hat den Namen den wir in der TINC Datei eben unter option Name 'NODENAME' eingetragen haben.

Dessen Inhalt auflisten (cat 1037.....) und per Mail an zusammen mit dem NODENAMEN senden. Dieser Schlüssel muss im gate2 eingetragen werden.

Datei gate2 im Verzeichnis hosts anlegen:

vi /etc/tinc/ffmz/hosts/gate2

Befüllen mit dem Inhalt aus der unten angezeigten Tabelle - GATE2 - (Gate1 ist offline)


Wir speichern wieder mit ESC :wq

MAC-Adresse für Karte anpassen

Damit unsere schicke Freifunk Karte korrekt funktionieren kann müssen die MAC-Adressen vom VPN-Interface eindeutig und konsistent sein, damit die hinterlegten Geo Koordinaten zugeordnet werden können, und somit ein (grüner-)Punkt auf die Karte gezeichnet werden kann. Leider vergibt OpenWRT die MAC-Adressen pro Start vom Tinc-Interface per Zufall, sodass man ständig das Wiki nach jedem Neustart anpassen müsste.

(NB: Sollte Dein Node kein tinc verwenden, so wird auch nicht die MAC-Adresse des VPN-Interface für die Karte genutzt. Für die Karte ist immer die MAC-Adresse relevant, die mittels "batctl o | head -1" angezeigt wird - ggfs. nach der im Folgenden beschriebenen Anpassung.)

Um den manuellen Änderungsbedarf im Wiki zu vermeiden, wird ein Start-Script für Tinc angelegt, das die MAC-Adresse immer fest setzt. Diese feste MAC-Adresse lässt sich anhand der IP-Adresse des Knotens mit unserem Generator ermitteln und wird im Skript unter "<MAC-ADRESSE>" eingetragen.

Neue leere Datei für Skript anlegen:

vi /etc/tinc/ffmz/tinc-up


Dort Folgendes reinkopieren und Adresse aus Generator einsetzen:

#!/bin/sh
ifconfig $INTERFACE hw ether <MAC-ADRESSE>

Danach machen wir das Script noch ausführbar:

chmod +x /etc/tinc/ffmz/tinc-up

Nach einem /etc/init.d/tinc restart lässt sich mittels ifconfig freifunk_vpn überprüfen, ob die MAC-Adresse korrekt gesetzt wurde.

Firewall Datei befüllen

Die Firewall Datei muss neuen Inhalt bekommen.

vi /etc/config/firewall

Alles muss raus. Neu rein der folgende Inhalt:

Man kann vor dem öffnen komfortabel die Datei leeren

echo > /etc/config/firewall

Bitte vorher ein Backup machen!

config defaults
       option syn_flood        1
       option input            ACCEPT
       option output           ACCEPT
       option forward          REJECT 
  
config zone
       option name             wan
       option network          'wan'
       option input            ACCEPT
       option output           ACCEPT
       option forward          REJECT
  
config zone
       option name             freifunk
       option network          'freifunk'
       option input            ACCEPT
       option output           ACCEPT
       option forward          REJECT
  
config rule
       option name             Reject-Telnet
       option src              freifunk
       option proto            tcp
       option dest_port        23
       option target           REJECT

Wir speichern wieder mit ESC :wq

Weitere Handgriffe

Diesen Befehl noch absetzen. Für Nodename wieder den in der TINC Datei angegebenen verwenden:

uci set system.@system[0].hostname=NODENAME

WOW - fast fertig: jetzt kommt ein Reboot. Dann heißt es "Daumen drücken" - Viel Glück

reboot -f

PS: Am Freifunk-Router muss jetzt vom WAN Port aus ein Kabel zum privaten Router führen, damit TINC eine VPN Verbindung herstellen kann, oder ein anderer Freifunk-Router in Funkreichweite sein, damit das eben erzeugte Gerät sich damit vermeshen kann. Sonst gibt es nach dem Boot-Vorgang keine IP-Adresse vom neuen FF-Router. Ist eine VPN Verbindung notwendig, funktioniert die natürlich erst, wenn dein öffentlicher Schlüssel, den du über die E-Mail Adresse gesendet hast zusammen mit deinem NODENAME am Gateway von einem unserer Admins eingetragen ist. Geduld bitte. Das folgende Bild stellt die Verkabelung (falls sie gewünsch ist) symbolisch dar. Bild


Tinc ausschalten

Wird der Node nicht an einem DSL-Anschluss angeschlossen, kann man den TINC Prozess anhalten

/etc/init.d/tinc disable
/etc/init.d/tinc stop

Schaut man dann mit "ps" nach, müsste der "tincd" Service verschwunden sein.

Tinc einschalten

Wird der Node später doch an einem DSL-Anschluss betrieben, dann sollten folgende Befehle einmalig abgesetzt werden (Vorausgesetzt tinc wurde wie oben in der Anleitung beschrieben schon eingerichtet und die Schlüssel generiert).

/etc/init.d/tinc enable
/etc/init.d/tinc start

Schaut man dann mit "ps" nach, müsste der "tincd" Service wieder erscheinen.

Nicht vergessen den öffentlichen Schlüssel an unsere Gateway-Betreiber unter Angabe des NODENAME zu senden. Erst wenn der Schlüssel am Gateway eingetragen ist, funktioniert der VPN Tunnel über den DSL-Anschluss.

Konfiguration testen

Einen Überblick findet man unter Funktionstests.