Manchmal ist es nötig einen VPN-Tunnel zwischen zwei Punkten (meiste Orten) herzustellen. OpenVPN ist eine OpenSource Software mit der VPN-Verbindungen hergestellt werden.
Verbindungen
In der Regel unterscheidet man zwei Arten: "End to End" und "Side to Side".
End to End
Zwei Geräte sind direkt per VPN-Tunnel miteinander verbunden und können sich gegenseitig erreichen. Beide Geräte bauen über das Internet einen privaten Tunnel (meist verschlüsselt) von PC zu PC auf. An der Kommunikation können nur diese beiden PCs teilnehmen. Es ist nicht möglich von einem PC an Standort A ein anderes Gerät (außer dem Tunnelpartner) zu erreichen. Nur der PC der Gegenseite, mit dem die Verbindung hergestellt wurde, lässt sich erreichen.
Side to Side
Bei diesem Tunnel wird i. d. R. die Verbindung zwischen zwei Routern hergestellt. Zweck ist es, die dahinter liegenden Netzwerke per VPN zu erreichen. Geräte aus Standort A können Geräte aus Standort B erreichen und umgekehrt. Mitarbeiter aus der Filiale können den Fileserver der Hauptniederlassung erreichen.
End to Side
Das ist quasi eine Mischung. Die eine Seite ist eine "Site"-Verbindung und die andere eine "End"-Verbindung. Das ist üblich bei Roadwarrior (mobile Geräte wie Laptop), die von außen sich zum Unternehmen verbinden, um Zugriff auf das Unternehmensnetzwerk zu haben.
In der Regel sind alle diese Verbindungen verschlüsselt, um die Daten innerhalb des Tunnels zu schützen. Dazu können Benutzerauthentifizierung, zertifikatbasierte Authentifizierung oder "Pre-Shared-Key"-Auth verwendet werden.
TCP oder UDP?
Bei der TCP-Verbindung wird sichergestellt, dass die Datenpakete wirklich auf der Gegenseite ankommen. Das klingt im ersten Moment nach etwas, was man verwenden sollte. Da innerhalb der Tunnelverbindung die Pakete aber schon mittels TCP transportiert werden und somit die Verbindungssicherheit gewährleistet ist, macht für die Tunnelverbindung selbst TCP keinen Sinn. Warum sollte man den Tunnel TCP verbinden, wenn innerhalb des Tunnels ebenfalls TCP herrscht? Bei Paketverlust würde TCP innerhalb des Tunnels bereits greifen. TCP für den Tunnel selbst führt dazu, dass die Verbindung langsamer wird. Wer es natürlich ganz besonders "sicher" möchte, der kann TCP verwenden.
Einfache Konfiguration
Hier ein Beispiel einer einfachen openvpn.conf:
# Einfache Config ohne Verschlüsselung
# Festlegen welches Interface remote und welches local istdev tun
local 172.19.0.211
remote 172.19.0.243# festlegen der IP des tun-devices. Also der IPs innerhalb des Tunnels.
# Erst die eigene IP, dann die Remote-IP
ifconfig 172.31.1.2 172.31.1.1# Folgende Zeile setzt die Route, um das Netz auf der anderen Seite zu erreichen:# Erst das Remote-Netz, dann Remote-Netzmask und zuletzt das local-Gateway.route 172.23.243.0 255.255.255.0 172.31.1.2
Wenn man nur das nutzt, dann würde das schon funktionieren, aber es ist nichts verschlüsselt. Die Kommunikation findet im Klartext statt. Zum testen der Verbindung ist das okay, aber niemals Daten über die Leitung schicken. Höchstens ein Ping oder ein "Hallo".
Es muss noch eine Verschlüsselung her und die bauen wir jetzt ein. Das ist ein sog. "preshared Key".
Dazu zwei Schritte:
Natürlich ist der Pfad anzupassen, falls die Datei myopenvpn.key nicht in /etc/openvpn/ liegen sollte. Und dann natürlich die Datei auf den Remote-Computer kopieren, dass beide Kommunikationspartner den gleichen schlüssel haben.
OpenVPN neu starten (auf beiden!) und ab jetzt sollte die Verbindung stehen.
Hinweis zur Verschlüsselung:
OpenVPN arbeitet "single-threaded". Das bedeutet, dass es nicht mehr als einen Kern nutzen kann. Die Geschwindigkeit, die verschlüsselt über die Leitung geschickt werden kann, hängt maßgeblich von der Geschwindigkeit der CPU ab. Mehr Kerne bringt nichts.