Sie sind auf Seite 1von 5

heise Netze - 24.09.

09 - Dezentrales VPN mit Tinc Page 1 of 5

24.09.2009

Reiko Kaps
Dezentrales VPN mit Tinc
Tinc vermascht Rechner sicher übers Internet

Das auf vielen Betriebssystemen laufende VPN Tinc braucht keinen zentralen
Einwahl-Server. Es verbindet stattdessen mehrere Tinc-Rechner gleichzeitig. Fällt
eine der Verbindungen aus, liefert die Software die Netzwerkpakete auf dem
kürzesten Weg über die verbleibenden ans Ziel.

Tinc baut über das Internet ein virtuelles privates Netz auf, das den Datenverkehr zwischen
zwei oder mehr Rechnern verschlüsselt und komprimiert. Die Software benötigt dafür
keinen zentralen Server, der die Zugänge verwaltet und der die Einwahl übernimmt.
Stattdessen erzeugt Tinc gleichzeitig mehrere Verbindungen zu anderen VPN-Knoten. Wird
eine dieser Verbindungen gekappt, erreicht der Knoten das VPN über die verbleibenden
Verbindungen. Unabhängig vom eigentlichen Aufbau des VPN sorgt Tinc dafür, dass
Netzwerkpakete dabei möglichst den kürzesten Weg zum Ziel finden (Mesh-Routing).

Um einen neuen Rechner in ein Tinc-VPN einzubinden, braucht die Software keine neuen
VPN-Dienste oder Schnittstellenzuweisungen. Es genügt eine zusätzliche
Konfigurationsdatei, die man allerdings auf den Knoten verteilen muss. Die Software
verbindet einzelne Ethernet-Segmente, sodass fürs LAN geschriebene Spiele oder
Anwendungen wie gewohnt funktionieren. Tinc versteht zudem das Internet Protokoll
Version 6 (IPv6), über das es VPNs aufbauen und das die Software im VPN als Transport-
Protokoll einsetzen kann.

Tinc[1] läuft auf Linux, Solaris, Free- und OpenBSD und steht als Paket für Windows ab
Version 2000 bereit. Bei den BSD-Unixen und den meisten Linux-Distributionen lässt sich
Tinc über die Paketverwaltung nachinstallieren. Für andere wie etwa Fedora und Red Hat
Linux findet sich ein RPM-Paket auf der Projekt-Website. Fertige Pakete für Mac OS X
stehen nicht bereit, laut Dokumentation lässt sich Tinc jedoch auf Apples Betriebssystem
aus den Quelltexten übersetzen. Auf allen Betriebssystemen benötigt die Software einen
TUN/TAP-Treiber, den aktuelle Linuxe meist mitbringen und den der Windows-Installer
mitliefert. Ob ein TUN/TAP-Treiber unter Linux vorhanden ist, verrät das Kommando
modinfo tun. Mit lsmod | grep tun sieht man, ob er geladen wurde, was sich notfalls
über den Befehl modprobe tun nachholen lässt.

Auf Windows-Systemen wechselt man nach der Tinc-Installation als Administrator ins
Verzeichnis tap-win32/, das sich im Tinc-Programmverzeichnis findet. Dort startet die
Batchdatei addtab.bat die Treiberinstallation. Unter Vista und Windows 7 nickt man den
folgenden UAC-Dialog ab. Anschließend besitzt das Windows-System eine neue
Netzwerkverbindung für das Gerät „TAP-Win32 Adapter V8“.

Soll der Tinc-Knoten Verbindungen von anderen Knoten annehmen können, benötigt er
entweder eine offizielle IP-Adresse oder eine Portweiterleitung am Netzwerkrouter, der TCP
- und UDP-Pakete für den frei wählbaren Tinc-Port ins LAN durchschleift. Wenn sich das
lokale Tinc ausschließlich zu anderen Knoten verbinden soll, aber hinter einem NAT-Router

file://C:\Documents and Settings\Benutzer\Desktop\heise Netze - 24.09.09 - Dezentral... 26.09.2009


heise Netze - 24.09.09 - Dezentrales VPN mit Tinc Page 2 of 5

arbeitet, der sich nicht derart manipulieren lässt, kann der jeweilige Tinc-Knoten die VPN-
Daten über TCP transportieren. Verknüpft Tinc beispielsweise mehrere Firmennetze,
schaltet man am Router die Port-Weiterleitung an. Von außerhalb können Mitarbeiter
solche Vorgaben nicht setzen – diese Tinc-Knoten müssen daher die VPN-Daten per TCP
transportieren.

Es wird eingerichtet
Seine Einrichtungsdateien sucht Tinc unter Linux im Ordner /etc/tinc. Auf Windows erwartet
es sie im Programmverzeichnis, das sich in der Regel unter c:\Programme\tinc\ findet. Die
Einstellungen lassen sich als Profile zusammenfassen und später gezielt aufrufen: Dazu
erzeugt man ein neues Verzeichnis mit einem frei wählbaren Namen – beispielsweise
MeinTincVPN – und erstellt darin das Unterverzeichnis hosts/ sowie die Da-tei tinc.conf, in
der der Tinc-Knoten einige grundlegende Parameter erwartet:

Device=/dev/net/tun
Interface=MeinTincVPN-dev
AddressFamily=ipv4
Mode=switch
Name=TincKnoten1
PrivateKeyFile=/etc/tinc/MeinTincVPN/rsa_key.priv

Der Eintrag Device gibt das TUN/TAP-Pseudo-


Device vor, Interface benennt das VPN-Interface.
Fehlt diese Option unter Linux, benennt Tinc das
Interface nach dem Profilnamen. Windows benötigt
den Eintrag Device nicht, es sucht sich das passende
Interface automatisch. Wer die VPN-Schnittstelle Wer die VPN-Verbindung unter Windows
jedoch vorgeben will, kann die zum "TAP-Win32 explizit angeben will, gibt ihr einen
Adapter V8" gehörende Netzwerkverbindung eindeutigen Namen und teilt ihn Tinc über
beispielsweise in TINC-VPN umbenennen und die die Konfigurationsvariable Interface mit.
Option Interface=TINC-VPN setzen. Mit
AddressFamily=ipv4 hört tinc ausschließlich an den IPv4-Adressen des Rechners und
Mode legt fest, wie Tinc Pakete zum Ziel leitet. Über den Wert switch erzeugt Tinc anhand
der Hardware-Adressen (MAC) eine Routing-Tabelle. Ähnlich wie ein echter Switch leitet
die Software Unicast-, Broadcast- und Multicast-Anfragen weiter, sodass sich einzelne
Ethernet-Segmente überbrücken lassen. Nutzt Tinc dagegen hub, erstellt die Software
keine Routing-Tabelle und alle Pakete werden per Broadcast an alle anderen Tinc-Knoten
verschickt. Per Vorgabe arbeitet Tinc jedoch als Router, der nur die Subnetz-Angaben der
einzelnen Knoten für die Routing-Tabelle auswertet.

In dieser Betriebsart funktionieren jedoch keine Broad- oder Multicast-Anfragen. Der


Parameter Name benennt den Tinc-Knoten, der sich gegenüber anderen mittels eines
Schlüsselpaares ausweist. PrivateKeyFile zeigt dabei auf den absoluten Pfad der
privaten Schlüsseldatei, die Tinc gemeinsam mit dem öffentlichen Schlüssel über den
Befehl tincd -K -n MeinTincVPN erzeugt. Das Programm legt den privaten Schlüssel per
Vorgabe in der Datei rsa_key.priv im Profilverzeichnis (MeinTincVPN) ab. Den öffentlichen
Schlüssel sichert es standardmäßig in einer Datei im hosts-Verzeichnis. Wenn nicht anders
gewünscht, benennt Tinc die Datei mit dem Knotennamen, den man zuvor in der Datei
tinc.conf festgelegt hat.

file://C:\Documents and Settings\Benutzer\Desktop\heise Netze - 24.09.09 - Dezentral... 26.09.2009


heise Netze - 24.09.09 - Dezentrales VPN mit Tinc Page 3 of 5

Schlüssel und Adressen


In der Datei TincKnoten1 steht danach nur der öffentliche Schlüssel des Rechners, es
fehlen einige weitere Angaben zum Subnetz sowie zur öffentlichen Adresse und zum Port,
über die der Knoten aus dem Internet erreichbar ist.

Address=tincknoten1.example.net
Port=54321
Subnet=192.168.0.0/16
Compression=9
----BEGIN RSA PUBLIC KEY----
MIG...JAgMBAAE=
----END RSA PUBLIC KEY----

Nun muss Tinc wissen, wie es der VPN-Schnittstelle eine Adresse verpassen kann. Dabei
hilft Tincs Skript-Mechanismus, mit dem sich beim Starten und Stoppen des VPN oder beim
Anmelden einzelner Subnetze oder Tinc-Knoten Aktionen ausführen lassen.

Soll der Knoten beim VPN-Start die Adresse 192.168.98.1 mit der Maske 255.255.0.0
erhalten, erzeugt man im Profilverzeichnis die Datei tinc-up, macht sie unter Linux mit
chmod +x tinc-up ausführbar und füllt sie mit folgender Zeilen:

#!/bin/sh
/sbin/ifconfig $INTERFACE 192.168.98.1 netmask 255.255.0.0

Tinc ruft Skripte ohne Optionen auf, übergibt ihnen jedoch Umgebungsvariablen. Neben
der Variable INTERFACE gehören dazu NETNAME, NAME, DEVICE, NODE,
REMOTEADDRESS, REMOTEPORT und SUBNET. Auch unter Windows führt Tinc Skripte
aus, wenn sie auf .bat enden. Die Variablen lassen sich dann Shell-typisch mit $INTERFACE
oder unter Windows mit %INTERFACE% ansprechen. Weitere Details zu Tinc-Skripten verrät
die Dokumentation[2].

Mehr Knoten, mehr Netze


Der zweite Tinc-Knoten benötigt eine ähnliche Einrichtung. Man legt das Profilverzeichnis,
die Datei tinc.conf sowie die Schlüsseldateien an und erweitert die Datei mit dem
öffentlichen Schlüssel um Einträge für das Subnetz, die echte Adresse des Knotens sowie
um die Portnummer:

Address=tincknoten2.example.net
Port=54321
Subnet=192.168.0.0/16
Compression=9
----BEGIN RSA PUBLIC KEY----
AuS...sEnsTElle=
----END RSA PUBLIC KEY----

Der Subnetz-Eintrag wird hier auf 192.168.0.0/16 gesetzt, was auch das lokale Netz des
zweiten Knotens mit der Adresse 192.168.99.0/24 abdeckt. Das Tinc-Skript tinc-up
kümmert sich beim VPN-Aufbau wieder um die Vergabe einer IP-Adresse für die lokale
VPN-Schnittstelle.

file://C:\Documents and Settings\Benutzer\Desktop\heise Netze - 24.09.09 - Dezentral... 26.09.2009


heise Netze - 24.09.09 - Dezentrales VPN mit Tinc Page 4 of 5

#!/bin/sh
/sbin/ifconfig $INTERFACE 192.168.99.1 netmask 255.255.0.0

Tinc erstellt dank der Netzwerkmaske 255.255.0.0 passende Routing-Einträge auf allen
anderen VPN-Knoten, weitere per Hand einzutragende Einträge sind unnötig.

Abschließend teilt die Zeile „ConnectTo=tincknoten1“ in der Datei tinc.conf dem Rechner
mit, dass er sich zum ersten Tinc-Knoten verbinden soll. Beide Seiten benötigen für eine
korrekte Authentifizierung sowie für die Routing-Informationen jedoch die Datei mit dem
öffentlichen Schlüssel der Gegenseite, die man im hosts-Verzeichnis des VPN-Profils
ablegt. Besteht das VPN bereits aus mehreren Knoten, kann sich der Rechner parallel zu
den anderen verbinden, wenn die Konfigurationsdatei mehrere ConnectTo-Zeilen enthält.

Soll ein weiteres LAN ins VPN gelangen, wiederholt man diese Schritte. Dabei muss man
jedoch beachten, dass die Adress- und Netzwerkbereiche der einzelnen Knoten sich nicht
überlappen.

Soll ein Mitarbeiter von unterwegs ins Tinc-VPN gelangen, muss er nicht gleich ein eigenes
Subnetz mitbringen. Dem Mobilknoten reicht eine einzelne Adresse, was sich über die
Notation 192.168.99.100/32 ausdrücken lässt und die man so in den Subnet-Eintrag der
eigenen Hosts-Datei einträgt.

Address=tincclient.example.net
Port=54321
Subnet=192.168.99.100/32
Compression=9
ConnectTo=tincknoten2
----BEGIN RSA PUBLIC KEY----
HIS...LaqMMBBE=
----END RSA PUBLIC KEY----

Mobile Rechner verbinden sich zumeist aus einem lokalen Netz ins Internet, dessen Router
keine Port-Weiterleitungen ins LAN erlaubt. Baut dieser Computer eine VPN zu einem
Knoten auf, melden beide Seiten zwar einen erfolgreichen VPN-Aufbau, allein die per UDP
transportierten VPN-Pakete finden nicht ihren Weg zum Ziel. Tinc kann die eigentlichen
VPN-Daten jedoch über TCP-Verbindungen tunneln, was sich mit der Zeile TCPOnly=yes in
der Datei tinc.conf auf dem Client einschalten lässt.

Mode=switch
Name=mobiltincknoten1
PrivateKeyFile=c:/Programme/tinc/MeinTincVPN/rsa_key.priv
ConnectTo=tincknoten2
TCPOnly=yes

Windows-Nutzer setzen die Adresse des VPN-


Adapters über die Eigenschaften des Netzwerk-
Interfaces. Da das VPN aus mehreren lokalen
Netzen aus dem Bereich 192.168.0.0/16 besteht,
erhält die Schnittstelle die Netzwerkmaske
Nach den ersten Aufruf registriert sich Tinc
255.255.0.0. Die Einträge für das Standard-Gateway
mit dem passenden Profil als Windows-
und die DNS-Server bleiben leer.
Dienst, der beim Booten automatisch
startet.

file://C:\Documents and Settings\Benutzer\Desktop\heise Netze - 24.09.09 - Dezentral... 26.09.2009


heise Netze - 24.09.09 - Dezentrales VPN mit Tinc Page 5 of 5

Sind diese Vorarbeiten erledigt, tauscht der mobile Knoten mit seinen Verbindungspartnern
die Dateien mit den öffentlichen Schlüsseln und den Einstellungen untereinander aus.

In Aktion
Anschließend starten alle beteiligten Knoten auf einer Administrator-Konsole das VPN mit
dem Kommando tincd -D -d3 -n MeinTincVPN. Der Parameter -D verhindert dabei,
dass sich Tinc als Hindergrund-Prozess absetzt. Die Option -d3 erhöht das Debug-Level
der Software, sodass sie beispielsweise auch übertragene Pakete meldet, und über die
Option -n findet Tinc das gewünschte VPN-Profil.

Da unter Windows die Programmdatei tincd nicht automatisch im Suchpfad liegt, wechselt
man auf einer Administrator-Eingabeaufforderung ins Programmverzeichnis, meist
c:\Program Files\tinc, und startet dort das Kommando.

Auf Windows beendet die Tastenkombination Strg+c


diesen Testlauf. Unter Linux stoppen die gleichen
Tasten das Programm jedoch nicht, sondern erhöhen
bis zur nächsten Eingabe der Tastenkombination nur
das Debug-Level auf den maximalen Wert von 5.
Zum ordnungsgemäßen Beenden setzt man hier den
Befehl tincd -k -n MeinTincVPN ab, der den Tinc-
Prozess für das gewünschte VPN-Profil geregelt
beendet.
Ohne zusätzliche Parameter gibt sich Tinc
Auf Debian und Ubuntu lassen sich die Tinc-VPN- äußerst schweigsam und zeigt keinerlei
Profile beim Booten starten, wenn man deren Namen Infos über den Verbindungsaufbau an.
in die Datei /etc/tinc/nets.boot einträgt. Unter Abhilfe schafft die zusätzliche Option -d.
Windows erledigt eine Batch-Datei die Einwahl für
Außendienstmitarbeiter oder die Software läuft als Systemdienst im Hintergrund. Tinc
registriert sich als Windows-Dienst, dessen Eigenschaften sich über die Systemsteuerung
einrichten lassen. Dazu wechselt man ins Programmverzeichnis und führt als Administrator
das Kommando tincd -n Profilname aus. Der Befehl tincd -k -n Profilname löscht
Tinc wieder aus der Liste der Windows-Dienste. (rek[3])

URL dieses Artikels:


http://www.heise.de/netze/artikel/145795

Links in diesem Artikel:


[1] http://tinc-vpn.org/
[2] http://tinc-vpn.org/documentation/tinc_toc
[3] mailto:rek@ct.heise.de

Copyright © 2009 Heise Zeitschriften Verlag


International: The H, The H Security, The H Open Source, heise online Polska, heise Security Polska, heise Open Source Polska, heise Networks P

file://C:\Documents and Settings\Benutzer\Desktop\heise Netze - 24.09.09 - Dezentral... 26.09.2009