IC-VPN/OpenWRT
OpenWrt
Dies beschreibt die Konfiguration für OpenWRT. Die Pfade sind für andere Distributionen anzupassen. Nachfolgend ist die Einrichtung für Debian/Ubuntu beschrieben.
Konfiguration
Unter OpenWRT wird Tinc über das "Unified Configuration Interface" (UCI) konfiguriert. Die Konfigurationsdatei für Tinc befindet sich unter "/etc/config/tinc":
vi /etc/config/tinc
In dieser Datei können noch massenhaft andere Parameter gesetzt werden, allerdings beschränke ich mich hier auf die einfachste funktionierende Konfiguration.
Nachdem wir die Datei geöffnet haben, löschen wir sämtlichen Inhalt und fügen die folgenden Zeilen ein:
config tinc-net icvpn option enabled 1 option Name [STADTNAME]1 option PrivateKeyFile /etc/tinc/icvpn/rsa_key.priv option Mode switch option PingTimeout 30 option Hostnames 1 list ConnectTo augsburg1
Hier eine kurze Erklärung der oben stehenden Parameter. Als Name tragt ihr am besten den Namen eurer Stadt und die Nummer des VPN-Routers ein. Manche Städte besitzen zwei oder drei VPN-Router. Da ich davon ausgehe, dass dies euer erster VPN-Router ist, würde der Name für die Stadt "Schönestadt", "schoenestadt1" lauten. Das PrivateKeyFile erzeugen wir später. Diesen Parameter könnt ihr so stehen lassen.
Den Parameter Mode könnt ihr ebenso, so stehen lassen. Der Parameter PingTimeout verursacht eine Trennung des VPNs zu einem VPN-Teilnehmer, sobald der angegebene Wert (in Sekunden) erreicht wurde. Danach wird Tinc versuchen, die Verbindung erneut aufzubauen.
Hostnames erlaubt es dem Tinc-Daemon, Verbindungen auch zu Hostnamen aufzubauen. Dies ist wichtig, da viele Teilnehmer eine dynamische IP-Adresse besitzen und somit auf Dienste wie Dyn.com oder noip.com angewiesen sind.
Der Parameter ConnectTo legt fest, zu welchen Teilnehmern ihr euch verbinden möchtet. Hier könnt ihr beliebig viele Teilnehmer hinzufügen, aber Achtung, die hinzugefügten Teilnehmer müssen euch ebenfalls in ihre Konfiguration aufnehmen, aber dazu später mehr. Zwei bis drei Peerings sollten allerdings als Backup ausreichen. Ihr müsst nicht zu allen Teilnehmern eine Verbindung aufbauen, da Anfragen an andere Teilnehmer durchgeroutet werden.
Verzeichnis
Da das UCI noch nicht alle benötigten Optionen für den erfolgreichen Tinc-Betrieb besitzt, muss zusätzlich die "normale" Verzeichnisstruktur von Tinc angelegt werden. Da wir unser Tinc-VPN in der obigen Konfiguration "icvpn" genannt haben, muss der Unterorder im Tinc-Verzeichnis den selben Namen tragen. Unterhalb des "icvpn"-Verzeichnisses wird noch ein "hosts"-Verzeichnis angelegt, in welchem später die öffentlichen Schlüssel und Adressen der jeweiligen VPN-Teilnehmer hinterlegt werden.
mkdir -p /etc/tinc/icvpn/hosts
tinc-up
Jetzt legen wir die Datei "tinc-up" an. Diese Datei wird von Tinc ausgeführt, sobald der VPN-Daemon gestartet wird. Mittels dieser Datei legen wir zum Beispiel die IP-Adresse des Interfaces für Tinc fest:
vi /etc/tinc/icvpn/tinc-up
Nachdem wir die Datei geöffnet haben, schreiben wir folgendes in die Datei:
#!/bin/sh /sbin/ifconfig $INTERFACE 10.207.0.[STADT] netmask 255.255.0.0
"[STADT]" müsst ihr mit eurer IP-Adresse, welche ihr unter #Netz.C3.BCbersicht_.2F_Network_Information ausgewählt habt, ersetzten. Zuletzt müssen wir diese Datei noch ausführbar machen.
chmod +x /etc/tinc/icvpn/tinc-up
Private-Key erzeugen
So, das war die Vorbereitung. Nun kommen noch ein paar kleinere, wichtige Schritte, welche zur erfolgreichen Teilnahme am ICVPN notwendig sind. Der Tinc-Daemon benötigt für jeden Router, auch für den eigenen, einen (öffentlichen) RSA-Schlüssel. In diesem Abschnitt erzeugt ihr einen eigenen RSA-Schlüssel, welchen ihr danach noch unter #Tinc-Schlüssel / VPN Keys eintragen müsst.
tincd -n icvpn -K
Nachdem das Kommando erfolgreich beendet wurde, sollte die Datei /etc/tinc/icvpn/hosts/[STADTNAME]1 existieren. In diese Datei müsst ihr den Hostnamen oder die statische IP-Adresse eintragen, unter dem euer Router über das Internet erreichbar ist. Dafür fügen wir etwa folgendes als erste Zeile in die Datei ein:
Address = vpn1.[STADT].freifunk.net
Wichtig: Da etwaige Änderungen auf allen anderen Servern, mit welchen ihr euch verbunden habt, übernommen werden müss(t)en, ist das ein schwieriges Unterfangen. Die hier gemachten Angaben sollten sich also nach Möglichkeit nie ändern. Hostnamen sind deshalb viel flexibler als IP-Adressen.
Den Inhalt dieser gerade bearbeiteten Datei solltet ihr, wie oben erwähnt, unten an die Liste anhängen, damit andere Admins leicht Zugang zu deinem Schlüssel haben.
Peers
Der (vor)letzte Schritt ist jetzt noch, dass ihr für die in der Konfiguration angegeben Städte die Keys und Hostnamen eintragt. Für "augsburg1" wäre das zum Beispiel die Datei "/etc/tinc/icvpn/hosts/augsburg1".
vi /etc/tinc/icvpn/hosts/augsburg1
In diese Datei tragen wir nun den Code des Abschnitts #Augsburg ein. Dasselbe wiederholen wir für alle eingetragenen Städte in der Konfiguration.
Wichtig: Die Namen der Dateien, insbesondere die Groß-/Kleinschreibung, sind wichtig!
Sobald die Dateien in /etc/tinc/icvpn/hosts erstellt wurden, hat man festgelegt, welche Router sich zum eigenen Router verbinden dürfen. Jeder Router für den eine Datei existiert kann sich prinzipiell mit dem eigenen Server verbinden.
Um dieses "prinzipiell" auch in "wird sich mit dem eigenen Server verbinden" umzusetzen, müsst ihr nun noch die entsprechenden Verantwortlichen für die VPN-Server der Städte anstupsen. In der Tabelle unten findet ihr zu jedem VPN-Teilnehmer eine E-Mail-Adresse. Für "augsburg" wäre das "freifunk AT somakoma DOT de". An diese Adresse sendet ihr eine nette E-Mail mit dem Namen eures VPN-Routers und der Bitte, euch in ihre Konfiguration aufzunehmen.
Jetzt seit ihr mit der Tinc-Einrichtung fertig und könnt euren Tinc-Daemon starten!
Tinc starten und "aktivieren"
Mittels
/etc/init.d/tinc start
startet ihr eure Tinc-Instanz und mittels
/etc/init.d/tinc enable
aktiviert ihr den automatischen Start im Falle eines Reboots eures Routers.