Tag Archives: openvpn

Home / openvpn
2 Posts

Vorgänger v2.4: HowTo: OpenVPN Server unter Windows Server 2016 und Client Anbindung

Das folgende HowTo zeigt wie ein OpenVPN Server 2.5 auf einem Windows Server installiert wird samt der Erstellung von Zertifizierungsstelle (CA).

 

1. Vorbereitung:

  • fertig installierter Windows 2012/2016/2019 Server
  • Download Community OpenVPN NSIS Package (https://openvpn.net/community-downloads/)

2. Installation OpenVPN Server:

Die Installation kann durchgeführt werden wie in der Vorgängerversion beschrieben. Wichtig ist, dass die EasyRSA Tools ausgewählt werden zur Installation!

 

3. Schlüsselpaare erstellen

In den folgenden Schritten werden folgende Keys bzw. Zertifikate erstellt:

  1. Einmalig: Certificate Authority (CA)  – build-ca.bat
  2. Einmalig: Diffie-Hellman Key – build-dh.bat
  3. Einmalig: Server Certificate – build-key-server.bat
  4. Pro Client ein Client Certificate – build-key.bat

Hinweis: Seit der Version 2.5 werden neue Tools ausgeliefert und die Erstellung der Zertifikate hat sich verändert!

Hierbei sollte man in den Easy-RSA Pfad wechseln in welchen OpenVPN installiert wurde ( C:\Program Files\OpenVPN\easy-rsa ). In diesem Ordner wird die vorhandene Datei vars.bat.example dupliziert oder nur umbenannt in „vars.com.example.vpn“ und folgende Zeilen werden verändert bzw. hinzugefügt.

set_var EASYRSA_PKI		"$PWD/pki.de.name.vpn"
set_var EASYRSA_TEMP_DIR	"C:/tmp_easyrsa"

set_var EASYRSA_REQ_COUNTRY	"DE"
set_var EASYRSA_REQ_PROVINCE	"RLP"
set_var EASYRSA_REQ_CITY	"Koblenz"
set_var EASYRSA_REQ_ORG	"NAME"
set_var EASYRSA_REQ_EMAIL	"info@name.de"
set_var EASYRSA_REQ_OU		"EDV"

set_var EASYRSA_KEY_SIZE	2048
set_var EASYRSA_CA_EXPIRE	3650
set_var EASYRSA_CERT_EXPIRE	1825

Die Gültigkeit der CA beträgt etwas über 2 Jahre was auch grundsätzlich gut und sicherer ist. Im oberen Beispiel wurde die Gültigkeit auf 10 Jahre gesetzt, da dies vom Kunden so gewünscht ist.

Der Pfad EASYRSA_TEMP_DIR sollte unbedingt gesetzt werden da man ansonsten eine Fehlermeldung „Extra arguments given.“ erhält.

Näheres siehe hier.

 

Die EasyRSA Umgebung wird in einer CMS Sitzung (als Administrator starten) mittels „EsyRSA-Start.bat“ aufgerufen

Nun folgt die Erstellung der Zertifizierungsstelle (CA), Erstellung des Server-/Client Zertifikatrequests als auch die anschließende Erstellung der Zertifikate anhand der Requests. Da die Details bereits im Vorgänger Beitrag erklärt wurden folgen lediglich die Befehle ohne nähere Erklärung.

> ./easyrsa --vars=./vars.com.example.vpn init-pki # Initialisierung PKI
> ./easyrsa --vars=./vars.com.example.vpn build-ca # Erstellung Zertifizierungsstelle
> ./easyrsa --vars=./vars.com.example.vpn gen-req server nopass # Generierung Server Request
> ./easyrsa --vars=./vars.com.example.vpn gen-req client1 # Generierung Client Request, pro Client einmal wiederholen
>./easyrsa --vars=./vars.com.example.vpn gen-dh # Diffie-Hellmann generieren
> ./easyrsa --vars=./vars.com.example.vpn sign-req server server # Erstellung Server Zertifikat
> ./easyrsa --vars=./vars.com.example.vpn sign-req client client1 # Erstellung Client Zertifikat

4. Konfiguration OpenVPN Server:

Für den Server werden nun unter „C:\Program Files\OpenVPN“ noch weitere Ordner erstellt:

  • ca.crt
  • dh.pem
  • private/server.key
  • issued/server.crt

Mittels einer administrativen Powershell kann ein bzw. mehrere Netzwerkadapter erstellt werden. Erstmals wurde mit OpenVPN 2.5 das „tapctl“ Tool vorgestellt.

Mittels „.\tapctl.exe create“ wurde ein Netzwerkadapter erstellt. Näheres ist in der Dokumentation zu finden

Der Adapter (LAN-Verbindung X“ kann in der Systemsteuerung umbenannt werden:

 

 

OpenVPN Server Konfig „C:\Program Files\OpenVPN\config-auto\vpn_server_client.ovpn“

##########################
# VPN Server for clients
##########################

# Lokale IP auf welche der Socket/Port gebunden wird
local 1.2.3.4

#Listener des OpenVPN Servers
port 1194

#Protokoll des Servers
proto udp
dev tun
# Zuweisung auf separaten Adapter
dev-node "tap-vpn-server"

##########################
# Zertifikate
##########################

dh "C:\\Program Files\\OpenVPN\\keys\\dh2048.pem"
ca "C:\\Program Files\\OpenVPN\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\keys\\vpn_name.crt"
key "C:\\Program Files\\OpenVPN\\keys\\vpn_name.key"

##########################
# Server-Setup
##########################

# DHCP Subnetz
server 10.0.100.0 255.255.255.0
ifconfig-pool-persist "C:\\Program Files\\OpenVPN\\ipp.txt"

#Ermöglichen von Anfragen von einem Client zum anderen, bei Bedarf die Zeile entfernen
client-to-client

##########################
# Client-Settings (inkl Special Dir)Files
##########################

client-config-dir "C:\\Program Files\\OpenVPN\\ccd"
push "route 192.168.1.0 255.255.255.0"
#push "dhcp-option DNS 192.168.1.10"

##########################
# Defaults
##########################

keepalive 10 120
persist-key
persist-tun

##########################
# Logging
##########################

status "C:\\Program Files\\OpenVPN\\log\\vpn_server_client_status.log"
log "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
log-append "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
verb 3

Hinweis: Die Pfadangaben müssen entweder per „\\“ erfolgen oder mit einem normalen „/“.

Der OpenVPN Server kann mittels „C:\Program Files\OpenVPN\bin\openvpn-gui.exe“ starten, gerade während der Einrichtung sollte man diese Option nutzen. So startet man die GUI und sieht die Fehlermeldungen direkt. Alle Konfigurationen unter „C:\Program Files\OpenVPN\config-auto“ werden vom Dienst „OpenVPNServiceInteractive“ automatisch geladen. Der normale „config“ Ordner ist für Client-Konfigurationen gedacht.

Später kann man den OpenVPNService nutzen. Dieser ist per Default vorhanden aber auf „Manuell“ gestellt, damit der Dienst automatisch verfügbar ist habe ich die Einstellung auf „Automatisch“ angepasst.

Die Clienteinrichtung kann ab Punkt 5. hier eingesehen werden.

Update: OpenVPN 2.5 HowTo

Für einen Kunden war die Anforderung ein (Windows) System mittels eines VPNs abzusichern, das Ganze möglichst einfach und dennoch ohne Sicherheitsverlust.

Daher habe ich mich für den Einsatz von OpenVPN entschieden, da dieses OpenSource ist und eine große Bekanntheit hat.

 

1. Vorbereitung:

  • fertig installierter Windows 2016 Server
  • Download Community OpenVPN NSIS Package (https://openvpn.net/community-downloads/)

2. Installation OpenVPN Server:

Nachdem wir in der Vorbereitung die EXE Datei heruntergeladen haben, können wir diese installieren:

Übliche Willkommensmaske:

Bestätigen der Nutzungsbedingungen:

Auswahl der zu installierenden Komponenten. Hier sollte man noch den Punkt „EasyRSA 2“ auswählen.

Im nächsten Schritt wird der Installationordner ausgewählt:

Während der Installation muss man noch explizit die Installation eines virtuellen Netzwerkadapters freigeben.

Hinweis: Ohne entsprechende Berechtigung kann der Installer den Adapter nicht korrekt erstellen und eine VPN Verbindung ist nicht möglich!

Abschluss der Installation:

Nun haben wir OpenVPN installiert jedoch existieren noch keine Custom Keys oder Einstellungen welche die VPN Verbindung erst ausmachen.

 

3. Schlüsselpaare erstellen

In den folgenden Schritten werden folgende Keys bzw. Zertifikate erstellt:

  1. Einmalig: Certificate Authority (CA)  – build-ca.bat
  2. Einmalig: Diffie-Hellman Key – build-dh.bat
  3. Einmalig: Server Certificate – build-key-server.bat
  4. Pro Client ein Client Certificate – build-key.bat

Hinweis: Die Zertifikate bzw. Keys sind per Default 10 Jahre gültig. In dieser Zeit ist spätestens das Betriebssystem EOL, aus diesem Grunde vollkommen ausreichend.

Hierbei sollte man in den Easy-RSA Pfad wechseln in welchen OpenVPN installiert wurde ( C:\Program Files\OpenVPN\easy-rsa ). In diesem Ordner wird die vorhandene Datei vars.bat.example dupliziert oder nur umbenannt in „vars.bat“ und folgende Zeilen werden verändert bzw. hinzugefügt.

set KEY_COUNTRY=DE
set KEY_PROVINCE=RLP
set KEY_CITY=KOBLENZ
set KEY_ORG=MeineFirma AG
set KEY_EMAIL=kontakt@firma.tld
set KEY_CN=vpn.firma.tld
set KEY_NAME="Firmenname OpenVPN Key"
set KEY_OU="Abteilung"
set PKCS11_MODULE_PATH=platzhalter
set PKCS11_PIN=123456
set KEY_SIZE=2048

Die Werte sollten gesetzt werden, da es sonst zu Hinweis- als auch Fehlermeldungen kommen kann.

Ich habe bei der Schlüssellänge 2048 gewählt, da hier Sicherheit und Performance in einem guten Verhältnis stehen. Sofern man eine potente Hardware hat oder nur eine Verbindung aufbaut, kann man sich für 4096 entscheiden. Desto größer die Schlüssellänge desto länger dauert auch das Erstellen der jeweiligen Dateien!

Im Anschluss wird die „Arbeitsumgebung“ geladen:

Hinweis: Die Umgebung muss bei jeder neuen CMD Sitzung neu ausgeführt werden, da die Variablen sonst nicht gesetzt sind!

Um sicher zu gehen, dass alles sauber erstellt wird, lasse ich noch den Clean Job laufe. Dieser Schritt sollte bei einer Neuerstellung von einem Keypair oder bei einem Fehler in jedem Falle wiederholt werden!

Hinweis: Hierbei werden alle zuvor erstellten Keypairs gelöscht!

Erstellung Certificate Authority:

Erstellung Diffie-Hellman Key

Erstellung Server Certificate

In diesem Schritt muss man insbesondere das Signieren als auch das Erstellen des Zertifikates mit „y“ bestätigen:

Erstellung Client Certificate

Bei der Generierung des Client Certificates sollte man pro Client einen eigenen Namen wählen. Sollte man ein Zertifikat für mehrere Clients verwenden wollen, in den Default Settings würden sich die Clients immer gegenseitig aus der Sitzung werfen! Besser ist ein Zertifikat pro Client oder wenn es sein muss, wird der Parameter „duplicate-cn“ in der OpenVPN Konfig hinterlegt.

 

Überblick der Zertifikate:

Für den Client werden die folgenden Zertifikate benötigt:

  • ca.crt
  • client_%name%.crt
  • client_%name%.key

Die Server Files werden im folgenden Schritt beschrieben.

Alle anderen Dateien sollten unter keinen Umständen weitergegeben werden, da ansonsten die Sicherheit erheblich gefährdet ist.

4. Konfiguration OpenVPN Server:

Für den Server werden nun unter „C:\Program Files\OpenVPN“ noch weitere Ordner erstellt:

  • ccd
  • keys

Bei mir sieht es anschließend wie folgt aus:

Der Ordner „pre_shared_key“ ist zu ignorieren, dieser ist für ein Peer-to-Peer VPN (HowTo – LINK) erstellt worden.

Nun kopieren wir die zuvor erstellten Key und Zertifikate in den Ordner „keys“:

 

Optional:

Auf dem Kundensystem sollen zwei OpenVPN Instanzen laufen. Eine als Peer-to-Peer zu einem anderen OpenVPN Server und eine weitere als reiner OpenVPN Server für „normale“ Clients wie Windows 10, Android, iOS, …. Hierfür habe ich einen weiteren Tap Adapter erstellt, man kann nur eine Instanz pro Adapter betreiben.

Starten einer CMD mit Administratoren Berechtigung und anschließendes erstellen eines weiteren Adapters per OpenVPN „addtap.bat“.

Danach sollte der neue Adapter verfügbar sein und im Netzwerk Center bzw. per CMD sichtbar sein. Ich habe den Adapter umbenannt per „Umbennen“ in „tap-vpn-server“:

Man kann die Adapter auch per OpenVPN  Binary prüfen und schauen, ob diese verfügbar sind:

 

OpenVPN Server Konfig „C:\Program Files\OpenVPN\config\vpn_server_client.ovpn“

##########################
# VPN Server for clients
##########################

# Lokale IP auf welche der Socket/Port gebunden wird
local 1.2.3.4

#Listener des OpenVPN Servers
port 1194

#Protokoll des Servers
proto udp
dev tun
# Zuweisung auf separaten Adapter
dev-node "tap-vpn-server"

##########################
# Zertifikate
##########################

dh "C:\\Program Files\\OpenVPN\\keys\\dh2048.pem"
ca "C:\\Program Files\\OpenVPN\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\keys\\vpn_name.crt"
key "C:\\Program Files\\OpenVPN\\keys\\vpn_name.key"

##########################
# Server-Setup
##########################

# DHCP Subnetz
server 10.0.100.0 255.255.255.0
ifconfig-pool-persist "C:\\Program Files\\OpenVPN\\ipp.txt"

#Ermöglichen von Anfragen von einem Client zum anderen, bei Bedarf die Zeile entfernen
client-to-client

##########################
# Client-Settings (inkl Special Dir)Files
##########################

client-config-dir "C:\\Program Files\\OpenVPN\\ccd"
push "route 192.168.1.0 255.255.255.0"
#push "dhcp-option DNS 192.168.1.10"

##########################
# Defaults
##########################

keepalive 10 120
comp-lzo
persist-key
persist-tun

##########################
# Logging
##########################

status "C:\\Program Files\\OpenVPN\\log\\vpn_server_client_status.log"
log "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
log-append "C:\\Program Files\\OpenVPN\\log\\vpn_server_client.log"
verb 3

Der OpenVPN Server kann mittels „C:\Program Files\OpenVPN\bin\openvpn-gui.exe“ starten, gerade während der Einrichtung sollte man diese Option nutzen. So startet man die GUI und sieht die Fehlermeldungen direkt.

Später kann man den OpenVPNService nutzen. Dieser ist per Default vorhanden aber auf „Manuell“ gestellt, damit der Dienst automatisch verfügbar ist habe ich die Einstellung auf „Automatisch“ angepasst.

 

Tipp zum Prüfen ob der Socket existiert:

netstat -a | findstr 1194

So sollte die Ausgabe sein:

Ebenso sollte der Windows Firewall noch ein Eintrag bei den eingehenden Regel ergänzt werden für den gewählten Port (UDP/1194).

5. Installation Client

Für die Client-Installation unter Windows 10 kann man Schritt 2. unter Windows 10 wiederholen (die EasyRSA Tools müssen hier nicht mitinstalliert werden)

C:\Program Files\OpenVPN\config\vpn_client1.ovpn:

##########################
# VPN Client config
##########################

client
dev tun

proto udp
remote vpn.server.tld 1194
resolv-retry infinite
nobind
persist-key
persist-tun

ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\client_1.crt"
key "C:\\Program Files\\OpenVPN\\config\\client_1.key"
ns-cert-type server

comp-lzo
verb 3

 

So sollte es bei dem Verbindungsaufbau aussehen:

Hinweis: OpenVPN muss als Administrator oder mit einem User der die entsprechenden Berechtigungen (eines Netzwerkoperatoren) hat ausgeführt werden. Ansonsten schlägt der Verbindungsaufbau fehl.