OpenVPN auf der Diskstation: Unterschied zwischen den Versionen
imported>Jahlives |
imported>Raymond →Was ist OpenVPN?: typo |
||
(12 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Was ist OpenVPN? == | == 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 | 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.''' | '''Die Umsetzung der unten stehenden Anleitung erfolgt auf eigene Gefahr.''' | ||
=== Erforderliche Pakete installieren === | === Erforderliche Pakete installieren === | ||
Um die Pakete installieren zu können, wird vorausgesetzt, dass die DiskStation gebootstrapped ist. | Um die Pakete installieren zu können, wird vorausgesetzt, dass die DiskStation gebootstrapped ist. Das bedeutet [[IPKG|ipkg]] muss installiert sein. | ||
<pre> | <pre> | ||
ipkg install module-init-tools openvpn openssl bash nano | ipkg install module-init-tools openvpn openssl bash nano | ||
Zeile 53: | Zeile 53: | ||
nano openvpn.conf | nano openvpn.conf | ||
</pre> | </pre> | ||
Der Inhalt der Konfigurationsdatei ist | 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) | ||
<pre> | <pre> | ||
port 1194 | port 1194 | ||
Zeile 87: | Zeile 87: | ||
''Netz: 10.8.0.0 Subnet: 255.255.255.0 Gateway: {ip-der-DiskStation} Metrik: 2'' | ''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 [[IPKG#Startup_Script_openvpn_mit_NAT|Startup Script openvpn mit NAT]] zu finden. Das Script stellt auch eine geordnete start/stop Funktion bereit um Probleme beim Herunterfahren zu vermeiden (siehe [[IPKG#Alternative_IPKG_Startup_Scripts|Alternative IPKG Startup Scripte]]). | |||
=== Hibernation-Probleme === | |||
Diese Zeilen | |||
<pre> | |||
ifconfig-pool-persist ipp.txt | |||
status openvpn-status.log | |||
</pre> | |||
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 | |||
<pre> | |||
client-config-dir ccd | |||
</pre> | |||
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 | |||
<pre> | |||
ifconfig 10.8.0.3 255.255.255.0 | |||
</pre> | |||
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 | |||
<pre> | |||
push "redirect-gateway def1" | |||
push "dhcp-option DNS 10.8.0.1" | |||
</pre> | |||
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.[http://www.synology-forum.de/showthread.html?20108-OpenVPN-verhindert-SpinDown-Standby&p=163813&viewfull=1#post163813 Forum] | |||
=== Server automatisch starten === | === Server automatisch starten === | ||
Zeile 97: | Zeile 125: | ||
nano -w /opt/etc/init.d/S20openvpn | nano -w /opt/etc/init.d/S20openvpn | ||
</pre> | </pre> | ||
Und per copy&paste folgender Inhalt in die Datei übernehmen: | 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): | ||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
Zeile 118: | Zeile 146: | ||
fi | fi | ||
/opt/sbin/openvpn | /opt/sbin/openvpn –-daemon –-cd /opt/etc/openvpn –-config openvpn.conf | ||
# [EOF] | # [EOF] | ||
</pre> | </pre> | ||
Zeile 137: | Zeile 165: | ||
remote-cert-tls server | remote-cert-tls server | ||
ca C:\\programme\\openvpn\\keys\\ca.crt | ca "C:\\programme\\openvpn\\keys\\ca.crt" | ||
cert C:\\programme\\openvpn\\keys\\client1.crt | cert "C:\\programme\\openvpn\\keys\\client1.crt" | ||
key C:\\programme\\openvpn\\keys\\client1.key | key "C:\\programme\\openvpn\\keys\\client1.key" | ||
comp-lzo | comp-lzo | ||
verb 3 | verb 3 | ||
</pre> | </pre> | ||
Die Konfigurationsdatei (Name ist egal, entscheidend ist die Endung .ovpn) kommt (unter Windows) in folgendes Verzeichnis: | Die Konfigurationsdatei (Name ist egal, entscheidend ist die Endung .ovpn) kommt (unter Windows) in folgendes Verzeichnis:<br /> | ||
''c:\programme\OpenVPN\config (Windows 64: c:\Program Files (x86)\OpenVPN\config'' | ''c:\programme\OpenVPN\config (Windows 64: c:\Program Files (x86)\OpenVPN\config)'' | ||
Zudem muss man ein neues Verzeichnis | Zudem muss man ein neues Verzeichnis<br /> | ||
''c:\programme\openVPN\keys (Win 64: c:\Program Files (x86)\OpenVPN\keys)'' | ''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. | 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. | Man muss lediglich den Port 1194 (UDP) auf die Synology DiskStation weiterleiten. | ||
Aktuelle Version vom 15. Januar 2012, 21:16 Uhr
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