====== VPN Server Dokumentation ======
===== Grundsaetzliches =====
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.
===== Netzwerkeinstellungen =====
==== Netzwerk ====
Wie in der [[vpn_dokumentation|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.
==== Ports ====
Als VPN Port wird der Port 8800 verwendet, da dieser dem Portvergabeverfahren nach der [[vpn_dokumentation|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.
===== PKI Konfigration mit easy-rsa =====
Die Scripte fuer easy-rsa befinden sich meist in der Dokumentation des OpenVPN Paketes.
==== erstellen einer Root CA ====
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.
==== erstellen des Server Zertifikates ====
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).
==== erstellen von Client Zertifikaten ====
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.
===== Server Konfiguration =====
==== Verzeichnisstruktur ====
Folgende Verzeichnisstrukur ist ein Vorschlag, welcher nur die gesamte Konfiguration, auch in Zusammenhang mit [[vpn_dokumentation|den privaten VPN Tunnel]], uebersichtlicher machen sollte.
* prefix = Der Hauptpfad, wo die Konfiguration des OpenVPN Servers liegt. Unter [[http://www.debian.org|Debian]] zumeist /etc/openvpn, andere Betriebssysteme wie [[http://www.openbsd.org|OpenBSD]] verwenden /usr/local/etc/openvpn.
* $prefix/server: Hier wird die Konfiguration des Servers abgespeichert.
* $prefix/ccd: Hier werden spezielle Clientkonfigurationen fuer individuelle Clients gespeichert
* $prefix/$remotehost: Hier wird die Konfiguration des jeweiligen [[VPN Dokumentation|privaten VPN Tunnel]] gespeichert z.B. g84.dyndns.org
* $prefix/x509.crt: Speicherort fuer alle Root- und Serverzertifikate - die oeffentlichen Zertifikate
* $prefix/x509.csr: Speicherort fuer die Zertifikats Requests
* $prefix/x509.key: Speicherort fuer die privaten Schluessel
==== Konfigurationsdateien ====
Folgende Dateien werden in $prefix/server abgelegt:
* dh1024.pem: der Diffi Hellmann Schluessel fuer diese Server Instanz
* ipp.txt: diese Datei speichert die Zugehoerigkeit von Client und IP
* tlsauth.key: der TLS Schluessel fuer diese Server Instanz
* server.conf: die eigentliche Server Konfigurationsdatei
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
==== Beispiel Konfiguration ====
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"
==== Gültige statische IP-Adresspaare ====
Im folgenden eine Liste mit allen gültigen statischen Client-/Server IP-Adresspaaren:
* 10.x.12.129 10.x.12.130
* 10.x.12.133 10.x.12.134
* 10.x.12.137 10.x.12.138
* 10.x.12.141 10.x.12.142
* 10.x.12.145 10.x.12.146
* 10.x.12.149 10.x.12.150
* 10.x.12.153 10.x.12.154
* 10.x.12.157 10.x.12.158
* 10.x.12.161 10.x.12.162
* 10.x.12.165 10.x.12.166
* 10.x.12.169 10.x.12.170
* 10.x.12.173 10.x.12.174
* 10.x.12.177 10.x.12.178
* 10.x.12.181 10.x.12.182
* 10.x.12.185 10.x.12.186
* 10.x.12.189 10.x.12.190
* 10.x.12.193 10.x.12.194
* 10.x.12.197 10.x.12.198
* 10.x.12.201 10.x.12.202
* 10.x.12.205 10.x.12.206
* 10.x.12.209 10.x.12.210
* 10.x.12.213 10.x.12.214
* 10.x.12.217 10.x.12.218
* 10.x.12.221 10.x.12.222
* 10.x.12.225 10.x.12.226
* 10.x.12.229 10.x.12.230
* 10.x.12.233 10.x.12.234
* 10.x.12.237 10.x.12.238
* 10.x.12.241 10.x.12.242
* 10.x.12.245 10.x.12.246
* 10.x.12.249 10.x.12.250
* 10.x.12.253 10.x.12.254
===== Client Konfiguration =====
==== Notwendige Dateien ====
Am Client sind folgende Dateien notwendig:
* ca.crt: das oeffentliche Root Zertifikat der CA
* client.crt: das oeffentliche Client Zertifikat
* client.key: der private Schluessel des Clients
* tlsauth.key: der TLS Schluessel des Servers
* client.conf: die OpenVPN Konfigurationsdatei
==== Beispiel Konfiguration ====
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