Im ersten Teil wurde OpenVPN installiert und die erforderlichen Zertifikate erstellt. Hier werde ich auf die Konfiguration des OpenVPN Servers und der Clients eingehen.
Serverkonfiguration
Kopieren der erforderlichen Dateien von der CA
Als erstes müssen die erforderlichen Zertifikate von der CA in den openVPN konfigurationsordner kopiert werden. Alternativ können Sie auch absolute Pfade in der Konfiurationsdatei angeben. Kopieren Sie dazu die Dateien ca.crt, dh-2048.pem, ovpn-adm-de.crt und ovpn-adm-de.key aus dem Ordner keys ihrer CA in den Ordner
config ihrer OpenVPN installation.
CA-Zertifikat, DH-Parameter, Serverzertifikat und privater Schlüssel
Erstellen einer Serverkonfiguration
Erstellen Sie im Ordner
config* eine Datei namens server.ovpn mit folgendem Inhalt:
server 192.168.254.0 255.255.255.0
port 1194
proto udp
dev tun
ca ca.crt
cert ovpn-adm-de.crt
key ovpn-adm-de.key
dh dh2048.pem
cipher AES-256-CBC
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.255.255.0"
push "redirect-gateway"
push "DISABLE-NBT"
push "DOMAIN administrator-de.de"
push "dhcp-option DNS 10.0.0.10"
push "dhcp-option WINS 10.0.0.11"
keepalive 15 60
persist-key
persist-tun
status openvpn-status.txt
log-append openvpn.log
verb 4
mute 15
Bedeutung der Parameter
| port | TCP/UDP Port auf dem der Server auf Verbindungen warten. Dieser MUSS in der Firewall zugelassen und von extern erreichbar sein. Mehr dazu finden Sie unter Portforwarding |
| server | Modus und Netzbereich für den OpenVPN Server. Die 1. IP verwendet der Server, die 2. der DHCP-Server. Der DHCP-Bereich für Clients beinhaltet alle restlichen IP-Adressen im Netz |
| proto | Das Protokoll der Transportschicht. Es kann TCP oder UDP verwendet werden. |
| dev | Art des Tunnelgerätes. Der TUN/TAP Treiber unterstützt 2 Modi. TUN und TAP. TUN arbeitet auf Layer3, TAP auf Layer2. |
| ca | CA-Zertifikat |
| cert | Serverzertifikat |
| key | Geheimer Schlüssel für das Serverzertifikat |
| cipher | Gibt den Verschlüsselungsalgorythmus an |
| ifconfig-pool-persist | In dieser Datei werden die Leasen gespeichert. Es wird versucht, einem Client immer die selbe IP zuzuweisen |
| push | überträgt DHCP und andere Optionen an den Client |
| keepalive | Gibt das Ping und reconnect-Intervall einer Verbindung an |
| persist-key | Hält den privaten Schlüssel im Speicher (Wichtig bei änderung der UID) |
| persist-tun | Hält das TUN/TAP Gerät bei einem Neustart offen |
| status | erstellt eine Datei mit dem aktuellem Status des OpenVPN Dienstes |
| log-append | Erstellt eine Log-Datei und hängt neue Einträge immer an diese an |
| verb | verbosity-level. um so höher, desto mehr wird geloggt |
| mute | Schreibt nur diese Anzahl an Meldungen eines Typs in Folge in die Protokolldatei |
Test der Konfiguration
Um Fehler auszuschließen, öffnen Sie eine cmd.exe und wechseln in den Konfigurationsordner. Anschließend führen Sie OpenVPN mit angabe der Konfigurationsdatei aus.
cmd.exe
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\Dokumente und Einstellungen\dtsr>cd c:\Programme\OpenVPN
C:\Programme\OpenVPN\config>..\bin\openvpn.exe --config server.ovpn
Warten Sie ca. 15 Sekunden und öffnen Sie die Datei openvpn.log. Diese sollte in etwa so aussehen:
Sun Nov 25 02:26:58 2007 us=490533 Current Parameter Settings:
Sun Nov 25 02:26:58 2007 us=490765 config = 'server.ovpn'
Sun Nov 25 02:26:58 2007 us=490812 mode = 1
...
Sun Nov 25 02:26:58 2007 us=491183 NOTE: --mute triggered...
Sun Nov 25 02:26:58 2007 us=491227 175 variation(s) on previous 15 message(s) suppressed by --mute
Sun Nov 25 02:26:58 2007 us=491259 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built on Oct 1 2006
Sun Nov 25 02:26:58 2007 us=719188 Diffie-Hellman initialized with 2048 bit key
Sun Nov 25 02:26:58 2007 us=721863 TLS-Auth MTU parms [ L:1557 D:138 EF:38 EB:0 ET:0 EL:0 ]
Sun Nov 25 02:26:58 2007 us=771265 TAP-WIN32 device [TST-VPN] opened: \\.\Global\{}.tap
Sun Nov 25 02:26:58 2007 us=771338 TAP-Win32 Driver Version 8.4
Sun Nov 25 02:26:58 2007 us=771370 TAP-Win32 MTU=1500
Sun Nov 25 02:26:58 2007 us=771414 Notified TAP-Win32 driver to set a DHCP IP/netmask of 192.168.254.1/255.255.255.252 on interface {} [DHCP-serv: 192.168.254.2, lease-time: 31536000]
Sun Nov 25 02:26:58 2007 us=771581 Sleeping for 10 seconds...
Sun Nov 25 02:27:08 2007 us=772976 Successful ARP Flush on interface [4] {}
Sun Nov 25 02:27:08 2007 us=777730 route ADD 192.168.254.0 MASK 255.255.255.0 192.168.254.2
Sun Nov 25 02:27:08 2007 us=783510 Route addition via IPAPI succeeded
Sun Nov 25 02:27:08 2007 us=783578 Data Channel MTU parms [ L:1557 D:1450 EF:57 EB:4 ET:0 EL:0 ]
Sun Nov 25 02:27:08 2007 us=783673 Socket Buffers: R=[8192->8192] S=[8192->8192]
Sun Nov 25 02:27:08 2007 us=783738 UDPv4 link local (bound): [undef]:1194
Sun Nov 25 02:27:08 2007 us=783766 UDPv4 link remote: [undef]
Sun Nov 25 02:27:08 2007 us=783794 MULTI: multi_init called, r=256 v=256
Sun Nov 25 02:27:08 2007 us=783863 IFCONFIG POOL: base=192.168.254.4 size=62
Sun Nov 25 02:27:08 2007 us=783919 IFCONFIG POOL LIST
Sun Nov 25 02:27:08 2007 us=783984 Initialization Sequence Completed
Ist die Konfiguration syntaktisch sauber, erscheint gegen ende der Protokolldatei die Meldung
Initialization Sequence Completed. Lassen Sie die Konsole für spätere Tests bitte geöffnet.
Clientkonfiguration
Die Clientkonfiguration erfolgt ähnlich wie der Server, mit dem Unterschied, das diese nur sehr wenige Parameter benötigt. Ich werde die Konfiguration erst am Server anlegen und Testen. Wenn dies erfolgreich war, kann der OpenVPN Dienst auf dem Server und allen Clients installiert und aktiviert werden. Während der Testphase verwende ich den Ordner clientconfig im OpenVPN Installationsordner auf dem Server.
Kopieren der erforderlichen Dateien von der CA
Erstellen Sie den Ordner clientconfig in ihrem OpenVPN Installationspfad und kopieren Sie die Dateien CA.CRT, CLIENT1.CRT und CLIENT1.KEY in diesen Ordner. Ich hoffe Sie haben das Password für ihren Privaten Schlüssen (client1.key) nicht vergessen. Falls doch, erstellen Sie bitte ein neues Clientzertifikat.
Erstellen einer Clientkonfiguration
Erstellen Sie im Ordner
clientconfig eine Textdatei mit dem Namen client.ovpn. Kopieren Sie den folgenden Inhalt in diese Datei
client
port 1194
proto udp
dev tap
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
remote 127.0.0.1
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
mute 20
Bedeutung der Parameter
| client | Startet OpenVPN im Client-Modus |
| port | Zielport auf dem der Server auf verbindungen wartet |
| proto | Das Protokoll das der Server verwendet |
| dev | Art des Tunnelgerätes. Sollte wie am Server konfiguriert werden |
| ca | CA-Zertifikat |
| cert | Clientzertifikat |
| key | Geheimer Schlüssel für das Clientzertifikat |
| cipher | Verschlüsselungsalgorythmus des Servers |
| remote | Adresse des Servers |
| resolv-retry | Steuert die maximale Anzahl der DNS-Auflöseversuche |
| nobind | Bindet den OpenVPN Dienst nicht an den Dienstport (verwendet einen vom Betriebssystem bereitgestellten Client-Port) |
| persist-key | Hält den privaten Schlüssel im Speicher (Wichtig bei änderung der UID) |
| persist-tun | Hält das TUN/TAP Gerät bei einem Neustart offen |
| mute-replay-warnings | Unterbindet fehlermeldung über doppelt eingegangene Packete |
| verb | verbosity-level. um so höher, desto mehr wird geloggt |
| mute | Schreibt nur diese Anzahl an Meldungen eines Typs in Folge in die Protokolldatei bzw. auf die Konsole |
Test der Clientkonfiguration
Öffnen Sie eine cmd.exe und wechseln Sie in den Ordner clientconfig ihrer OpenVPn Installation und starten Sie OpenVPN mi angabe der Clientkonfiguration. Da server und Client auf dem selben Computer gestartet wurden, wird OpenVPn mit einer fehlermeldung abbrechen. Für grundlegende Tests sollte die Ausgabe auf der Konsole aber reichen.
C:\Programme\OpenVPN\clientconfig>..\bin\openvpn.exe --config client.ovpn
Wed Nov 28 22:54:22 2007 OpenVPN 2.0.9 Win32-MinGW [SSL] [LZO] built on Oct 1 2006
Wed Nov 28 22:54:22 2007 WARNING: No server certificate verification method has been enabled.
Wed Nov 28 22:54:22 2007 Control Channel MTU parms [ L:1589 D:138 EF:38 EB:0 ET:0 EL:0 ]
Wed Nov 28 22:54:22 2007 Data Channel MTU parms [ L:1589 D:1450 EF:57 EB:4 ET:32 EL:0 ]
Wed Nov 28 22:54:22 2007 Local Options hash (VER=V4): '7778e742'
Wed Nov 28 22:54:22 2007 Expected Remote Options hash (VER=V4): '3c42a582'
Wed Nov 28 22:54:22 2007 UDPv4 link local: [undef]
Wed Nov 28 22:54:22 2007 UDPv4 link remote: 127.0.0.1:1194
Wed Nov 28 22:54:22 2007 TLS: Initial packet from 127.0.0.1:1194, sid=9a453e3b fe90f282
Wed Nov 28 22:54:22 2007 VERIFY OK: depth=1, /C=DE/ST=Thueringen/L=Erfurt/O=administrator-de/OU=CA-Administration/CN=adm-de-ROOT-CA/emailAddress=admin@administrator-de.de
Wed Nov 28 22:54:22 2007 VERIFY OK: depth=0, /C=DE/ST=Thueringen/O=administrator-de/OU=CA-Administration/CN=ovpn-adm-de.dyndns.org/emailAddress=admin@administrator-de.de
Wed Nov 28 22:54:23 2007 Data Channel Encrypt: Cipher 'AES-256-CBC' initializedwith 256 bit key
Wed Nov 28 22:54:23 2007 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Nov 28 22:54:23 2007 Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Wed Nov 28 22:54:23 2007 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Wed Nov 28 22:54:23 2007 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
Wed Nov 28 22:54:23 2007 [ovpn-adm-de.dyndns.org] Peer Connection Initiated with 127.0.0.1:1194
Wed Nov 28 22:54:24 2007 SENT CONTROL [ovpn-adm-de.dyndns.org]: 'PUSH_REQUEST' (status=1)
Wed Nov 28 22:54:24 2007 PUSH: Received control message: 'PUSH_REPLY,route 10.0.0.0 255.255.255.0,redirect-gateway,dhcp-option DNS 10.0.0.10,dhcp-option WINS 10.0.0.11,route-gateway 192.168.254.1,ping 15,ping-restart 60,ifconfig 192.168.254.2 255.255.255.0'
Wed Nov 28 22:54:24 2007 OPTIONS IMPORT: timers and/or timeouts modified
Wed Nov 28 22:54:24 2007 OPTIONS IMPORT: --ifconfig/up options modified
Wed Nov 28 22:54:24 2007 OPTIONS IMPORT: route options modified
Wed Nov 28 22:54:24 2007 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Wed Nov 28 22:54:24 2007 CreateFile failed on TAP device: \\.\Global\{158F2E9D-AF0B-46B0-BE7D-81ED9D06947D}.tap
Wed Nov 28 22:54:24 2007 All TAP-Win32 adapters on this system are currently inuse.
Wed Nov 28 22:54:24 2007 Exiting
Auswertung der Protokolle
Um die funktion des Servers sowie die des Clients sicherzustellen, müssen Sie grundlegende Einträge in den Protokollen auswerten können. Die wichtigsten Client-Seitigen Einträge sind oben im Protokoll FETT markiert. Die wichtigsten sind:
| TLS: Initial packet from | Verbindungsanforderung von einem Server. Wenn dies klappt, können Packete an den Server gesendet und vom server empfangen werden. |
| VERIFY OK: depth=xx | Prüfung der Server/Clientzertifikate auf die korrekte Signatur. Zuerst wird das Server/Clientzertifikat, anschließend das CA-Zertifikat selbst geprüft. |
| Data Channel Encrypt/Decrypt | Protokolliert die verwendeten Protokolle für Authentifizierung, Signierung und Verschlüsselung |
| [xxx] Peer Connection Initiated with xxx:xxx | Diese Meldung zeigt, das die Verbindung hergestellt wurde. In den eckigen klammern steht der DNS-Name des Servers, weiter hinten die aufgelöste IP-Adresse. |
| PUSH: Received control message: | Per Push konfigurierte Parameter wurden vom Server an den Client übergeben |
| OPTIONS IMPORT | Vom server empfangene Konfigurationsparameter wurden (oder wurden nicht) übernommen |
Hinweis: Diese Schritte reichen aus, um eine funktionierende Verbindung herzustellen. Ich werde dieses Tutorial vervollständigen (routing, Push-Optionen, Firewalls, erweiterte Optionen), sobald ich etwas mehr Zeit habe.