Heute 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:
- Linksys WRT54GL v1.x, WRT54G v1-v4, WRT54GS v1-v4, WRTSL54GS (keine USB Unterstützung)
- Buffalo WHR-G54S, WHR-HP-G54, WZR-G54, WBR2-G54, WBR-G54,WZR-HP-G54, WZR-RS-G54, WZR-RS-G54HP, WVR-G54-NF, WHR2-A54-G54, WHR3-AG54
- Asus WL520GU (keine USB Unterstützung), WL500G Premium (keine USB Unterstützung), WL500GE
- Sparklan WX6615GT, Fuji RT390W, Microsoft MN-700
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.
Verwandte Beiträge
-
VPN Zertifikate erstellenWährend der Installation des OpenVPN-Servers auf einem Linux basierenden System werden (in unserem Fall) die sog.…
-
-
Reverseproxy für OpenHABWenn wir OpenHAB aus den entsprechenden Repositories installiert haben, wurde ein neuer, nicht priviligierter Nutzer…
VPN Netzwerk mit Tomato
Heute 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:
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:
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:
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.
Hinweis: Kopiere nur den Bereich der wie folgt beginnt (die Zeile selbst ebenfalls kopieren):
und wie folgt endet (inklusive dieser Zeile):
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:
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
Unter der Registerkarte Keys tragen wir wie auch beim Client die Schlüssel der zuvor erstellten Zertifikate ein (siehe folgender Tabelle).
Auch hier der Hinweis: Kopiere nur den Bereich der wie folgt beginnt (die Zeile selbst ebenfalls kopieren):
und wie folgt endet (inklusive dieser Zeile):
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.
Verwandte Beiträge
Kann man einen V-Server oder einen dedizierten Server in einem Rechenzentrum sein Eigen nennen, bietet…
Während der Installation des OpenVPN-Servers auf einem Linux basierenden System werden (in unserem Fall) die sog.…
Wie oft kam es vor, dass ich unterwegs war, das Smartphone als mobilen Hotspot verwendete…
Ein Umzug steht an und das bisherige 48HE Rack bleibt, wo es ist. Meine kleine,…
Wenn wir OpenHAB aus den entsprechenden Repositories installiert haben, wurde ein neuer, nicht priviligierter Nutzer…