Tinc Installation

Aus Freifunk Leipzig
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Anmerkung

Erstellt wurde diese Anleitung mit dem VI-Editor. Wenn ihr es mit Putty installiert, müsst ihr nur das "vi" durch ein "edit" ersetzen. Diese Anleitung verwendet die 104.61.12.7 als Beispielnode. Alle fett und kursiv geschriebenen Werte müssen für den eigenen Node angepasst und alle Vorkommen von 12_7 durch die eigene Node-Nummer in der Form <Projekt>_<Node> ersetzt werden.

Installation von Tinc

ipkg update
ipkg install freifunk-tinc

Verzeichnisstruktur anlegen

mkdir -p /etc/tinc/12_7/hosts/

Konfigurationsdateien anlegen

Nun müssen eine Reihe von Konfigurationsdateien und -scripten angelegt werden damit Tinc ordnungsgemäß seinen Dienst verrichtet.

Tinc-Konfigurationsdatei

vi /etc/tinc/12_7/tinc.conf
# Symbolischer Name für diese Verbindung. (nur alphanumerische Werte und der _ sind erlaubt)
Name = 12_7

# Mit welchen anderen Tinc-Daemons soll sich bei Programmstart verbunden werden.
# Entsprechende Host-Konfiguation Dateien in "hosts/" müssen vorhanden sein.
ConnectTo = 116_1
ConnectTo = 17_35

Device = /dev/net/tun

# Name des Tunnelinterfaces, der vergeben werden soll z.B. tun0
Interface = tinc0
AddressFamily = ipv4

Hostnames = yes
Mode = switch
PrivateKeyFile = /etc/tinc/12_7/rsa_key.priv
PingTimeout = 30

Initialisierungsscript "tinc-up"

vi /etc/tinc/12_7/tinc-up
#!/bin/sh
# This file is for tinc startup

# -- Konfiguration Start --
TINCPRT=655
TINCADR=104.61.2.12       # <-- diese IP auch anpassen! (siehe "Teilnehmer")
TINCBRC=104.61.2.255
TINCPRE=24
TINCDEV=$INTERFACE
# -- Konfiguration Ende --

# Netzparameter laden
eval $(/usr/bin/netparam)

# Tinc Interface konfigurieren
ip addr add $TINCADR/$TINCPRE brd $TINCBRC dev $TINCDEV

# Input auf den Tinc-Port aus dem WAN erlauben
iptables -I INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT
iptables -I INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT

# Input / Output auf dem Tinc-Interface
iptables -I INPUT  -d $WIFIADR -i $TINCDEV -j ACCEPT
iptables -I INPUT  -d $TINCADR/$TINCPRE -j ACCEPT
iptables -I OUTPUT -s $WIFIADR -o $TINCDEV -j ACCEPT
iptables -I OUTPUT -s $TINCADR/$TINCPRE -j ACCEPT

# Weiterleitungen zwischen Wifi- und Tinc-Interface erlauben
iptables -I FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT
iptables -I FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT

# Weiterleitungen zwischen LAN- und Tinc-Interface erlauben
iptables -I FORWARD -i $LANDEV -o $TINCDEV -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i $TINCDEV -o $LANDEV -m state --state RELATED,ESTABLISHED -j ACCEPT

# LAN Richtung Tinc natten
iptables -t nat -A POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE

# Interface aktivieren
ip link set dev $TINCDEV up

Shutdownscript "tinc-down"

vi /etc/tinc/12_7/tinc-down
#!/bin/sh
# This file closes down the tunnel device und removes corresponding firewall rules.

# -- Konfiguration Start --
TINCPRT=655
TINCADR=104.61.2.12       # <-- diese IP auch anpassen!
TINCBRC=104.61.2.255
TINCPRE=24
TINCDEV=$INTERFACE
# -- Konfiguration Ende --

# Netzparameter laden
eval $(/usr/bin/netparam)

# Tinc Interface deaktivieren
ip link set $TINCDEV down

# Input auf den Tinc-Port aus dem WAN verbieten
iptables -D INPUT -i $WANDEV -p udp --dport $TINCPRT -j ACCEPT
iptables -D INPUT -i $WANDEV -p tcp --dport $TINCPRT -j ACCEPT

# Input / Output auf dem Tinc-Interface verbieten
iptables -D INPUT  -d $WIFIADR -i $TINCDEV -j ACCEPT
iptables -D INPUT  -d $TINCADR/$TINCPRE -j ACCEPT
iptables -D OUTPUT -s $WIFIADR -o $TINCDEV -j ACCEPT
iptables -D OUTPUT -s $TINCADR/$TINCPRE -j ACCEPT

# Weiterleitungen zwischen Wifi- und Tinc-Interface verbieten
iptables -D FORWARD -i $WIFIDEV -o $TINCDEV -j ACCEPT
iptables -D FORWARD -i $TINCDEV -o $WIFIDEV -j ACCEPT

# Weiterleitungen zwischen LAN- und Tinc-Interface verbieten
iptables -D FORWARD -i $LANDEV -o $TINCDEV -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -D FORWARD -i $TINCDEV -o $LANDEV -m state --state RELATED,ESTABLISHED -j ACCEPT

# LAN-Nat-Regel löschen
iptables -t nat -D POSTROUTING -o $TINCDEV -s $LANNET/$LANPRE -j MASQUERADE

# Interface dekonfigurieren
ip addr del $TINCADR/$TINCPRE brd $TINCBRC dev $TINCDEV

Scripte ausführbar machen

Die up- und down-Scripte ausführbar machen:

chmod +x /etc/tinc/12_7/tinc-up
chmod +x /etc/tinc/12_7/tinc-down

OLSR-Konfiguration für das Tinc-Interface

vi /etc/local.olsrd.conf-tinc0
Interface "tinc0"
{
       HelloInterval		15.0
       HelloValidityTime	180.0
       TcInterval		10.0
       TcValidityTime		270.0
       MidInterval		30.0
       MidValidityTime		180.0
       HnaInterval		30.0
       HnaValidityTime		180.0
       Ip4Broadcast		104.61.2.255

       LinkQualityMult default 0.2
}

Hinweis für den Betrieb hinter einem NAT

Wenn der Rechner oder das Gerät, auf dem Tinc installiert ist hinter einer Firewall hängt, muss zudem der TCP-Tunnelmodus aktiviert werden.

Dazu sollten die Zertifikate der anderen Nodes bearbeitet werden:

vi /etc/tinc/12_7/hosts/*

Dort wird zusätzlich zu den Optionen für Adresse und Port folgende Zeile vor dem Schlüssel eingefügt:

TCPOnly = yes

Schlüssel erzeugen

tincd -n 12_7 -K

Der generierte öffentliche Schlüssel sollte ungefähr so aussehen:

cat /etc/tinc/12_7/hosts/12_7
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAKHymf+vQFBJzKUswWgCqfz9y0vCAtsH68ejWYwo2HUxEW3OZoPpEAb4
belX9d9xs4PCU22O6lUvIbmUl4UGXXFKiWxhbY15K0+rzrJfdw1mfwo5uveaCGwu
gzQ0hFpactWfL3EufX/fBG4tRreYQH3hDA2nLqam6ee0Gp46ZWr5AgMBAAE=
-----END RSA PUBLIC KEY-----

Die Schlüsseldateien austauschen

Beispiel für einen Schlüsselaustausch per ssh:

Zertifikate von anderem Node auf den eig. Node kopieren

scp root@104.61.x.y:/etc/tinc/x_y/hosts/* tinc/12_7/hosts/ 

Eigenes Zertifikat auf anderen Node kopieren

scp /etc/tinc/12_7/hosts/12_7 root@104.61.x.y:/etc/tinc/x_y/hosts
  • Hinweis: Keys müssen mit anderen Nodes ausgestauscht werden (mind. 2 - mit Angabe der Nodes unter /etc/tinc/x_y/tinc.conf und ConnectTo = a_b, sowie ablegen deren Schlüssel unter tinc/x_y/hosts/a_b), ansonsten kann Tinc keine Verbindung aufbauen - hierzu hilft euch ein wenig das Projekt 2, dort könnt ihr euch die Schlüssel von den anderen Tinc-Nodes kopieren und auch eure erzeugten öffentlichen-Schlüssel (in der Node unter /etc/tinc/x_y/hosts/x_y zu finden x_y = wieder eure Node-IP) ablegen. Nun müsst ihr nur noch die Tinc-Nodeadmins um Aufname eurer im Wiki abgelegten Keys bitten, am besten über E-Mail oder im Jabber.

Tinc beim Booten automatisch starten

Damit Tinc beim Booten automatisch gestartet wird, muss nun eine Datei mit dem Namen der verwendeten Konfiguration angelegt werden:

vi /etc/tinc/nets.boot

Dort wird der Name der Konfiguration eingetragen:

12_7

Konfiguration überprüfen

Nach dem Anlegen der Konfiguration sollte jetzt folgendes Verzeichnis-Layout existieren:

/etc/tinc/
/etc/tinc/nets.boot
/etc/tinc/12_7/
/etc/tinc/12_7/tinc.conf
/etc/tinc/12_7/tinc-up
/etc/tinc/12_7/tinc-down
/etc/tinc/12_7/rsa_key.priv
/etc/tinc/12_7/hosts/
/etc/tinc/12_7/hosts/12_7
/etc/tinc/12_7/hosts/...

Tinc-VPN starten

Nachdem die Konfiguration beendet wurde kann nun Tinc gestartet werden:

/etc/init.d/S52tinc start

OLSR muss auch neu gestartet werden damit das neue Tinc-Interface aufgenommen wird:

/etc/init.d/S53olsrd restart

In den Logdateien sollten sich nun Meldungen vom Tinc-Daemon finden:

logread -f

Tinc-VPN-Installation sichern/wiederherstellen

In der Node unter [Verwalten] > [Backup] > Backup-Muster:

      /etc/tinc/*
      /etc/local.olsrd.conf*

ergänzen und auf "Jetzt sichern" drücken.

  • vor einem Firmewareupdate wieder/nochmal "Jetzt sichern" wählen (evtl. die Pfade für die Kabelkopplung oder andere Pakete/Verzeichnisse ergänzen)
  • Firmwareupdate durchführen, anschließend bei der IP-Vergabe den Expertenmodus wählen und dort das Häckchen bei gesicherte Daten wiederherstellen (evtl. noch LAN-/WAN-Einstellungen beibehalten) setzen und neustarten
  • anschließend noch unter Software 2 wieder das Paket freifunk-tinc-de installieren und Node mit dem einfachen Neustart starten
  • nun sollten alle Tinc-VPN-Nachbarn wieder vorhanden sein (sofern ihr keinen Pfad beim Sichern vergessen habt - Beachtung liegt bei Kabelkopplungen und Firewallregeln für neue Interfaces wie z.B. bei WAN-LAN-Kopplungen, bei WAN-WAN könnt ihr das mit den Häcken drunter (Http / Https / Ssl / Ping) setzen)