Sascha's Wiki

Einrichtung von OpenVPN mit TAP-Device

Durch ein TAP Device kann man einen Tunnel aufbauen und bekommt eine IP im selben Netzwerk wie der VPN Server (bsp. Fritz 192.168.178.xxx).

Installation

sudo apt-get install openvpn 

ab Ubuntu 13.04

Ab Ubuntu 13.04 muss noch easy-rsa installiert werden. Dieses Paket hilft bei der Verwaltung und Erzeugung der Schlüssel.

sudo apt-get install easy-rsa

Konfiguration

easy-rsa

Als erstes sollte man die Beispielkonfiguration und das Verzeichnis zur Schlüsselerzeugung an einen geeigneten Ort entpacken:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gunzip /etc/openvpn/server.conf.gz
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa2 

ab Ubuntu 13.04

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gunzip /etc/openvpn/server.conf.gz
sudo cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa2 

OpenVPN konfiguration

Die Konfiguration findet man unter /etc/openvpn/server.conf. Nachfolgend nur die in der Standardkonfiguration geänderten Werte:

#beliebige Werte eintragen
port  1000 #wunschport eintragen
proto tcp  #tcp oder udp 

#für tap Device
dev tap0

#Pfad zum easy-rsa Verzeichnis anpassen
ca         ./easy-rsa2/keys/ca.crt
cert       ./easy-rsa2/keys/server.crt
key        ./easy-rsa2/keys/server.key
dh         ./easy-rsa2/keys/dh2048.pem
crl-verify ./easy-rsa2/keys/crl.pem

#Sorgt dafür, dass bei Verbindungsabbruch Clients dieselbe IP bekommen
#verhindert komplikationen
ifconfig-pool-persist ipp.txt

#werte anpassen  
#<lokale_ip> für Fritz Box zb 192.168.178.50
#<subnetz>   subnetz des netzwerkes meist 255.255.255.0
#<range_from> beginn welche IPs für Clients vergeben werden sollen
#<range_to>   ende zb 192.168.178.230 192.168.178.250
server-bridge <lokale_ip> <subnetz> <range_from> <range_to>

#Route für das Heimnetz an VPN-Clients senden
#<ip_des_routers> bei Fritz Box 192.168.178.1
#<subnetz> meist 255.255.255.0
push "route <ip_des_routers> <subnetz>"

#Wenn man den VPN-Clients feste IP-Adressen zuweisen möchte 
#muss man unter /etc/openvpn eine Datei ipp.txt anlegen. 
#Genaueres im Punkt feste IP-Adressen für Clients.
client-config-dir /etc/openvpn/ccd

#Ermöglicht zwei VPN-Clients miteinander zu komminizieren
client-to-client

#Wenn man möchte dass mehrere Verbindungen mit demselben
#Client Zertifikat erlauben möchte
duplicate-cn

#Konfiguration von Verbindungsauf- und abbau
#Mehr in Verbindungsauf- und abbau
up   "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"

feste IP-Adressen für Clients

Um jedem VPN-Client bzw. jedem VPN-Zertifikat bei jedem Verbindungsaufbau immer dieselbe IP im Heimnetz zuzuweisen muss das ccd Verzeichnis in /etc/openvpn/ vorhanden sein. Anschließend muss für jeden Client nachfolgende Config angelegt werden:

#<clientName> der bei der easy-rsa erzeugte Zertifikatsname
touch /etc/openvpn/ccd/<clientName>

#inhalt der Datei
#<ip-des-clients> bsp für Fritz Box 192.168.178.245
#<subnetzmaske> meist 255.255.255.0
ifconfig-push <ip-des-clients> <subnetzmaske>

Verbindungsauf- und abbau

Damit die Verbindung fehlerfrei funktioniert müssen unter /etc/openvpn/ die Dateien up.sh und down.sh angelegt werden. up.sh

#!/bin/bash

BR=$1
DEV=$2
MTU=$3
/sbin/ifconfig $DEV mtu $MTU promisc up
brctl addif $BR $DEV

down.sh

#!/bin/bash

BR=$1
DEV=$2

brctl delif $BR $DEV
/sbin/ifconfig $DEV down

Nun noch die Skripte ausführbar machen

chmod +x /etc/openvpn/up.sh /etc/openvpn/down.sh

Zertifikate anlegen

cd /etc/openvpn/easy-rsa2

. ./vars
./clean-all
./build-ca

ai:easy-rsa # ./build-ca
Generating a 1024 bit RSA private key
............++++++
...........++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KG]:
State or Province Name (full name) [NA]:
Locality Name (eg, city) [BISHKEK]:
Organization Name (eg, company) [OpenVPN-TEST]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:OpenVPN-CA
Email Address [me@myhost.mydomain]:
Note that in the above sequence, most queried parameters were defaulted to the values set in the vars or vars.bat files. The only parameter which must be explicitly entered is the Common Name. In the example above, I used "OpenVPN-CA".

Generate certificate & key for server

Next, we will generate a certificate and private key for the server. On Linux/BSD/Unix:

./build-key-server server

As in the previous step, most parameters can be defaulted. When the Common Name is queried, enter "server". Two other queries require positive responses, "Sign the certificate? [y/n]" and "1 out of 1 certificate requests certified, commit? [y/n]".

Generate certificates & keys for 3 clients

Generating client certificates is very similar to the previous step. On Linux/BSD/Unix:

./build-key client1
./build-key client2
./build-key client3

If you would like to password-protect your client keys, substitute the build-key-pass script.

Remember that for each client, make sure to type the appropriate Common Name when prompted, i.e. "client1", "client2", or "client3". Always use a unique common name for each client.

Generate Diffie Hellman parameters

Diffie Hellman parameters must be generated for the OpenVPN server. On Linux/BSD/Unix:

./build-dh

Output:

ai:easy-rsa # ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.................+...........................................
...................+.............+.................+.........
......................................

Beispielkonfig für Client

client
dev tap
proto tcp
remote <externe-dyndns-addresse> <port> #bsp.: bla.dyndns.org 1000
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert changer.crt
key changer.key
ns-cert-type server
comp-lzo
route-nopull
route 192.168.178.0 255.255.255.0

Problemlösungen

Es kann sein dass das die eingerichteten Routen nicht richtig funktionieren und das IP-Forwarding nicht aktiviert werden kann. Sollten Probleme bei der Verbindung zu internen Netzwerkressourcen auftreten, muss man in die rc.local unter /etc/rc.local nachfolgendes ergänzen.

iptables -t nat -F POSTROUTING

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

/etc/init.d/openvpn stop

/etc/init.d/openvpn start

exit 0

Für system.d

iptables -t nat -F POSTROUTING

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

systemctl stop openvpn

systemctl start openvpn

exit 0

homeserver/openvpn.txt · Zuletzt geändert: 2016/05/31 09:57 von changer