Ob man nur in einem offenen HotSpot mit seinem Handy eingeloggt ist oder in einem Land die lokale Zensur umgehen muss – braucht man ein VPN. In China hatte ich das OpenVPN Konstrukt getestet. Es hatte mal funktioniert, dann wieder nicht. Es war also nicht zuverlässig und man musste darauf hoffen das die Sterne gut standen oder mal ein bisschen mehr nachforschen warum der TLS Handshake nicht durch kam.
Um für die Zukunft ein bisschen besser ausgerüstet zu sein habe ich mir noch StrongSwan aufgesetzt. Dabei ist mir aufgefallen das es kein wirklich einfaches Howto für dieses existiert. Viel muss man nicht machen, aber hier einmal ein Setup für IPv4 unter Ubuntu 12.04:
StrongSwan installieren:
# apt-get install strongswan
/etc/strongswan.conf
# strongswan.conf - strongSwan configuration file
charon {
# number of worker threads in charon
threads = 16
# dns
dns1 = 8.8.8.8
ndns1 = 8.8.8.8
plugins {
sql {
# loglevel to log into sql database
loglevel = -1
}
}
}
libstrongswan {
# test crypto at startup
crypto_test {
on_add = yes
}
}
/etc/ipsec.conf
config setup
conn %default
keyexchange=ikev2
conn roadwarrior
left=%any
leftauth=pubkey
leftcert=serverCert.pem
leftid=vpn.example.org
leftsubnet=0.0.0.0/0,::/0
leftfirewall=yes
right=%any
rightsourceip=10.0.1.0/24
rightauth=pubkey
rightcert=clientCert.pem
rightauth2=eap-mschapv2
auto=add
esp=aes-aes256-sha-modp1024,aes256-sha512-modp4096
ike=aes-aes256-sha-modp1024,aes256-sha512-modp4096
/etc/ipsec.secrets
: RSA serverKey.pem
mobile : EAP "ZNs8-93dI10pA"
Der Benutzernam auf dem Client ist jetzt “mobile” mit dem Passwort “ZNs8-93dI10pA”. Zusätzlich wird das Zertifikat “serverKey.pem” benutzt.
Zertifikate erstellen
Folgendes Script erstellt alle notwendigen Zertifikate für den Server und den Client. Auf dem Client muss anschließend das Zertifikat “clientCert.p12” installiert werden.
/etc/ipsec.d/certs/gen.sh
#!/bin/sh
HOST="vpn.example.org"
ipsec pki --gen --outform pem > caKey.pem
ipsec pki --self --in caKey.pem --dn "C=US, O=xxx, CN=xxxx" --ca --outform pem > caCert.pem
ipsec pki --gen --outform pem > serverKey.pem
ipsec pki --pub --in serverKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=US, O=xxx, CN=$HOST" --san="$HOST" --flag serverAuth --flag ikeIntermediate --outform pem > serverCert.pem
ipsec pki --gen --outform pem > clientKey.pem
ipsec pki --pub --in clientKey.pem | ipsec pki --issue --cacert caCert.pem --cakey caKey.pem --dn "C=US, O=xxx, CN=client" --outform pem > clientCert.pem
openssl pkcs12 -export -inkey clientKey.pem -in clientCert.pem -name "client" -certfile caCert.pem -caname "xxxx" -out clientCert.p12
mv caCert.pem /etc/ipsec.d/cacerts/
mv serverCert.pem /etc/ipsec.d/certs/
mv serverKey.pem /etc/ipsec.d/private/
mv clientCert.pem /etc/ipsec.d/certs/
mv clientKey.pem /etc/ipsec.d/private/
Vielleicht muss man auf seinem Server noch IP Forwarding aktivieren, aber ansonsten muss man nur noch StrongSwan starten und den Client konfigurieren. Ich benutze dafür den StrongSwan VPN Client für Android und kann bisher nichts negativen sagen. Einfach das Clientzertifikat “clientCert.p12” auf dem Gerät installieren und den gesetzten Benutzername/Passwort und Server in der App (IKEv2 Certificate + EAP) eintragen. Fertig.
Howto basiert auf dem Wiki Eintrag von OpenWRT.