OpenVPN

Aus Freifunk Potsdam | Wiki
Zur Navigation springen Zur Suche springen

Überblick

OpenVPN leitet IP-Verbindungen durch unsichere Netze mithilfe kryptographisch gesicherter Tunnel. Die Nutzdaten werden mit SSL / TLS verschlüsselt, wodurch eine hohe Abhörsicherheit erzielt wird. Die OpenVPN-Software läuft als Hintergrundprozeß ("Daemon"), die Anbindung an den IP-Stack des jeweiligen Betriebssystemes wird durch einen Tunnel-Driver hergestellt.

Der Vorzüge von OpenVPN gegenüber PPTP oder IPsec sind Portabilität, offene Standards und einfache Konfiguration. Für folgende Systeme ist OpenVPN verfügbar:

Ein VPN besteht aus:

  • Einem Server, der den Zugang zum virtuellen Netz kontrolliert und das Routing zwischen den Clients und Nicht-VPN-Netzen regelt,
  • Mehreren Clients, die durch einen VPN-Tunnel mit dem Server kommunizieren. Mit Umweg über den Server ist so auch eine Client-zu-Client-Kommunikation möglich, sofern die Routing-Regeln des Servers dies zulassen.

Im üblichen Aufbau von OpenVPN-Netzen melden sich die Clients über ein SSL-Zertifikat am Server an, wobei der CN (Canonical Name) des Zertifikates verwendet wird, um die korrekte Netzwerk-Konfiguration des Client zu bestimmen. Dies setzt voraus, daß jeder Client ein individuelles Zertifikat erhält. Wenn die Clients nur ins Internet wollen, wäre ein Cert für alle und ein DHCP-Pool besser. Todo: Rausfinden, wie das geht.

Einrichtung

Für ein einfaches Client / Server-Setup wird benötigt:

  • SSL-Zertifikate für alle Beteiligten. Um die kostengünstig (umsonst) und einfach zu erhalten, sei eine Anmeldung bei CaCert empfohlen.
  • Ein Netzwerkplan für das VPN, um folgende Fragen zu klären (Melle, bitte ergänzen):
    • Welche LAN-Adressen (nach RFC 1918) sollen für das VPN verwendet werden? Todo: Ausnahmeregeln für Windoze verstehen und erklären.
    • Wer darf mit wem kommunizieren? Welches Routing und welche Firewall-Regeln werden dazu auf dem Server benötigt?
    • Welche Namen haben die VPN-Clients?

SSL-Certs

Um ein Cert zu erstellen, wird ein Key benötigt. Mit OpenSSL geht das so:

openssl genrsa -out vpn.key 2048

Anschließend wird für jeden Client und den Server ein CSR (Certificate Signing Request) benötigt:

openssl req -new -key vpn.key -out client.csr

Es folgt ein Frage-und-Antwort-Spiel. Dabei ist die einzig wichtige Frage: Common Name (eg, YOUR name). Dort den jeweiligen Rechnernamen eintragen, z.B. client001.vpn.freifunk-potsdam.de.

Die CSRs klebt man der Reihe nach in das Eingabefeld bei CaCert (unter Server CertificatesNew). Postwendend erhält man ein halbwegs glaubwürdiges Zertifikat. Außerdem braucht man noch das Root-Cert von CACert.

Die Gültigkeitsdauer der Zertifikate beträgt 6 Monate bis 2 Jahre, abhängig von den Assurance-Punkten des Antragstellers.

Server-Config

Noch nicht fertig, weil kein VPN-Plan vorhanden

Die Server-Config besteht aus:

  • Der globalen Konfiguration /etc/openvpn/server.conf
  • Einer Konfigurationsdatei pro Client in /etc/openvpn/ccd

Die globale Config in /etc/openvpn/server.conf sieht so aus:

port 33469
proto udp

dev tun0

ca /etc/ssl/certs/cacert.org.pem
cert /etc/ssl/certs/vpn-server.crt
key /etc/ssl/private/vpn.key
dh dh1024.pem

mode server
tls-server
ifconfig 10.0.0.1 10.0.0.2
route 10.0.0.0 255.0.0.0

push "route 10.0.0.1"

user nobody
group nogroup

client-config-dir ccd
ccd-exclusive
keepalive 10 120

comp-lzo

persist-key
persist-tun 

status openvpn-status.log

In /etc/openvpn/ccd befindet sich eine Konfigurationsdatei pro Client, die exakt so heißen muß wie der CN im Zertifikat des Clients, also z.B. /etc/openvpn/ccd/client001.vpn.freifunk-potsdam.de:

ifconfig-push 10.0.1.2 10.0.1.1
push "route 10.0.0.0 255.255.0.0"

Client-Config

Die Clients werden alle identisch konfiguriert, wobei jeweils die Zertifikate in client.crt individuelle CNs haben:

client
dev tun
proto udp
remote vpn.freifunk-potsdam.de 33469
nobind
persist-key
persist-tun
ca root.crt
cert client.crt
key vpn.key
comp-lzo
verb 3
mute 20

Routing / Firewall

Todo