Szenario:
Server
Hinweis: Bei Debian liegt bereits eine server.conf bei, dort kann man die Werte auch einfach einsetzen. OpenWRT kommt mit einer Datei "openvpn", die als Vorlage für a) Server oder b) Client dienen kann oder aber c) nur auf die eigene ".conf" verweist. Dafür ist unter dem jeweiligen Stichwort "option enabled=1" zu setzen. (Es darf nur einmal "1" gesetzt sein!) .
/etc/openvpn/server.conf
port 1194 #Port des VPN-Servers
proto udp
dev tun
ca /etc/openvpn/certs/ca.crt #Zertifikate Ort und Name ggf. anpassen
cert /etc/openvpn/certs/central.crt
key /etc/openvpn/certs/central.key
dh /etc/openvpn/certs/dh1024.pem
cipher AES-128-CBC # AES Verschlüsselung
server 10.10.5.0 255.255.255.0 #IP-Netz aus dem die IPS für
"virtuelle" VPN-Interfaces geholt werden:
"virtuelle" VPN-Interfaces geholt werden:
client-to-client #clients dürfen miteinander kommunizieren
client-config-dir /etc/openvpn/remote_networks #Verzeichnis der confs für die Aussenstellen
verb 3
route 10.10.2.0 255.255.255.0 #Netze der Aussenstellen
route 10.10.3.0 255.255.255.0
#route 10.10.4.0 255.255.255.0
#Keine Route für den einzelnen Windows Client! Wir kennen ja die IPs und Netzmaske seines Heimnetzes nicht und wollen es auch gar nicht
#erreichen. Der Rechner selbst wird über seine "virtuelle" IP 10.10.5.xyz erreicht.
push "route 10.10.1.0 255.255.255.0" #Route zur Zentrale1 den Clients mitteilen
push "dhcp-option WINS 10.10.1.223" #ggf. zentralen WINS-Server an Clients mitteilen
keepalive 10 120
comp-lzo
max-clients 100
persist-key
persist-tun #möglichst immer die gleiche IP für tun-device verwenden
fast-io
z.B. für Aussen1 die Datei "clientxy"* mit dem Inhalt:
*Der Dateiname muss mit dem "Common Name" des Clients übereinstimmen! Das ist in der Regel der bei Erzeugung der Client-Zertifikate verwendete Dateiname. Wurden die Zertifikate umbenannt, bleibt der Common Name unverändert. Dann kann man ihn in clientxy.crt im Klartext auslesen.
iroute 10.10.2.0 255.255.255.0 #notwendige Angabe für internes Routing des Tunnels
ifconfig push 10.10.5.5 10.10.5.6 #die 2 benötigten (siehe "Technik") virtuellen IPs des Routers. #die Angabe kann entfallen, dann vergibt OpenVpn diese automatisch .
z.B. iptables -A POSTROUTING -t nat -s 10.10.5.0/24 -j SNAT --to-source 10.10.1.1
Hinweis: Die externen Clients kommen unter der virtuellen "tun-ip" des Clients, also 10.10.5.xxx, auf virtuellem Interface 10.10.5.1 an - dem Netz, dass wir in "server.conf" hinter "server" angeben haben. Damit sie intern Geräte erreichen, muss die IP auf internes Netz, also die interne Server-IP 10.10.1.xxx umgeschrieben werden.
Die Firewall-Zeile bedeutet: Nachdem klar ist, wohin die Pakete gehen, sollen Pakete aus dem Netz des externen Clients die Absender IP der internen Server Netzwerkkarte bekommen.
Weitere Firewall-Regeln auf dem Server sind i.d.R. nicht nötig, da aus Sicht des Servers nur Pakete aus dem eigenen Netz behandelt werden: Die Daten kommen auf einer virtuellen IP 10.10.5.xxx (des Clients) an und gehen unter der internen IP (des Servers) raus. Daten von intern gehen den umgekehrten Weg.
Somit sind alle Geräte intern von den Clients erreichbar und umgekehrt*. Wenn auch der Server (z.B. per ssh) von den Clients erreicht werden soll, muss eine INPUT-Regel für das virtuelle Netz eingefügt werden.
*Dies gilt für routende Clients also für OpenWrt-Router: Bei Windows Clients (die routen nicht) muss eine Eingangs-Firewall-Regel für das virtuelle Netz, hier also 10.10.5.0/24, gesetzt werden.
Client
Einmalig für beliebig viele Clients und Router jeweils eine "clientxy.conf" (Linux) bzw. "clientxy.ovpn" (Windows) anlegen.
client #Dies ist ein Client
dev tun #Einstellung muss wie in server.conf sein
proto udp #Einstellung muss wie in server.conf sein
remote xxx.xxx.xxx.xxx 1194 #Externe Router IP
resolv-retry infinite #Versuche zum Verbindungsaufbau wiederholen
ns-cert-type server #Zerfikatstyp von easy-rsa erzeugt
cipher AES-128-CBC #Einstellung muss wie in server.conf sein
ping 15
ping-restart 45
ping-timer-rem
persist-tun
persist-key
comp-lzo #wie in server.conf
verb 5
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/clientxy.crt
key /etc/openvpn/certs/clientxy.key
OpenWrt-Router
Soll ein OpenWRT Router (mit echter IP) als Server verwendet werden: Gleiche Konfiguration, aber server.conf und Server-Zertifikate statt client.conf usw. verwenden.
Test
Technik