Dieses Dokumentation betrifft den Aufbau von lokalen Server Client VPN Netzen. Hier wird beschrieben wie man ein Server Client VPN Netz Anhand einer PKI und zertifikatsbasierender Authentifizierung realisiert.
Wie in der Dokumentation zu den privaten VPN Tunneln festgelegt ist, ist das Netz 10.x.12.0/24 fuer diese Aufgabe zu verwenden. Wobei hier zu beachten ist, dass das Netz 10.x.12.0/25 fuer dynamische Adressvergabe, und das Netz 10.x.12.128/25 fuer feste Adressvergabe vorgesehen ist.
Als VPN Port wird der Port 8800 verwendet, da dieser dem Portvergabeverfahren nach der Dokumentation zu den privaten VPN Tunneln entspricht, sich aber nicht mit moeglichen anderen Netzen ueberschneidet. Der VPN Traffic wird ueber den UDP Port 8800 abgehandelt, waehrend auf dem TCP Port 8800 die Management Konsole des VPN Server horcht.
Die Scripte fuer easy-rsa befinden sich meist in der Dokumentation des OpenVPN Paketes.
Dies wird durch die Konfigurationsdatei vars und den Scripten clean-all und build-ca ermoeglicht. Zuerst muss die Datei vars an die Umgebung angepasst werden. Am Ende der Datei befinden sich einige Variablen, welche gesetzt werden muessen.
Hier ein Beispiel dieser Variablen:
export KEY_COUNTRY="AT" export KEY_PROVINCE="Upper Austria" export KEY_CITY="Obernberg am Inn" export KEY_ORG="blue-network" export KEY_EMAIL="f_zavatzki@blue-network.org"
Nachdem diese Variablen angepasst wurden koennen folgende Scripte ausgefuehrt werden:
. ./vars ./clean-all ./build-ca
Bei build-ca wird nochmals nach den CN Parametern fuer das Root Zertifikat gefragt. Dies erzeugt dann eine ca.key, welcher der private Schluessel der CA ist. Dieser sollte gut geschuetzt werden. Weiters wird eine ca.crt erzeugt, welche das oeffentliche Root Zertifkat ist. Dieses Zertifkat muss am Server und an allen Clients gespeichert sein.
Dies geht einfach ueber den Aufruf des Scriptes ./build-key-server server Bei den abschliessend Fragen „Sign the certificate? [y/n]“ und „1 out of 1 certificate requests certified, commit? [y/n]“ sollte jeweils mit Ja geantwortet werden. Nun bekommt man auch hier zwei Dateien. Einmal den privaten Schluessel des Server (server.key) und einmal das oeffentliche Zertifikat (server.crt).
Auch hier muss einfach das Script ./build-key clientx aufgerufen werden, wobei clientx der Name des jeweiligen Clients ist. Auch hier werden zwei Dateien generiert. Wieder einmal der private Schluessel (clientx.key) und das oeffentliche Zertifikat (clientx.crt). Beides muss am Client gespeicert werden.
Folgende Verzeichnisstrukur ist ein Vorschlag, welcher nur die gesamte Konfiguration, auch in Zusammenhang mit den privaten VPN Tunnel, uebersichtlicher machen sollte.
Folgende Dateien werden in $prefix/server abgelegt:
Der Diffi Hellmann Schluessel wird ueber folgendes Kommando erstellt:
openssl dhparam -out dh1024.pem 1024
Der TLS Schluessel wird ueber openvpn mit dem Kommando:
openvpn --genkey --secret tlsauth.key
Diese Konfiguration beschreibt den Server Teil fuer das Netz 10.2.12.0/24 in Verbindung mit der PKI example.
proto udp port 8800 dev tun1 ca $prefix/x509.crt/example-ca.crt cert $prefix/x509.crt/example.crt key $prefix/x509.crt/example.key dh $prefix/server/dh1024.pem tls-auth $prefix/server/tlsauth.key server 10.2.12.0 255.255.255.128 ifconfig-pool-persist $prefix/server/ipp.txt push "route 10.2.0.0 255.255.0.0" client-config-dir $prefix/server/ccd route 10.2.12.128 255.255.255.252 keepalive 10 60 comp-lzo max-clients 10 user nobody group nogroup persist-key persist-tun daemon management localhost 8800
Und hier ein Beispiel fuer eine spezielle Konfiguration unter $prefix/server/ccd/ benannt nach dem CN Name des Clients (in diesem Fall client-nb01):
Dem Client wird in diesem Beispiel die IP 10.2.12.129 zugewiesen.
ifconfig-push 10.2.12.129 10.2.12.130 push "dhcp-option DNS 10.2.10.11"
Im folgenden eine Liste mit allen gültigen statischen Client-/Server IP-Adresspaaren:
Am Client sind folgende Dateien notwendig:
Hier das entsprechende Beispiel des Clients:
client remote meine.server.adresse.tld 8800 dev tun0 proto udp resolv-retry infinite nobind user nobody group nogroup persist-key persist-tun ca $prefix/ca.crt cert $prefix/client.crt key $prefix/client.key ns-cert-type server tls-auth $prefix/tlsauth.ky comp-lzo daemon