OpenVPN auf der Diskstation

Aus Synology Wiki
Wechseln zu: Navigation, Suche

Was ist OpenVPN?

VPN steht für virtuelles privates Netzwerk. Es gibt verschiedene VPN-Lösungen wie zum Beispiel PPTP (Windows), welches sehr einfach einzurichten ist, jedoch hat OpenVPN viel mehr Konfigurationsmöglichkeiten. Ich brauche VPN, um z.B. von der Schule mit meinem Netbook auf meine Freigaben zugreifen zu können oder um den Router zu konfigurieren. Man kann den kompletten Internetverkehr über den verschlüsselten Tunnel laufen lassen. Die Umsetzung der unten stehenden Anleitung erfolgt auf eigene Gefahr.

Erforderliche Pakete installieren

Um die Pakete installieren zu können, wird vorausgesetzt, dass die DiskStation gebootstrapped ist. Das bedeutet ipkg muss installiert sein.

ipkg install module-init-tools openvpn openssl bash nano

Modul tun.ko einbinden

Das Modul “tun.ko” ist ab DSM 2.3 in der Firmware der DiskStation enthalten. Es sorgt für das Tunneling.

/sbin/insmod /lib/modules/tun.ko
mkdir /dev/net/
mknod /dev/net/tun c 10 200

IP-Forwarding in der Kernelschnittstelle aktivieren

echo 1 > /proc/sys/net/ipv4/ip_forward

ca und server-key für OpenVPN generieren

mkdir /openvpntemp
cd /openvpntemp
wget http://openvpn.net/release/openvpn-2.1.1.tar.gz
tar -zxvf *.tar.gz 

cp -r openvpn-2.1.1/easy-rsa/2.0 /opt/etc/openvpn/
cd /opt/etc/openvpn/
mv 2.0 easy-rsa
cd easy-rsa
 
bash
source ./vars
 
mkdir -p /opt/etc/openvpn/easy-rsa/keys
bash ./clean-all
bash ./build-ca
bash ./build-key-server server
bash ./build-dh

Client-Keys generieren

Achtung: Für jeden Client muss ein eigener Key generiert werden (client1, client2, clientn)

bash ./build-key client1

Server-Konfiguration

mv /opt/etc/openvpn/openvpn.conf /opt/etc/openvpn/openvpn.conf.alt

cd /opt/etc/openvpn
touch openvpn.conf
nano openvpn.conf

Der Inhalt der Konfigurationsdatei ist (Achtung bei Copy/Paste es können zeichen wie z.B.: " falsch übernommen werden und als . oder ? eingefügt werden)

port 1194
proto udp
dev tun
 
ca /opt/etc/openvpn/easy-rsa/keys/ca.crt
cert /opt/etc/openvpn/easy-rsa/keys/server.crt
key /opt/etc/openvpn/easy-rsa/keys/server.key
dh /opt/etc/openvpn/easy-rsa/keys/dh1024.pem
 
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
 
client-to-client
#Hier die Route des lokalen Netzes eintragen (meist 192.168.0.0 oder 192.168.1.1)
push “route 192.168.5.0 255.255.255.0″
#Hier einen DNS eintragen (zB IP des Routers oder 62.2.24.162 (cablecom dns))
push “dhcp-option DNS 192.168.5.1″
push “redirect-gateway”
 
keepalive 10 120
comp-lzo
 
persist-key
persist-tun
status openvpn-status.log
 
verb 3
daemon

Das virtuelle VPN-Netzwerk verteilt also IP-Adressen im Bereich 10.8.0.XX. Zudem kann man auf das interne Netzwerk zugreifen, welches im Bereich 192.168.5.XX liegt, und über dieses surfen, sofern im Router eine statische Route folgendermassen erstellt worden ist:

Netz: 10.8.0.0 Subnet: 255.255.255.0 Gateway: {ip-der-DiskStation} Metrik: 2

Wer keinen Zugriff auf die Einstellungen des lokalen Router hat oder aus anderen Gründen dessen Einstellungen nicht ändern möchte der kann NAT verwenden. Ein passendes Optware Startup Script ist unter Startup Script openvpn mit NAT zu finden. Das Script stellt auch eine geordnete start/stop Funktion bereit um Probleme beim Herunterfahren zu vermeiden (siehe Alternative IPKG Startup Scripte).

Hibernation-Probleme

Diese Zeilen

ifconfig-pool-persist ipp.txt
status openvpn-status.log

bewirken, dass alle 10 bzw. 1 Minute auf die Platte geschrieben wird und folglich diese nicht mehr in den Standby gehen. Um die Standby-Funktionalität wieder herzustellen, müssen diese beiden Zeilen auszukommentiert werden.

Um trotzdem jedem Client eine feste IP zuzuweisen, kann dies wie im nächsten Absatz beschrieben über das CCD Verzeichnis bewerkstelligt werden.

Jedem Client fixe Parameter zuweisen

Die IP-Vergabe kann auch Zertifikatsbasierend erfolgen. Dazu den Unterorder ccd anlegen. Die Server-Conf um folgende Zeile erweitern

client-config-dir ccd

Dann in /opt/etc/openvpn/ccd pro CN (CommonName) eine Datei anlegen. Die Datei muss genau so heissen wie der CN im Zertifikat des Clients. In dieser Datei kann man ganz normale OpenVPN Anweisungen verwenden z.B. dem Client eine IP geben

ifconfig 10.8.0.3 255.255.255.0

Da man in diesen Clientdateien Anweisungen für OpenVPN verwenden kann, wird es auch möglich pro Client festzulegen, ob der gesamte Traffic via OpenVPN umgeleitet wird und gleich einen DNS Server festlegen

push "redirect-gateway def1"
push "dhcp-option DNS 10.8.0.1"

somit kann man in der Hauptkonfig auf den push des Gateways verzichten und nur bei bestimmten Clients den Traffic umleiten. Allerdings muss unbedingt für alle Clients (CN) ein File anleget werden. Sonst schnappt sich ein Client (ohne Konfig) eine IP die eigentlich ein anderer Client in seinem Konfigfile hat (der aber gerade nicht mit OpenVPN verbunden ist). Dadurch dass keine ipp.txt mehr vorhanden ist, kriegt ein Client ohne Konfig die erste freie IP im OpenVPN-Subnetz.Forum

Server automatisch starten

Die Datei leeren:

>/opt/etc/init.d/S20openvpn

Danach muss man die Datei mit nano öffnen

nano -w /opt/etc/init.d/S20openvpn

Und per copy&paste folgender Inhalt in die Datei übernehmen (Achtung bei Copy/Paste es können zeichen wie z.B.: " falsch übernommen werden und als . oder ? eingefügt werden):

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
 
if ( [ ! -c /dev/net/tun ] ) then

if ( [ ! -d /dev/net ] ) then
mkdir -m 755 /dev/net
fi
mknod /dev/net/tun c 10 200
fi 
 
if ( !(lsmod | grep -q “^tun”) ); then
insmod /lib/modules/tun.ko
fi
 
if [ -n "`pidof openvpn`" ]; then
/bin/killall openvpn 2>/dev/null
fi
 
/opt/sbin/openvpn –-daemon –-cd /opt/etc/openvpn –-config openvpn.conf
# [EOF]


Client-Konfiguration Windows

Die Client-Konfiguration kann 1:1 übernommen werden. Nur die DynDNS Adresse muss eingetragen und der Name des Clientzertifikats geändert werden.

client
dev tun
proto udp
remote meine.dyndns.org 1194

resolv-retry infinite
nobind
persist-key
persist-tun

remote-cert-tls server
ca "C:\\programme\\openvpn\\keys\\ca.crt"
cert "C:\\programme\\openvpn\\keys\\client1.crt"
key "C:\\programme\\openvpn\\keys\\client1.key"

comp-lzo
verb 3

Die Konfigurationsdatei (Name ist egal, entscheidend ist die Endung .ovpn) kommt (unter Windows) in folgendes Verzeichnis:
c:\programme\OpenVPN\config (Windows 64: c:\Program Files (x86)\OpenVPN\config)

Zudem muss man ein neues Verzeichnis
c:\programme\openVPN\keys (Win 64: c:\Program Files (x86)\OpenVPN\keys)

erstellen. In dieses kopiert man den Client-Key, das Client-Zertifikat und das ca-Zertifikat.

Port freigeben

Man muss lediglich den Port 1194 (UDP) auf die Synology DiskStation weiterleiten.

Links

http://www.velderboard.li/linux-unix/openvpn-auf-synology-nas/
http://openvpn.net/index.php/open-source/documentation.html