IC-VPN/Tinc
Tinc einrichten
Es sollten mindestens bei zwei weiteren Städten ein Tinc-Login eingerichtet werden, damit im Falle eines Ausfalles trotzdem Kontakt in die Tinc-Wolke besteht. Da Tinc ein vermaschtes VPN ist, werden die nötigen Verbindungen automatisch aufgebaut, und dies auch mit dynamischen IP-Adressen und DynDNS. Bitte mindestens Tinc-Version 1.0.8 verwenden.
Tinc-Schlüssel/VPN-Keys
Die tinc-Schlüssel werden in einem github repository verwaltet. Zum Klonen des Repos:
cd /etc/tinc git clone https://github.com/freifunk/icvpn
Die öffentlichen Schlüssel unter /etc/tinc/icvpn/hosts erlauben dem eigenen Server, sich mit diesen zu verbinden, und legen auch fest, welche Server sich zum eigenen Server verbinden dürfen: Jeder Router, für den eine Datei existiert, kann sich prinzipiell mit dem eigenen Server verbinden.
Debian / Ubuntu
IC-VPN automatisch starten
In die /etc/tinc/nets.boot
wird eingetragen, welche tinc-Netze automatisch gestartet werden.
Hier wird ICVPN eingetragen:
## This file contains all names of the networks to be started on system startup. icvpn
tinc.conf
Im Verzeichnis /etc/tinc/icvpn
muss Konfiguration tinc.conf
angelegt werden:
Name = stadt1 PrivateKeyFile = /etc/tinc/icvpn/rsa_key.priv Mode = Switch PingTimeout = 30 Port = 656 Hostnames = yes
stadt1 ist dabei durch einen eindeutigen Hostname zu ersetzen, z.B. berlin1 oder hamburg03.
Anschließend müssen noch Zeilen eingefügt werden in der Form ConnectTo = hamburg03
, damit die Tinc-Instanz aktiv Verbindungen zu anderen Peers aufbaut. Dies übernimmt später das Skript scripts/post-merge
. Damit dieses bei jedem Update (durch git) automatisch ausgeführt wird, kopieren wir es nach .git/hooks/
cp scripts/post-merge .git/hooks/
und führen es aus:
.git/hooks/post-merge
tinc-up
"tinc-up" wird angelegt:
vi /etc/tinc/icvpn/tinc-up
Diese Datei wird ausgeführt, sobald tincd gestartet wird. Es wird festgelegt, welche IP-Adresse unserer VPN-Router innerhalb des InterCity-VPNs haben soll.
#!/bin/sh /sbin/ip link set dev $INTERFACE up /sbin/ip addr add dev $INTERFACE 10.207.X.Y/16 broadcast 10.207.255.255 scope link /sbin/ip -6 addr add dev $INTERFACE fec0::a:cf:HexX:HexY/96 preferred_lft 0
wobei ihr euch für X und Y eine IP im Bereich 10.207.0.0 aussuchen könnt, die noch nicht vergeben ist im icvpn-meta
Wer gerne seine gesamte Netzwerk-Konfiguration in der /etc/network/interfaces
hat schreibt hier nur
#!/bin/sh ifup $INTERFACE
rein und in die Interfaces einen entsprechenden Block für das Interface icvpn
.
tinc-down
Das "tinc-down" Skript läuft, wenn tincd heruntergefahren wird.
vi /etc/tinc/icvpn/tinc-down
In diese Datei sollte folgender Text eingetragen werden:
#!/bin/sh /sbin/ip addr del dev $INTERFACE 10.207.X.Y/16 broadcast 10.207.255.255 /sbin/ip -6 addr del dev $INTERFACE fec0::a:cf:HexX:HexY/96 /sbin/ip link set dev $INTERFACE down
Analog ginge auch hier
#!/bin/sh ifdown $INTERFACE
Beide Skripte werden ausführbar gemacht:
chmod 755 /etc/tinc/icvpn/tinc-*
Debian Wheezy
In Debian 7 wird die nets.boot nicht benutzt, daher müssen im Ordner /etc/tinc/ nun noch Symlinks angelegt werden:
cd /etc/tinc/ ln -s icvpn/tinc.conf . ln -s icvpn/tinc-up . ln -s icvpn/tinc-down . ln -s icvpn/hosts .
Peers und Public-key
Der tincd benötigt für jeden Router, auch für den eigenen, einen (öffentlichen) RSA-Schlüssel. Die Schlüssel der anderen Router kannst du im Abschnitt Tinc-Schlüssel finden – den eigenen musst du jetzt erzeugen und ins github repo laden.
Die Schlüssel liegen in jeweils eigenen Dateien im Verzeichnis /etc/tinc/icvpn/hosts/
, also zum Beispiel /etc/tinc/icvpn/hosts/stadt1.
Wichtig: Die Namen der Dateien, insbesondere die Groß-/Kleinschreibung, sind wichtig!
Zuerst werden wir einen neuen, eigenen Schlüssel erzeugen. Dabei müssen wir auf der Kommandozeile keinen Namen angeben, weil der entsprechende Name aus der Datei tinc.conf verwendet wird. tincd wird nachfragen, wo es die Dateien erstellen soll. Die vorgeschlagenen Defaults sind genau richtig.
tincd -n icvpn -K
Zweimal Eingababe Taste legt also den privaten Schlüssel unter /etc/tinc/icvpn/rsa_key.priv
und den öffentlichen unter /etc/tinc/icvpn/hosts/stadt1
an. In den öffentlichen Schlüssel muss der host-Name oder die IP-Adresse eintragen werden, unter denen der Rechner über das Internet erreichbar ist. Dafür fügt man den Address
-Parameter als erste Zeile in die Schlüssel-Datei ein. Hier ein Beispiel für den öffentlichen Schlüssel von hamburg01:
Address = gw01.hamburg.freifunk.net Port = 656 -----BEGIN RSA PUBLIC KEY----- MIIBCgKCAQEAxVFG8vqjOM+2M2hQiY1MFJi8Tj0sKSEWrZ/a09Hf5lQUwIDl3ZVj 2uA1/1zjQPlN5GR5X/N/P1pErcQkBUQvduvyiWATH5aoi2WlNlNZlMiXs1zni0fF j0WDQ+RS0Q/8EzdW1jUyXQtidS7Hq3B+w66OZ/3gK5TuDbUdmzcdG8rr96mhgwGN 7Wa5kqk4Ye96V67hUgrA+JZEGzddwomb+R6lppGFVG18i/JCco2rqMnKw9a53exa YG9zkT8DguwxXxpjslBLSYAN4AkQXQYYUU7N/nBxEK1kQGYcibTq85iFdxGgz8de S8hsqtRiASZqzCjZAs0ShDlb2KhBWuvevQIDAQAB -----END RSA PUBLIC KEY-----
Wichtig: Da etwaige Änderungen auf allen anderen Servern im ICVPN übernommen werden müss(t)en, ist das ein schwieriges Unterfangen. Die hier gemachten Angaben sollten sich also nach Möglichkeit nicht mehr ändern. Hostnamen sind deshalb viel flexibler als IP-Adressen.
Der neu erzeugte Schlüssel muss ins git repo geladen werden
cd /etc/tinc/icvpn/ git add ./hosts/stadt1 git commit git push
Letzteres funktioniert nur, wenn man die Zugangsdaten zum git hat. Das Repo muss also im Regelfall also vorher geforkt werden und die Änderung dann über einen pull request einfliessen.
tincd starten
service tinc start