IC-VPN/Tinc

Aus wiki.freifunk.net
Wechseln zu: Navigation, Suche

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.

IC-VPN/OpenWRT

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