VPN mit Windows 7 und strongSwan
Microsoft hat Windows 7 einen vollwertigen VPN-Client für IPSec spendiert.
Das Betriebssystem ist durch Windows Agile VPN in der Lage, Verbindungen zu VPN-Gateways herzustellen.
Dieses Tutorial beschreibt die Konfiguration eines Clients mit Windows 7 RC für den Zugriff auf
ein VPN-Gateway mit strongSwan.
Windows 7 ist in der Lage ohne zusätzliche Software eine IPSec-Verbindung herzustellen.
Der Verbindungsaufbau läuft über das Protokoll IKEv2 (Internet Key Exchange Version 2).
Diese Variante von IKE wird noch von recht wenigen VPN-Routern unterstützt.
Das Mobility and Multihoming Protocol (MobIKE) wird von Windows jetzt ebenfalls unterstützt.
Für alle Test kam Windows 7 RC Build 7100 zum Einsatz.
Als VPN-Gateway kam ein Linux-Server mit strongSwan zum Einsatz. Für dieses Tutorial
habe ich strongSwan 4.3.1 unter debian Linux (Kernel 2.6.18) genutzt.
VPN Netzwerkaufbau
Für diese Anleitung greift ein Notebook mit Windows 7 auf einen strongSwan-Server in Zürich zu.
VPN Parameter
Der VPN-Tunnel wird mit den folgenden Parametern aufgebaut.
|
1
|
2
|
Standort
|
|
Zürich
|
mobil
|
Gerät
|
|
strongSwan
|
Windows 7
|
Rolle
|
|
VPN-Gateway
|
Remote User
|
WAN-IP oder Hostname
|
A
|
vpn.nwlab.net
|
dynamisch
|
Lokales IP-Netz / Maske
|
B
|
192.168.178.0/24
|
-
|
Der Verbindungsaufbau läuft über IKEv2. Die Authentifizierung erfolgt über Zertifikate.
VPN mit strongSwan einrichten
Um strongSwan für die VPN-Verbindung mit Windows 7 einzurichten, sind zwei Schritte notwendig.
Das Serverzertifikat muss angepasst werden und die eigentliche Verbindung muss konfiguriert werden.
Zertifikat für das VPN-Gateway
Damit der Windows 7 Client das Zertifikat des VPN-Gateway akzeptiert, müssen zwei Bedingungen erfüllt sein.
Das Zertifikat muss für Server Authentication gekennzeichnet sein und der DNS-Name des strongSwan-Servers muss
im subjectDistinguishedName oder subjectAltName stehen.
Um ein solches Zertifikat mit OpenSSL zu erstellen fügen Sie die folgenden Zeilen in den Abschnitt usr_cert der openssl.cnf ein:
[ usr_cert ]
extendedKeyUsage = serverAuth
subjectAltName = DNS:vpn.nwlab.net
Ohne diese Angaben akzeptiert Windows 7 RC das Serverzertifikat nicht und baut keine VPN-Verbindung auf.
ipsec.conf
Die Konfiguration der VPN-Verbindungen erfolgt bei strongSwan in der Datei /etc/ipsec.conf.
# ipsec.conf - strongSwan IPsec configuration file
ca vpnca
cacert=cacert.pem
config setup
plutostart=no
conn windows
left=%defaultroute
leftcert=servercert.pem
leftsubnet=192.168.178.0/24
right=%any
rightsourceip=192.168.77.0/24
rightid="C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7"
keyexchange=ikev2
auto=add
Für unser Beispiel benötigen wir kein IKEv1, daher wird pluto nicht gestartet. IKEv2 wird von charon abgewickelt.
Die rightid muss den Angaben des Zertifikates von Windows 7 entsprechen. Dem VPN-Adapter des Clients wird eine IP-Adresse
aus dem Netz rightsourceip zugewiesen.
strongSwan kann jetzt mit ipsec start gestartet werden.
Agile VPN unter Windows 7 einrichten
Zertifikat erstellen
Um die VPN-Verbindung in Windows 7 zu erstellen benötigen wir zuerst ein Zertifikat.
Diese erstellen wir mit openssl auf dem strongSwan-Gateway.
Wir beginnen mit dem Kommando openssl req -newkey rsa:1024 -keyout win7key.pem -out win7req.pem
vpn:~/bla# openssl req -newkey rsa:1024 -keyout win7key.pem -out win7req.pem
Generating a 1024 bit RSA private key
..........................++++++
..............................++++++
writing new private key to 'win7key.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [DE]:
State or Province Name (full name) [Berlin]:
Locality Name (eg, city) []:home
Organization Name (eg, company) [nwlab]:
Organizational Unit Name (eg, section) []:lab
Common Name (eg, YOUR name) []:win7
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Weiter geht es mit openssl ca -in win7req.pem -days 730 -out win7cert.pem -notext .
vpn:~/bla# openssl ca -in win7req.pem -days 730 -out win7cert.pem -notext
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for /usr/lib/ssl/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 11 (0xb)
Validity
Not Before: May 23 19:39:36 2009 GMT
Not After : May 23 19:39:36 2011 GMT
Subject:
countryName = DE
stateOrProvinceName = Berlin
organizationName = nwlab
organizationalUnitName = lab
commonName = win7
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
EF:A1:DD:29:7E:03:2D:62:0D:E3:D2:EA:E6:1F:F0:EA:01:14:97:42
X509v3 Authority Key Identifier:
keyid:09:30:BB:26:5A:05:C3:83:6E:DE:47:4E:FF:50:2C:23:0B:44:C8:D0
Certificate is to be certified until May 23 19:39:36 2011 GMT (730 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Jetz muss das Zertifikat noch als p12-Datei exportiert werden.
Das erledigt openssl pkcs12 -export -inkey win7key.pem -in win7cert.pem -name "win7" -certfile cacert.pem -caname "strongSwan Root CA" -out win7cert.p12
Die Datei win7cert.p12 kann jetzt auf den PC mit Windows 7 übertragen werden.
Zertifikat in Windows 7 importieren
Rufen Sie unter Windows 7 die Microsoft Management Console (kurz MMC) auf.
Gehen Sie im Menü Datei auf den Punkt Snap-In hinzufügen und fügen Sie das Snap-In
Im folgenden Dialog wählen Sie Computerkonto aus.
Wenn Sie das Snap-In hinzugefügt haben, gehen Sie auf "Eigene Zertifikate" und importieren Sie das p12-File.
Verschieben Sie das ebefalls in der p12-Datei enthaltene CA-Zertifikat in den
Zweig Vertrauenwürdige Stammzertifizierungsstellen.
Nach dem Import kontrollieren Sie die Angaben unter Allgemein, Details und Zertifizierungspfad im Computer-
und CA-Zertifikat. Beide Zertifikate müssen von Windows 7 als gültig erkannt werden.
VPN-Verbindung einrichten
Starten Sie das Netzwerk- und Freigabecenter (Systemsteuerung Netzwerkstatus und -aufgaben anzeigen) und klicken Sie auf
Neue Verbindung oder neues Netzwerk einrichten.
Um eine neue VPN-Verbindung einzurichten wählen Sie Verbindung mit dem Arbeitsplatz herstellen.
Im folgenden Dialog klicken Sie auf Die Internetverbindung (VPN) verwenden.
Jetzt können Sie den DNS-Namen oder die IP-Adresse des VPN-Gateways eingeben und
der neuen VPN-Verbindung einen Namen geben.
Aktivieren Sie noch Jetzt nicht verbinden, nur für spätere Verwendung einrichten.
Da die Verbindung über Zertifikate abgesichert ist, sind die Angaben bei Benutzernamen und Kennwort
ohne Belang. Klicken Sie dann auf Erstellen um die VPN-Verbindung anzulegen.
Wenn Sie nun auf das Netzwerksymbol im Systray klicken, sollte die VPN-Verbindung sichtbar sein.
Mit einem Rechtsklick können Sie die Eigenschaften der VPN-Verbindung aufrufen.
Gehen Sie in den Reiter Optionen und ändern Sie den VPN-Typ auf IKEv2.
Stellen Sie die Authentifizierung auf Computerzertifikate verwenden.
Nach diesen Anpassungen sollte sich der VPN-Tunnel von Windows 7 Agile VPN zu strongSwan aufbauen lassen.
Fehlersuche
Das umfangreiche Logging von strongSwan erleichtert die Fehlersuche erheblich.
Zuerst mal die Ausgabe von ipsec statusall bei eine funktionierenden Verbindung:
vpn:~# ipsec statusall
Performance:
uptime: 4 minutes, since May 24 17:20:34 2009
worker threads: 10 idle of 16, job queue load: 1, scheduled events: 5
loaded plugins: aes des sha1 sha2 md5 fips-prf random x509 pubkey xcbc hmac gmp kernel-netlink stroke updown
Virtual IP pools (size/online/offline):
windows: 255/1/0
Listening IP addresses:
192.168.178.66
Connections:
windows: 192.168.178.66...%any
windows: local: [C=DE, ST=Berlin, O=nwlab, OU=lab, CN=vpn.nwlab.net] uses public key authentication
windows: cert: "C=DE, ST=Berlin, O=nwlab, OU=lab, CN=vpn.nwlab.net"
windows: remote: [C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7] uses any authentication
windows: child: 192.168.178.0/24 === dynamic
Security Associations:
windows[2]: ESTABLISHED 2 seconds ago, 192.168.178.66[C=DE, ST=Berlin, O=nwlab, OU=lab, CN=vpn.nwlab.net]...192.168.178.21[C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7]
windows[2]: IKE SPIs: 53794ad42e466561_i 31a3fe9b3fb8c840_r*, public key reauthentication in 2 hours
windows[2]: IKE proposal: 3DES/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024_BIT
windows{2}: INSTALLED, TUNNEL, ESP SPIs: cd96db57_i 96a35f69_o
windows{2}: AES_CBC-256/HMAC_SHA1_96, rekeying in 49 minutes, last use: no_i no_o
windows{2}: 192.168.178.0/24 === 192.168.77.1/32
Im syslog sieht das so aus:
May 24 17:27:39 vpn charon: 09[NET] received packet: from 192.168.178.21[500] to 192.168.178.66[500]
May 24 17:27:39 vpn charon: 09[ENC] parsed IKE_SA_INIT request 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) ]
May 24 17:27:39 vpn charon: 09[IKE] 192.168.178.21 is initiating an IKE_SA
May 24 17:27:39 vpn charon: 09[IKE] sending cert request for "C=DE, ST=Berlin, L=home, O=nwlab, OU=lab, CN=vpnca, E=ca@nwlab.net"
May 24 17:27:39 vpn charon: 09[ENC] generating IKE_SA_INIT response 0 [ SA KE No N(NATD_S_IP) N(NATD_D_IP) CERTREQ N(MULT_AUTH) ]
May 24 17:27:39 vpn charon: 09[NET] sending packet: from 192.168.178.66[500] to 192.168.178.21[500]
May 24 17:27:39 vpn charon: 10[NET] received packet: from 192.168.178.21[4500] to 192.168.178.66[4500]
May 24 17:27:39 vpn charon: 10[ENC] unknown attribute type INTERNAL_IP4_SERVER
May 24 17:27:39 vpn charon: 10[ENC] unknown attribute type INTERNAL_IP6_SERVER
May 24 17:27:39 vpn charon: 10[ENC] parsed IKE_AUTH request 1 [ IDi CERT CERTREQ AUTH N(MOBIKE_SUP) CP SA TSi TSr ]
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid 0e:ac:82:60:40:56:27:97:e5:25:13:fc:2a:e1:0a:53:95:59:e4:a4
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid dd:bc:bd:86:9c:3f:07:ed:40:e3:1b:08:ef:ce:c4:d1:88:cd:3b:15
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid 4a:5c:75:22:aa:46:bf:a4:08:9d:39:97:4e:bd:b4:a3:60:f7:a0:1d
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid 01:f0:33:4c:1a:a1:d9:ee:5b:7b:a9:de:43:bc:02:7d:57:09:33:fb
May 24 17:27:39 vpn charon: 10[IKE] received cert request for "C=DE, ST=Berlin, L=home, O=nwlab, OU=lab, CN=vpnca, E=ca@nwlab.net"
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid 34:4f:30:2d:25:69:31:91:ea:f7:73:5c:ab:f5:86:8d:37:82:40:ec
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid 3e:df:29:0c:c1:f5:cc:73:2c:eb:3d:24:e1:7e:52:da:bd:27:e2:f0
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid 59:79:12:de:61:75:d6:6f:c4:23:b7:77:13:74:c7:96:de:6f:88:72
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid e2:7f:7b:d8:77:d5:df:9e:0a:3f:9e:b4:cb:0e:2e:a9:ef:db:69:77
May 24 17:27:39 vpn charon: 10[IKE] received cert request for unknown ca with keyid e2:7f:7b:d8:77:d5:df:9e:0a:3f:9e:b4:cb:0e:2e:a9:ef:db:69:77
May 24 17:27:39 vpn charon: 10[IKE] received end entity cert "C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7"
May 24 17:27:39 vpn charon: 10[CFG] looking for peer configs matching 192.168.178.66[%any]...192.168.178.21[C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7]
May 24 17:27:39 vpn charon: 10[CFG] selected peer config 'windows'
May 24 17:27:39 vpn charon: 10[CFG] using certificate "C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7"
May 24 17:27:39 vpn charon: 10[CFG] using trusted ca certificate "C=DE, ST=Berlin, L=home, O=nwlab, OU=lab, CN=vpnca, E=ca@nwlab.net"
May 24 17:27:39 vpn charon: 10[CFG] checking certificate status of "C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7"
May 24 17:27:39 vpn charon: 10[CFG] certificate status is not available
May 24 17:27:39 vpn charon: 10[IKE] authentication of 'C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7' with RSA signature successful
May 24 17:27:39 vpn charon: 10[IKE] ignoring INTERNAL_IP4_SERVER config attribute
May 24 17:27:39 vpn charon: 10[IKE] ignoring INTERNAL_IP6_SERVER config attribute
May 24 17:27:39 vpn charon: 10[IKE] peer supports MOBIKE
May 24 17:27:39 vpn charon: 10[IKE] authentication of 'C=DE, ST=Berlin, O=nwlab, OU=lab, CN=vpn.nwlab.net' (myself) with RSA signature successful
May 24 17:27:39 vpn charon: 10[IKE] scheduling reauthentication in 10046s
May 24 17:27:39 vpn charon: 10[IKE] maximum IKE_SA lifetime 10586s
May 24 17:27:39 vpn charon: 10[IKE] IKE_SA windows[1] established between 192.168.178.66[C=DE, ST=Berlin, O=nwlab, OU=lab,
CN=vpn.nwlab.net]...192.168.178.21[C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7]
May 24 17:27:39 vpn charon: 10[IKE] sending end entity cert "C=DE, ST=Berlin, O=nwlab, OU=lab, CN=vpn.nwlab.net"
May 24 17:27:39 vpn charon: 10[IKE] peer requested virtual IP %any
May 24 17:27:39 vpn charon: 10[CFG] assigning new lease to C=DE, ST=Berlin, O=nwlab, OU=lab, CN=win7
May 24 17:27:39 vpn charon: 10[IKE] assigning virtual IP 192.168.77.1 to peer
May 24 17:27:39 vpn charon: 10[IKE] CHILD_SA windows{1} established with SPIs c43574e5_i 83888140_o and TS 192.168.178.0/24 === 192.168.77.1/32
May 24 17:27:39 vpn charon: 10[ENC] generating IKE_AUTH response 1 [ IDr CERT AUTH CP SA TSi TSr N(AUTH_LFT) N(MOBIKE_SUP) N(NO_ADD_ADDR) ]
May 24 17:27:39 vpn charon: 10[NET] sending packet: from 192.168.178.66[4500] to 192.168.178.21[4500]
Erzeugt ein Verbindungsversuch vom Windows aus keine Einträge im syslog von strongSwan filtert vermutlich
eine Firewall oder ein Router die IKE-Frames aus.
Weiterführende Informationen zu VPN
Bei Fragen zu VPN wird Ihnen im Netzwerkforum geholfen.
|