Erster Tunnel

Aus OpenVPN Wiki

Wechseln zu: Navigation, Suche

Da ich hier im Forum schon häufiger die selben Antworten auf die selben Fragen zur Verbindung zweier PCs über OpenVPN gegeben habe und gerade selber mal wieder OpenVPN auf einem System installiere, dachte ich mir, ich könnt' auch gleich ein *kleines* Tutorial dazu schreiben, in der Hoffnung, daß es zahlreichen Interessierten die wesentlichsten Hürden nimmt, an der scheinbar viele hier zunächst scheitern.

Ich versuche, mich kurz zu fassen und hoffe, daß ich es halbwegs übersichtlich und verständlich darstellen kann.

Die folgende Ausgangssituation wird wohl für die meisten hier zutreffend sein:

Ausgangssituation:
- 2 PCs an 2 verschiedenen Standorten,
- jedes PC System mit Windows XP (Pro oder Home) und installiertem Servicepack 2,
- mit gängiger Netzwerkkarte (Onboard-, PCI-Einsteckkarte oder auch WLAN-Karte),
- mit aktivierter Windows Firewall
- jeder der beiden PCs ist mittels der Netzwerkkarte (Lan oder Wlan) an den Router angeschlossen bzw. verbunden, der Router wiederum ist per DSL ans Internet angebunden.(DSL-Flatrate (heute eigentlich üblich) ist empfohlen)
- in meinem Fall haben die Netzwerkkarten der PCs eine feste IP-Adresse zugewiesen, es sollte aber genauso funktionieren, falls ihr DHCP verwendet, was ich hier aber nicht getestet habe.

Also PC (OpenVPN-Server) <--> Router <--> Internet <--> Router <--> PC (OpenVPN-Client)

Ziele:

- Verbinden der beiden PCs über OpenVPN (als Erweiterung: Verbindung zweier kompletter Netzwerke)
- Verwendung des tap-device (dev-tap)
- KEINE Netzwerkbrücke (Bridging), sondern *normales* Routing (somit auch für Windows 2000 (Server) geeignet)

OpenVPN-Version hier im Beispiel: 2.0.7

Und los gehts:

Inhaltsverzeichnis

Installation von OpenVPN

- OpenVPN wird in den Standardordner installiert (c:\programme\openvpn)
- OpenVPN muß auf beiden PCs installiert werden, einer davon wird als sog. Server" konfiguriert, der andere als sog. "Client".
- für gewöhnlich meckert XP bei der Installation des TAP-Adapters, daß die Software den Windows-Logo-Test nicht bestanden hat. Hier muß auf "Installation fortsetzen" geklickt werden.
- den Tap-Adapter benenne ich in der Netzwerkumgebung um in einen kürzeren und aussagekräftigeren Namen, hier z.b. in "openvpn".
- dem bzw. den TAP-Adapter(n) wird KEINE feste IP-Adresse zugewiesen, also auf "DHCP" stehen lassen.

Weiter will ich an dieser Stelle nicht auf die Installation eingehen, das sollte eigentlich jeder hinbekommen.


einen PC als "OpenVPN-Server" konfigurieren

Zur Verschlüsselung/Authentifizierung verwende ich Zertifikate, auf deren Erstellung ich hier aber nicht näher eingehe, denn hierzu gibt es im Wiki eine sehr gute Anleitung! http://wiki.openvpn.eu/index.php/Erzeugen_einer_PKI_mit_EasyRSA

Die Zertifikate sind bei mir abgelegt im Verzeichnis c:\programme\openvpn\keys, dieser Pfad muß dann in der config-Datei angegeben werden.

Konfigurationsdatei server.ovpn

Die folgende Beispieldatei für den Server beinhaltet die wesentlichsten Parameter und sollte in der Form eigentlich bei jedem funktionieren. Die server.ovpn wird auf dem OpenVPN-Server-PC im Ordner c:\programme\openvpn\config gespeichert. Die Zeilen, die mit "#" beginnen, sind Kommentare und müssen nicht in der ovpn-Datei mit angegeben werden, sondern dienen hier lediglich der Erläuterung.

Die Datei server.ovpn sollte als Minimum folgendes enthalten: Code:

port 1194
# legt den zu verwendenen Port fest

proto udp
# Verwendung des Protokolls UDP (Standard)

mode server
# "ich bin der Server"

dev tap
# verwendet das tap-device

dev-node openvpn
# "openvpn" heißt mein virtueller und umbenannter Netzwerkadapter
# Achtung: hierbei wird Groß-/Kleinschreibung unterschieden !!!

ifconfig 10.0.0.1 255.255.255.0
# legt die IP-Adresse und Subnetzmaske für den Server fest

ifconfig-pool 10.0.0.2 10.0.0.9
# legt einen IP-Adresspool für die Clients fest.
# Der Bereich kann an die eigenen Bedürfnisse bzw. an die Anzahl der Clients angepaßt werden.

client-to-client
# die Clients (falls mehrere) können sich untereinander sehen

tls-server
# schaltet TLS ein und Rolle des Servers beim Handshake

dh   c:\\programme\\openvpn\\keys\\dh1024.pem
# Pfad zur Datei dh1024.pem (die doppelten Backslashes müssen sein!)

ca   c:\\programme\\openvpn\\keys\\ca.crt
# Pfad zur Datei ca.crt (die doppelten Backslashes müssen sein!)

key  c:\\programme\\openvpn\\keys\\server1.key
# Pfad zur Datei server1.key (die doppelten Backslashes müssen sein!)

cert c:\\programme\\openvpn\\keys\\server1.crt
# Pfad zur Datei server1.crt (die doppelten Backslashes müssen sein!)

comp-lzo
# Einschalten der Komprimierung

push "route-gateway 10.0.0.1"
# legt beim Client das Gateway für Verbindungen in das Netz des Servers fest
# als route-gateway muß die IP-Adresse des virtuellen Netzwerkadapters des
# Servers angegeben werden, also die VPN-IP (siehe auch oben bei "ifconfig...")

Die folgenden Einstellungen dienen dazu, die Verbindung stabiler gegen Verbindungsabbrüche zu machen und legt die Protokollierstufe fest Die server.ovpn kann optional mit diesen ergänzt werden.

Code:

tun-mtu 1500
# weist dem TAP-Adapter eine max. MTU von 1500 zu (empfehlenswert bei DSL)

tun-mtu-extra 32
# Zusatzeinstellung für den MTU-Wert (empfehlenswert bei DSL)

# Wichtig: falls die Parameter "tun-mtu" und "tun-mtu-extra" verwendet werden,
# so muß dies bei beiden configs erfolgen,
# also in der Server-config [b]und[/b] in der Client-config !

max-clients 4
# max. 4 Clients können sich zeitgleich zum OpenVPN-Server connecten
# Hinweis: der IP-Adresspool (siehe oben) muß ggfs. entsprechend
# angepaßt werden bzw. groß genug sein.

verb 3
# schaltet die Protokollierung auf die Stufe 3
# ("3" reicht in der Regel, bei Problemen evt. auf 4 od. 5 erhöhen,
# damit mehr protokolliert wird)

mute 50
# max. 50 Fehlermeldungen der gleichen Kategorie werden protokolliert

keepalive 10 60
# Timeouts für den Servermode, ping alle 10 Sek., Neustart, falls nach
# 60 Sek. keine Rückantwort kommt.

ping-timer-rem
persist-key
persist-tun

Die folgenden Einstellungen werden an den Client geschickt, nachdem dieser authentifiziert wurde. Die server.ovpn kann optional mit diesen ergänzt werden.

Code:

push "ping 10"
push "ping-restart 60"
push "ping-timer-rem"

Falls sich in dem Netz, in dem sich der "Server" befindet, noch weitere PCs befinden, die vom Client aus erreicht werden sollen, dann braucht der Client noch eine (oder mehrere) Route(n) in das Lan des Servers. Diese kann man komfortabel vom Server aus gleich an den Client mitschicken, wenn sich dieser verbindet. Die server.ovpn kann optional mit diesen ergänzt werden, wobei x.y zu ersetzen ist

Code:

push "route 192.x.y.0 255.255.255.0"
# legt (beim Client) einen Routingeintrag zum internen Netzwerk im Server-Lan fest
# hier ist das interne Netz auf der Serverseite anzugeben
# z.b. route 192.168.1.0 255.255.255.0


IP-Forwarding beim OpenVPN-Server-PC aktivieren

Sofern im Lan des OpenVPN-Servers noch weitere PCs sind, die vom Client aus erreicht werden sollen, muß (!) am OpenVPN-Server das IP-Forwarding aktiviert werden. Dazu muss man folgenden Schlüssel in der Windows Registry bearbeiten:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

Hier finden Sie den Eintrag "IPEnableRouter" als Datentyp REG_DWORD. Setzen Sie den Wert auf 1.

Achtung: nach der Eintragung in der Registry den PC neu starten, sonst ist das IP-Forwarding nicht aktiv !


Windows-Firewall-Einstellungen am OpenVPN-Server-PC

Damit die integrierte Windows-Firewall die Datenpakete (hier im Beispiel auf Port 1194) auch reinläßt, muß sie entsprechend angepaßt werden:

- die Datei- und Druckerfreigabe in der Ausnahmeliste aktivieren, sonst macht das Ganze ja keinen Sinn (hierdurch wird gleichzeitig auch die eingehende ICMP Echoanforderung akzeptiert, so daß der Server auch anpingbar ist)

- eine neue Ausnahmeregel erstellen über "Port hinzufügen" - Name: z.b. UDP 1194 - Portnummer: 1194 - Protokoll: UDP Bereich: alle Computer (einschießlich Internet)

- eine neue Ausnahmeregel erstellen über "Programm hinzufügen"- und die openvpn.exe aus dem Ordner c:\programme\openvpn\bin\ hinzufügen Bereich: alle Computer (einschließlich Internet)

- der TAP-Adapter sollte gänzlich von der Firewall ausgeklammert werden: Windows-Firewall-Einstellungen --> Erweitert --> Häkchen raus bei dem TAP-Adapter (openvpn)

Somit wäre der OpenVPN-Server-PC eigentlich fertig konfiguriert und kann gestartet werden: rechter Mausklick auf die server.ovpn und "Start OpenVPN..."

Portfreigabe und Portweiterleitung am Router des OpenVPN-Server-Lans einstellen

Damit die Datenpakete von außen (hier im Beispiel: Port 1194) auch beim OpenVPN-Server-PC ankommen, muß am Router der zu verwendende Port (hier: 1194) in der Firewall des Routers freigeschaltet und eine Portweiterleitung für den Port 1194 auf die (interne) IP des OpenVPN-Server-PCs eingerichtet werden. Je nach Hardware- (oder Software-) Router ist das unterschiedlich. Bei einer Fritzbox z.B. gibt es nur die Portweiterleitung, die aber dann gleichzeitig auch den Port freischaltet.

Wenn die (interne) Netzwerkkarte des OpenVPN-Server-PCs z.B. die 192.168.1.2 hat, dann muß also am Router der Port 1194 auf die IP 192.168.1.2 weitergeleitet werden. Wie das in eurem Fall genau geht, müßt ihr ggfs. dem Handbuch des Routers entnehmen.


IP-Adresse des Routers öffentlich machen

Damit man sich von außen zum OpenVPN-Server verbinden kann, muß sichergestellt werden, daß die IP des Routers, der ja die eigentliche Verbindung zum DSL/Internet herstellt, bekannt ist. Die meisten Router verfügen hierzu über die Möglichkeit, die IP z.b. über Dyndns bekannt zu machen. Siehe hierzu Handbuch eures Routers oder z.b. bei www.dyndns.org

den anderen PC als "OpenVPN-Client" konfigurieren

(Installation von OpenVPN wie bei Punkt 1) Die Zertifikate für den (die) Client(s) müssen am OpenVPN-Server erstellt werden und sollten mittels einem *sicheren* Medium an den Client übertragen werden (z.b. per USB-Stick)

Konfigurationsdatei client.ovpn

Die folgende Beispieldatei für den Client beinhaltet die wesentlichsten Parameter und sollte in der Form eigentlich bei jedem funktionieren. Die client.ovpn wird auf dem OpenVPN-Client-PC im Ordner c:\programme\openvpn\config gespeichert.

Die Datei client.ovpn sollte als Minimum folgendes enthalten: Code:

remote yyyyy.dyndns.org
# die öffentliche IP (oder dyndns-Name) des Routers auf der Server-Seite

port 1194
# legt den zu verwendenen Port fest (muß gleich dem Port beim Server sein)

proto udp

dev tap

dev-node openvpn
# Achtung: Groß-/Kleinschreibung beachten

tls-client
# "ich bin der Client"

ca   "...\\ca.crt"
# vollständige Pfadangabe ergänzen, doppelte "\\" beachten

key  "...\\client1.key"
cert "...\\client1.crt"

ns-cert-type server
# der Server überprüft die Zertifikate auf Gültigkeit

comp-lzo

pull
# "pull" muß in der Client-config stehen, damit die push-Anweisungen
# vom Server geholt werden

Die folgenden Einstellungen dienen dazu, die Verbindung stabiler gegen Verbindungsabbrüche zu machen und legt die Protokollierstufe fest. Die client.ovpn kann optional mit diesen ergänzt werden.

Code:

tun-mtu 1500
tun-mtu-extra 32
# siehe Hinweis oben: wenn "tun-mtu" und "tun-mtu-extra",
# dann in beiden configs (Server + Client)
verb 3
mute 50
persist-key
persist-tun

Windows-Firewall-Einstellungen am OpenVPN-Client-PC

Auch hier sollten folgende Anpassungen vorgenommen werden:

- die Datei- und Druckerfreigabe in der Ausnahmeliste aktivieren, sonst macht das Ganze ja keinen Sinn (hierdurch wird gleichzeitig auch die eingehende ICMP Echoanforderung akzeptiert, so daß der Client auch anpingbar ist). Es sei denn, man will nur vom Client auf die Serverseite zugreifen und nicht umgekehrt.

- eine neue Ausnahmeregel erstellen über "Port hinzufügen" - Name: z.b. UDP 1194 - Portnummer: 1194 - Protokoll: UDP Bereich: alle Computer (einschießlich Internet)

- eine neue Ausnahmeregel erstellen über "Programm hinzufügen"- und die openvpn.exe aus dem Ordner c:\programme\openvpn\bin\ hinzufügen Bereich: alle Computer (einschließlich Internet)

- der TAP-Adapter sollte gänzlich von der Firewall ausgeklammert werden: Windows-Firewall-Einstellungen --> Erweitert --> Häkchen raus bei dem TAP-Adapter (openvpn)

IP-Forwarding beim OpenVPN-Client-PC aktivieren

Sofern sich auch im Lan des OpenVPN-Clients noch weitere PCs sind, die vom Server aus erreicht werden sollen, muß (!) am OpenVPN-Client-PC auch das IP-Forwarding aktiviert werden. Aktivieren kann man es eigentlich auf jeden Fall, denn schaden kann's nicht, und man braucht später (z.B. wenn man dann doch irgendwann einen 2. PC hat) nicht mehr daran denken. IP-Forwarding muß auch aktiviert werden, wenn man von der Serverseite aus den Client über dessen LAN-IP anpingen will (anstatt der VPN-IP) Achtung: nach der Eintragung in der Registry den PC neu starten, sonst ist das IP-Forwarding nicht aktiv !

Somit wäre auch der OpenVPN-Client-PC fertig konfiguriert und kann gestartet werden: rechter Mausklick auf die client.ovpn und "Start OpenVPN..."

Portfreigabe am Router des OpenVPN-Client-Lans einstellen

Auch hier sollte gemäß Punkt 3 der Port 1194 in der Firewall des Routers freigeschaltet werden. Eine Portweiterleitung braucht auf der Seite des Clients bzw. des Client-Lans nicht eingerichtet zu werden.

Soo, und mit ein bissel Glück wird die Verbindung zum OpenVPN-Server aufgebaut... Smile

Testen der Verbindung

Die Verbindung kann nun durch Anpingen des anderen PCs getestet werden:

vom Client aus die VPN-IP des OpenVPN-Servers anpingen: ping 10.0.0.1 vom Server aus die VPN-IP des OpenVPN-Clients anpingen: ping 10.0.0.2

In beiden Fällen sollte eine Antwort zurückkommen. Falls ein oder beide ping-Versuche fehlschlagen, so sind die Firewallregeln nochmals zu kontrollieren und ggfs. auch die Portweiterleitung auf der Serverseite (richtige IP?, richtiger Port?) Erst wenn man die Ping-Antworten erhält, macht es Sinn, auch den Zugriff auf ein freigegebenes Verzeichnis oder andere Sachen im Remote-Netzwerk zu testen !!

Routing-Tips / Verbinden zweier Netzwerke

Die folgenden Punkte sind relevant, sofern sich hinter dem VPN-Server (bzw. VPN-Client) noch weitere Rechner befinden, die erreicht werden sollen, bzw. auf die zugegriffen werden soll.

Sofern 2 Netzwerke miteinander verbunden werden, und man von einem PC im Lan 1 (hinter dem VPN-Client) auf einen PC im Lan 2 (hinter dem VPN-Server) zugreifen will, müssen noch zusätzliche Routen eingerichtet werden. Weiterhin setzt dies voraus, daß an beiden PCs (Server + Client) das IP-Forwarding aktiviert ist !! Siehe z.B. Punkt 4.3

Zum Einrichten der erforderlichen Routen ist es hilfreich, sich vorzustellen, wie z.B. ein ping von einem PC den Weg ins VPN oder den Weg übers VPN in das andere Lan findet. Auch eine kleine Skizze erleichtert einem (erfahrungsgemäß) die Fehlersuche sehr.

Bei dieser Konstellation wird bei den folgenden Erläuterungen davon ausgegangen, daß sich *NICHT* mehrere Clients zum Server verbinden, sondern nur eine Verbindung hergestellt wird, die die beiden Netzwerke miteinander verbindet!!

Routen am VPN-Client

Überlegungen: der Client stellt die Verbindung zum Server her, wird authentifiziert,bekommt eine (VPN-)IP, das Gateway zum VPN wird zugewiesen (durch die "route-gateway..."-Anweisung in der server-config) und somit kennt der VPN-Client den Weg ins VPN und zum Server über die VPN-IP des Servers. Damit nun der VPN-Client das LAN des Servers erreichen kann, braucht der VPN-Client eine Route zum Server-LAN. Dies kann man komfortabel durch eine "push route"-Anweisung in der Server-config erreichen (wie bereits oben beschrieben), so daß die notwendige(n) Route(n) beim Client gesetzt werden, nachdem sich dieser verbunden hat. Beispiel: Code:

push "route 192.x.y.0 255.255.255.0"
# wobei für 192.x.y.0 das LAN des Servers einzutragen ist

Routen am VPN-Server

Überlegungen (ähnlich 7.1): der Client hat sich verbunden und eine VPN-IP bekommen. Somit ist der Client vom Server aus über die VPN-IP des Clients anpingbar. Damit nun der VPN-Server das LAN des Clients erreichen kann, braucht der VPN-Server eine Route zum Client-LAN. Hierzu gibts 2 Möglichkeiten: 1. bei bestehender Verbindung (einmalig) eine statische Route am Server eintragen 2. durch ein "up command", das nach Aufbau der Verbindung ausgeführt wird und die Route einträgt Beispiel: Code: zu 1.: im Dos-Fenster:

route -p add 192.x.z.0 mask 255.255.255.0 10.0.0.2 metric 1
# wobei für 192.x.z.0 das LAN des Clients einzutragen ist
# und für die 10.0.0.2 die VPN-IP des Clients

zu 2.: in der server-config:

up routeup.cmd
# wobei die routeup.cmd dann die route-Anweisung enthält:
route add 192.x.z.0 mask 255.255.255.0 10.0.0.2 metric 1

Testen der Verbindung

Mit den Einstellungen gemäß 7.1 und 7.2 sollten sich jetzt Server und Client auch durch die jeweilige LAN-IP anpingen können. vom Client aus die LAN-IP des OpenVPN-Servers anpingen: ping 192.168.1.2 vom Server aus die LAN-IP des OpenVPN-Clients anpingen: ping 192.168.1.x

Einstellungen an den PCs hinterm VPN-Server bzw. hinterm VPN-Client

Je nach Konstellation im jeweiligen Netzwerk müssen auch hier ggfs. Einstellungen vorgenommen werden, und zwar vor allem dann, wenn der VPN-Server (bzw. Client) NICHT gleichzeitig das Standardgateway für die übrigen PCs im eigenen LAN ist.

Beispiel 1: eine Fritzbox als Router, diese ist als Standardgateway an den PCs im Lan eingetragen. Hier ist es am einfachsten/bequemsten, statische Routen an der Fritzbox einzurichten, so daß an den PCs im Lan keine weiteren Einstellungen erforderlich sind: 1. Route ins VPN: - die 10.0.0.0 weiterleiten an die LAN-IP des VPN-PCs im eigenen Netz, der ja wiederum eine Route ins VPN hat. 2. Route ins LAN der Gegenstelle: - die 192.x.z.0 (Netz der Gegenstelle) weiterleiten an die LAN-IP des VPN-PCs im eigenen Netz, der ja wiederum die Route ins VPN hat.

Beispiel 2: statische Route am PC im Lan eintragen Falls z.B. der Router nicht die Möglichkeit bietet, statische Routen einzutragen, oder nur einzelne PCs erreichbar sein sollen anstatt dem ganzen Lan, so kann man das auch direkt am PC im jeweiligen Lan eintragen:

1. Route ins VPN:

route -p add 10.0.0.0 mask 255.255.255.0 192.x.y.1 metric 1

2. Route ins LAN der Gegenstelle:

route -p add 192.x.z.0 mask 255.255.255.0 192.x.y.1 metric 1

(2. erforderlich, falls der betr. PC nicht nur von der anderen Seite aus erreichbar sein soll, sondern selbst auch auf die Gegenseite zugreifen will).

Namensauflösung

Damit nun auch die Namensauflösung klappt und die PCs sich gegenseitig mit Namen anpingen können bzw. natürlich auch Zugriff auf die freigegebenen Verzeichnisse möglich ist, kann man, sofern man z.b. keinen WINS-Server hat, auch einfach einen Eintrag in der hosts-Datei erstellen (c:\windows\system32\drivers\etc\hosts) Beispiel: Code:

192.168.1.2 vpnserver.meine.firma.de   vpnserver
192.168.1.3 pc2.meine.firma.de         pc2
usw.

Ich danke für eure Aufmerksamkeit und hoffe, daß ihr mit dieser Anleitung die meisten Stolpersteine meistert und ich nichts Wesentliches vergessen oder falsch dargestellt habe. Smile

Persönliche Werkzeuge