Zum Inhalt

VPN mit tinc

Vorwort

Bisher habe ich lediglich VPNs mit OpenVPN aufgebaut. Solche VPNs haben den Vorteil, dass wir nicht im Vorhinein für alle Teilnehmer Schlüssel erzeugen müssten weil alle sich mit einem Server verbinden und nur dieser die Schlüssel prüfen muss.
Bei tinc müssen wir jedem Teilnehmer alle anderen Teilnehmer vorher bekannt geben. Der Einfachheit halber hat deshalb jeder alle Schlüssel, d.h. wir müssen uns nur absprechen, dass nicht zwei den selben Schlüssel verwenden.
Bei OpenVPN hätten wir auch den Nachteil, dass der gesamte Verkehr über einen Server läuft und sich somit die Laufzeiten und Verarbeitungszeit am Server addieren (schlechte Pings).
Durch tinc ist hingegen ein Peer-to-Peer Netzwerk möglich. Das bringt einen enormen Vorteil weil theoretisch jeder ein Spiel aufmachen kann und die Kommunikation dann direkt zu ihm läuft. Damit das auch gut funktioniert: Portweiterleitung einrichten und Firewall Einstellungen beachten.

Download

Download für Windows und Linux, Passwort im geheimen Bereich. Das Skript zum Erzeugen der Konfiguration findet ihr mittlerweile hier.

Virtueller Netzwerkadapter (TAP V9)

Zuerst benötigt ihr einen virtuellen Netzwerkadapter. Möglicherweise existiert aber auch schon einer auf Eurem Rechner wenn ihr z.B. OpenVPN oder Teamviever VPN nutzt (dann braucht ihr das hier nicht unbedingt machen, siehe Konfiguration anpassen).

Ihr entpackt die 7z Datei mit 7-zip -> Hier entpacken und erhaltet den Ordner "tinc". Dort wechselt Ihr in den Ordner "tap-win64".
Dort mit Rechtsklick "Als Administrator ausführen" auf die Datei "addtap.bat".
tap1
tap2
Danach wechselt Ihr mit Windowstaste + R und er Eingabe von control.exe /NAME Microsoft.NetworkAndSharingCenter oder Doppelklick auf die Datei "Netzwerk und Freigabecenter.cmd" in das Netzwert und Freigabecenter. Dort unter Adaptereinstellungen ändern benennt ihr den neuen "TAP-Win32 Adapter V9" in TAP1 um (oder was anderes, siehe Konfiguration anpassen).
tap3

IP manuell zuweisen

Achtung! Es wird dringend empfohlen die IP manuell einzustellen, sonst dauert der Verbindungsaufbau aus unbekannten Gründen viel länger...
Theoretisch weist aber bei Bedarf ein DHCP Server auf dem "Master" auch ein IP zu.

Wichtig! Hier könnt ihr nachsehen welche IPs schon vergeben sind und Eure angeben.

Das Netz lautet 192.168.235.0/24. Die IPs 192.168.235.1, 192.168.235.10 - 40 sind als DHCP Bereich reserviert.
tap4

Wichtig! Es muss einen Standardgateway geben, sonst kann man keine Firewall Einstellungen zuweisen.
Wichtig! Einige Spiele können nur LAN Spiele finden wenn hier die Metrik auf < 20 angepasst wurde.

Tinc starten

Für das Event habe ich 40 Schlüsselpaare erzeugt mit den Namen der Spielfiguren aus Monopoly, einigen Charakteren aus Harry Potter, von Süßspeisen und von Zeichentrickfiguren. Der Einfachheit halber hat jeder jetzt alle Schlüssel darum müssen wir uns absprechen damit jeder Zugang nur einmal verwendet wird.
Hier könnt ihr nachsehen welche Schlüssel schon vergeben sind und Euren angeben.

tinc1
Jetzt eine ".cmd" Datei doppelklicken.
firewall1
Dem tinc Daemon bitte unbedingt erlauben einen Port nach draussen zu öffen, siehe Hinweise.
tinc2
Das Fenster "vpn - tinc-start ..." bitte nicht schließen sonst wird die Verbindung zum VPN getrennt. Das andere Fenster "cmd.exe" dient nur zu Info wie viel Verkehr wir haben (höhö) und kann auch geschlossen werden. Der tinc Daemon baut eine Verbindung zum Master auf. Master ist dieser Server (lan.epwg.de). Dort erhält er die Daten der anderen Teilnehmer und versucht auch direkt zu diesen eine Verbindung aufzubauen damit die Kommunikation nicht komplett über den Master laufen muss.
tinc3
Wenn alles funktioniert hat dann hat der TAP Adapter jetzt Verbindung und per DHCP oder manuell eine IPv4 Adresse erhalten.

Firewall Einstellungen

Der TAP Adapter ist jetzt in Betrieb, leider erkennt Windows ihn als Öffentliches Netzwerk und macht daher nach Außen hin dicht. Das sollten wir ändern damit jeder später theoretisch ein Spiel erstellen kann.
firewall2
Merken: aktuell heißt das Netzwerk noch "Netzwerk".

Das Ergebnis sollte so aussehen:
firewall5

Windows 10 Pro

Mit Windowstaste + R und der Eingabe von secpol.msc öffnen wir den Sicherheitsrichtlinien Editor.
firewall3
Dort unter "Netzwerklisten-Manager-Richtlinien" öffnen wir per Rechtsklick die Eigenschaften von "Netzwerk".

Hier können wir (optional) einen Namen vergeben. Und (Wichtig!) den Standorttyp auf "Privat" stellen.
firewall4

Windows 10 Home

Hier ist es leider nicht einfach möglich das Netzwerk umzubenennen aber wir können es als privates Netzwerk umstellen. Dazu einfach Powershell mit Rechtsklick "Als Administrator ausführen" und den Befehl
Set-NetConnectionProfile -InterfaceAlias "TAP1" -NetworkCategory Private
eingeben.
firewall6

Hinweise

Portweiterleitung einrichten

tincd möchte die anderen Teilnehmer direkt über Port 655 TCP/UDP kontaktieren. Das macht das VPN schneller und ausfallsicherer (man kann z.B. den Master neu starten ohne dass das Netzwerk ausfällt).

Achtung! Wenn zwei Rechner hinter dem selben Internetanschluss ins VPN wollen, dann müsst ihr den Port bei einem verändern, z.B. auf 656. Sonst sind die anderen Teilnehmer verwirrt, siehe Hinweise).
NEU: das geschieht nun automatisch über das Startskript. So verwendet kein Teilnehmer denselben Port.

Wichtig! Das Port das ihr zum Internet hin aufmacht und auf Euren Rechner weiterleitet muss dasselbe sein. Es bringt nichts nach außen z.B. Port 1655 zu öffnen und dann auf Port 655 weiterzuleiten.

Automatische Portweiterleitung über UPnP

Die aktuelle Version von Tinc versucht automatisch über das UPnP Protokoll einen Portweiterleitung einzurichten. Damit das klappt muss das der Router unterstützen und für den verwendeten Rechner erlauben. Bei meiner Fritzbox lautet das Häckchen mit dem man das freischaltet "Selbstständige Portfreigaben für dieses Gerät erlauben.".

Manuelle Portweiterleitung

Es wäre als super wenn Ihr es hinbekommt bei Eurem Internet Router eine Portweiterleitung auf Euren Rechner einrichten könntet. bei meiner Fritzbox funktioniert das z.B. so:

  • Im Webbrowser http://fritz.box/ öffnen.
  • Passwort eingeben (falls nicht geändert steht das Passwort auf der Unterseite der Fritzbox).
  • Unter Internet -> Freigaben auf "Gerät für Freigaben hinzufügen" klicken.
  • Als "Gerät" entweder die IP oder den Namen des eigenen Rechners auswählen.
    fritz1
  • Auf "Neue Freigabe" klicken und eine Portweiterleitung von extern Port 655 auf den Rechner Port 655 jeweils für TCP und UDP anlegen, wenn möglich IPv4 und IPv6.
    fritz2
  • Nach Betätigen von "OK" sind bei meiner Fritzbox vier Regeln aktiv.
    fritz3

Konfiguration anpassen

In der Datei tinc\tincvpn\tinc.conf:

Mode = switch
AddressFamily = any
Interface = TAP1
DeviceType = tap
BroadcastSubnet = 192.168.235.0/24
ConnectTo = janus
LocalDiscovery = yes
LogLevel = 1
ProcessPriority = high
#BindToAddress = * 655
UPnP = yes
kann unter Interface der Name des TAP Adapters geändert werden und unter BindToAddress steht der verwendete Port und die IP (* bedeutet Port auf allen IPs öffnen).
Das verwendete Port ist ggf. anzupassen (z.B. Wenn zwei Teilnehmer hinter demselben Internetzugang sitzen).
NEU: über das Startskript ist eigentlich sichergestellt, dass nie zwei Zugänge denselben Port verwenden. Die Zuweisung erfolgt über das Skript tinc-start.cmd.
Wenn UPnP funktioniert (Router muss es unterstützen und der Rechner muss dafür freigeschaltet sein) dann kann tinc selbstständig den Port ins Internet öffnen.

Warum finde ich keine Spiele wenn Jemand eines aufgemacht hat?

Einige Spiele haben Probleme damit, dass Windows mehrere Netzwerkkarten hat. Die Lösung kann sein alle ungenutzten (z.B. die von VMWare und Virtualbox) zu deaktivieren. Dann bleiben aber mindestens der TAP Adapter und ein WLAN oder LAN Adapter übrig und das Spiel kann sich u. U. immer noch nicht entscheiden.
Unter Windows 7 gab es die Möglichkeit die Netzwerkadapter über ein eher verstecktes Menü zu ändern. Unter Windows 10 ist das Menü leider entfernt worden. Es geht hier etwas umständlich durch Anpassen der Metrik.

Bei einigen Spielen mag es aber partout nicht funktionieren. Darum ist die Lösung meist direkt auf die IP des Spiele-Hosts zu verbinden. Wie das geht findet man raus wenn man Kommandozeilenargumente an den Spieleaufruf anhängt, Kommandos in die Ingameconsole eingibt oder im Spielemenü nach eine Möglichkeit sucht direkt zu einem Spiel zu verbinden.