VPN Netzwerk mit Tomato

tomatoHeute möchte ich beschreiben, wie man mit der Tomato Firmware ein VPN-Netzwerk aufbaut.

 

 

Router-Auswahl

Zunächst benötigt man hierfür natürlich einen entsprechenden Router, auf welche die Tomato Firmware “geflashed” werden kann.
Es eignen sich folgende Modelle:

Nicht unterstützt werden (neben allen anderen Routern) insbesondere folgende Varianten:

  • Linksys WRT54G/GS v5 oder neuere WRT54G/GS Router.

Firmware

Die ursprüngliche Tomato Version, welche oben verlinkt ist, erfüllt zwar bereits mehr als ihren Zweck, jedoch bietet sie keinen nativen Support einer VPN Verbindung.
Daher wurde seitens eines anderen Entwicklers ein spezieller Tomato-VPN-Mod entwickelt, der sowohl die Möglichkeit zur Einrichten eines VPN-Servers sowie Clients bietet und alle dazu notwendigen Pakete in der Firmware enthält.

Folgend die Features dieses Mods:

  • Basierend auf der originalen Tomato Firmware (Unterstützung für “New Devices” ebenfalls vorhanden)
  • OpenVPN ist vollständig als System-Service intigriert mit optionaler LZO-Kompression
  • TLS (optional mit HMAC Authentifizierung per statischem Schlüssel) und Verschlüsselung per statischem Schlüssel wird unterstützt
  • Verbindungen über UDP und TCP möglich
  • Dynamische TAP und TUN Verbindungen unterstützt
  • “Site-to-site” Tunnel werden ohne zusätzliche Konfiguration unterstützt
  • Automatische Anpassung der Firewall
  • und vieles mehr

Zu bekommen ist diese angepasst Firmware hier.

VPN-Typen

Wurde die Firmware erfolgreich auf dem Router installiert, kann es nun zur Einrichtung der VPN-Verbindung kommen.
Dazu stehen mehrere Möglichkeiten zur Verfügung. Die erste Frage, die man sich stellen sollte betrifft die TUN oder TAP Verbindung.
Kurz gefasst handelt es sich bei einer TAP Verbindung um eine virtuelle ISO/OSI Layer 2 Verbindung. Dies bedeutet, dass die Netzwerke, welche per VPN verbunden sind, durch die Router gebrückt werden und es wie ein großes, physikalisches Netzwerk erscheint, welches sich so natürlich im gleichen Subnetz befindet. Ein großer Vorteil ist die Errichtung des Netzwerkes ohne zusätzliches Routing. Nachteile können zum Beispiel entstehen, falls man mehrere DHCP-Server einsetzen möchte. Die Vor- und Nachteile eine TUN-Verbindung kann man sich nun selbst ausmalen, zu erwähnen sei, dass bei diesem Verbindungstyp mehrere Subnetze über eine VPN-Verbindung kommunizieren. Es ist hierfür also notwendig, dass sich alle VPN-Endstellen in unterschiedlichen Sub-Netzen befinden.

Die zweite Frage betrifft den VPN-Server. Es zum einen die Möglichkeit, einen der Tomato-Router als VPN-Server zu deklarieren, zum anderen wäre es möglich, einen zentralen VPN-Server zu wählen. Für welche der beiden Möglichkeiten sich auch entschieden wird, als VPN-Server sollte das Gerät mit der schnellsten Internetanbindung dienen.

Vorarbeit

Zunächst müssen die Zertifikate für die VPN-Verbindung erstellt werden.
Anschließend sollte in jedem Gerät NTP aktiviert werden, da der Server bei einer falsch eingestellten Uhr das Zertifikat zurückweisen würde.
Ich benutze hierfür die 3 Zeit-Server der Physikalisch-Technischen Bundesanstalt:

  • ptbtime1.ptb.de
  • ptbtime2.ptb.de
  • ptbtime3.ptb.de

 

VPN-Client einrichten

Wir öffnen im Web-Interface von Tomato VPN Tunneling -> Client -> Basic
Dort aktivierest du Start with WAN.
Die restlichen Einstellungen, insbesondere die TUN oder TAP Verbindung sowie die Serveradresse sollte natürlich der Serverkonfiguration entsprechen.
Nun öffne den Bereich VPN Tunneling —> Server —> Keys

Füge in die dortigen Felder die Inhalte der entsprechenden Datei der erstellten Zertifikate.

 

Eingabefeld Datei
Certificate Authority ca.crt
Client Certificate server.crt
Client Key server.key

 

Hinweis: Kopiere nur den Bereich der wie folgt beginnt (die Zeile selbst ebenfalls kopieren):

—–BEGIN CERTIFICATE—–

und wie folgt endet (inklusive dieser Zeile):

—–END CERTIFICATE—–

So bzw. so ähnlich (natürlich mit deinen eigenen Schlüsseln) sollte es nun aussehen:

 

Nachdem diese Einstellungen gespeichert wurden, starten wir durch einen Klick auf Start Now den VPN-Client und prüfen unter Status, ob die Verbindung aufgebaut wird. Ein Ping ins entfernte VPN-Netz schafft die Gewissheit, dass die Verbindung steht und funktioniert.

 

VPN-Client unter Windows einrichten

 

Eine weitere Möglichkeit, sich zu einem OpenVPN-Server zu verbinden (hier insbesondere zum Tomato-VPN-Server) besteht mit dem OpenVPN-Client für Windows. Diesen kann man hier kostenfrei herunterladen.
Nach der Installation des Clients und ggf. eines Neustarts des Computers geht es zur grundsätzlichen Konfiguration des Clients. Der einfachste Weg besteht darin, eine Konfigurationsdatei zu erstellen.

Dazu erstellt man eine Textdatei mit der Endung .ovpn und fügt dieser folgende Zeilen hinzu:

client
proto tcp
dev tap
remote 123.456.789.123 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3

Hier die Beschreibung der Zeilen im Einzelnen:

client // Gibt an, dass es sich hierbei um einen Client handelt
proto tcp // Das Protokoll der Verbindung, muss mit der Einstellung des Servers übereinstimmen
dev tap // Der VPN-Verbindungstyp, muss mit der Einstellung des Servers übereinstimmen
remote 123.456.789.123 1194 // Die Adresse des Servers, möglich sind die Eingabe einer IP oder eines Hosts. Getrennt durch ein Leerzeichen folgt der Port, welcher im Server konfiguriert ist
resolv-retry infinite //Der Client soll unendich oft versuchen, den ggf. o.a. Hostnamen per DNS aufzulösen
nobind
persist-key
persist-tun
ca ca.crt // Hier der Verweis zu der Datei ca.crt . Diese sollte im gleichen Verzeichnis wie die .ovpn Konfigurationsdatei liegen
cert client.crt // Der Verweis zu der zuvor erstellen Zertifikatsdatei des Clients. Diese sollte im gleichen Verzeichnis wie die .ovpn Konfigurationsdatei liegen
key client.key // Der Verweis zu der zuvor erstellen Schlüsseldatei des Clients. Diese sollte im gleichen Verzeichnis wie die .ovpn Konfigurationsdatei liegen
comp-lzo // Konfiuration der Kompressionsmethode
verb 3 // Intensität der Protokollierung

Im OpenVPN-Client selbst klickt man rechts unten auf das Pluszeichen, um eine neue Verbindung hinzuzufügen. Im darauffolgenden Dialogfenster wählt man in diesem Fall die Importmöglichkeit von einem “Local File”

 

 

Anschließend öffnet man die zuvor eingerichtete .ovpn Datei. War die Einrichtung der neuen Verbindung erfolgreich, sieht der Startbildschirm des OpenVPN-Clients nun so aus:

 

 

Ein Klick auf die soeben errichtete Verbindung öffnet diese und verbindet sich zum angegeben VPN-Server.

 

 

VPN-Server einrichten

 

Eine Anleitung zur Installation und Konfiguration eines OpenVPN-Servers unter Linux gibt es hier.

Die Einrichtung des VPN-Servers unter Tomato ist der des Clients recht ähnlich. Zu beachten sei die Einrichtung einer DynDNS-Adresse, sollte der Server per DSL-Leitung o.ä. betrieben werden, bei der der Provider eine dynamische IP-Adresse vergibt.

Das folgende Bild veranschaulicht eine beispielhafte Konfiguration:

 

 

Auf der Seite VPN Tunneling -> Server -> Basic aktiviert man Start with WAN, wählt den VPN-Typ (TUN oder TAP, siehe oben) sowie das Protokoll (je nach Netzwerkkonfiguration und persönlicher Überzeugung. Wichtig ist nur eine einheitliche Konfiguration). Zudem legen wir hier den Port fest, auf welchem der VPN-Server künftig auf eingehende Verbindungen “lauscht”. Sollte der Tomato-Router hinter einem weiteren Router stehen, sollten wir sicherstellen, dass dieser Port des ausgewählten Protokolls vom anderen Router zum Tomato-Router “durchgereicht” wird. Meistens nennt sich dieser Punkt “Port-Forwarding“.

Die Firewall lassen wir automatisch erstellen, die Authorisationsmethode legen wir einheitlich mit den Cients fest.

Bei der Vergabe der IP-Adressen unserer VPN Clients besteht zu einem die Möglichkeit, dies durch den eh bereits im Router aktivierten DHCP-Server erledigen zu lassen oder wir legen direkt hier einen IP-Adressenpool für die VPN-Clients fest.

Auf der Seite VPN Tunneling -> Server -> Advanced besteht die Möglichkeit, eigene Konfigurationszeilen zu hinterlegen. Solltest du beispielsweise planen, mehrere Clients mit ein und dem gleichen Zertifikat zum Server verbinden zu lassen, bedarf es unter Custom Configuration der Zeile

duplicate-cn

Unter der Registerkarte Keys tragen wir wie auch beim Client die Schlüssel der zuvor erstellten Zertifikate ein (siehe folgender Tabelle).

 

Eingabefeld Datei
Certificate Authority ca.crt
Server Certificate server.crt
Server Key server.key
Diffie Hellman parameters dh1024.pem

 

Auch hier der Hinweis: Kopiere nur den Bereich der wie folgt beginnt (die Zeile selbst ebenfalls kopieren):

—–BEGIN CERTIFICATE—–

und wie folgt endet (inklusive dieser Zeile):

—–END CERTIFICATE—–

So bzw. so ähnlich (natürlich mit deinen eigenen Schlüsseln) sollte es nun aussehen:

 

Speichern natürlich nicht vergessen und abschließend mit einem Klick auf Start Now den VPN-Sever starten. Unter VPN Tunneling -> Server -> Status wird angezeigt, welche Clients verbunden sind. Sollte dies so sein, ist der VPN-Server auf dem Tomato-Router fertig eingerichtet und betriebsbereit.