OpenVPN einrichten Part 1 – VPN-Server konfigurieren

In diesem Tutorial zeige ich, wie man OpenVPN korrekt mit einem VPN-Server, Debian-XFCE-Client und Android-Client einrichtet. Ich verwende hier verschiedene Quellen, die ich auf meine Bedürfnisse angepasst habe, um ein von Anfang bis Ende funktionierendes Tutorial anzubieten. Es sollte daher ohne Zusatzlektüre und viel suchen möglich sein, auf Anhieb ein funktionierendes OpenVPN-Netzwerk aufzubauen.

Quellen

Ich habe mein Wissen aus folgenden Quellen bezogen, da aufgrund diverser Probleme mit der Firewall und dem Aufbau des Tunnels ein Tutorial nicht für meine Bedürfnisse ausgereicht hat.
http://www.karesyk.de/vpn-server-einrichten/
http://forum.openvpn.eu/viewtopic.php?f=1&t=5058
http://allanmcrae.com/2013/09/routing-traffic-with-openvpn/
http://wiki.ubuntuusers.de/OpenVPN
http://nicolasjolet.blogspot.com.au/2011/01/as-i-m-completly-unaware-of-openssl-use.html
http://openvpn.net/index.php/open-source/documentation/howto.html
http://www.debian.org/doc/manuals/debian-reference/ch05.de.html

VPN-Server einrichten

# Root werden
su
# OpenVPN und OpenSSL installieren
apt-get install openvpn openssl
# wechseln in Open-VPN-Verzeichnis und kopieren der Standardkonfiguration
cd /etc/openvpn
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 ./easy-rsa
# Datei easy-rsa/vars editieren
nano easy-rsa/vars

In der Datei wird die Variable export EASY_RSA editiert:

export EASY_RSA="/etc/openvpn/easy-rsa"

Jetzt beginnt die Basiskonfiguration zur Vorbereitungs der Schlüsselgenerierung.

# Verzeichnis wechseln
cd /etc/openvpn/easy-rsa
# Konfiguration
source vars
./clean-all
./pkitool --initca
# symbolischen (weichen) Link erzeugen
ln -s openssl-1.0.0.cnf openssl.cnf

Jetzt werden die Zertifikate und Schlüssel generiert. Beim Kürzel für das Land tragen wir DE für Deutschland ein. Die anderen Angaben sind optional. Sofern der gleiche Common Name (CN) mehrmals bei verschiedenen Clients vergeben wird erscheint die folgende Fehlermeldung:

failed to update database
TXT_DB error number 2

Die Lösung ist, dass der CN nur einmal vergeben werden darf.

# Root CA erzeugen
./etc/openvpn/easy-rsa/build-ca OpenVPN
# Server Certificate erzeugen
./etc/openvpn/easy-rsa/build-key-server server
# erstes Client Certificate erzeugen (bei weiteren einfach durchzählen)
./etc/openvpn/easy-rsa/build-key client1
# Diffie Hellman parameters berechnen
./etc/openvpn/easy-rsa/build-dh
# Konfigurationsdatei für OpenVPN anlegen
cd /etc/openvpn
touch openvpn.conf
nano openvpn.conf

Die Datei hat folgenden Inhalt:

dev tun
proto udp
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
user nobody
group nogroup
server 10.8.0.0 255.255.255.0
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
client-to-client
push "redirect-gateway def1"
#set the dns servers
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
log-append /var/log/openvpn
comp-lzo

Nun wird die Internetweiterleitung eingerichtet, um nachher über VPN auch Internetzugriff zu erhalten. Sofern euer Debian Server nicht über Kabel angeschlossen ist, sondern über WLAN, dann müsst ihr eth0 mit dem Namen eures Netzwerkadapters (z.B. wlan0) ersetzen:

sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

Danach stellt ihr eure Firewall ein. Hierzu empfehle ich folgenden Artikel über iptables als Linux Firewall. Die Firewall wird auch mit dem dort beschriebenen Mechanismus persistent gemacht. Folgender Eintrag konfiguriert die Firewall für OpenVPN korrekt:

#openvpn
iptables -A INPUT -i eth0 -m state --state NEW -p udp --dport 1194 -j ACCEPT

## Allow TUN interface connections to OpenVPN server
iptables -A INPUT -i tun+ -j ACCEPT

## Allow TUN interface connections to be forwarded through other interfaces
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

## NAT the VPN client traffic to the internet
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

iptables -t nat -A POSTROUTING -s 10.0.0.0/8 ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE

Nun wird die Datei sysctl.conf editiert.

nano /etc/sysctl.conf
# Raute entfernen vor folgenden Einträgen bzw. diese hinzufügen
net.ipv4.ip_forward=1
net.inet.ip.fastforwarding = 1

Nun noch die Zugangsdatei für Client1 (für weitere Clients Zeile „cert client1.crt und key client1.key“ auf korrekte Datei abändern) anlegen, welche für den Start des VPN auf dem Client bzw. Server benötigt wird, und die unsere öffentliche IP oder unsere DynDNS-Adresse beinhaltet. Dabei müssen wir DEBIAN-IP durch unsere öffentliche IP und Debian-DYN-DNS durch unsere DynDNS-Adresse ersetzen. Ich hatte nicht beide Informationen, daher konnte ich den VPN auf dem Server nicht ordnungsgemäß starten und erhielt die Problematik unter http://forum.openvpn.eu/viewtopic.php?f=1&t=5058.

>cd /etc/openvpn/easy-rsa/keys
nano debianserver.ovpn
# folgenden Inhalt einfügen und Debian-DYN-DNS und DEBIAN-IP ersetzen
dev tun
client
proto udp
remote Debian-DYN-DNS 1194
remote DEBIAN-IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3

Nun wird ein Paket für Client1 erstellt, welches sämtliche benötigten Zertifikate und Schlüssel zum Verbindungsaufbau beinhaltet und kopieren dies in unser Home-Verzeichnis und geben dem lokalen Benutzer (bei mir stefan) die nötigen Zugriffsrechte auf die Datei und starten den openvnc neu.

tar czf openvpn-client1-keys.tgz ca.crt client1.crt client1.csr client1.key raspberrypi.ovpn
# verschieben in Home-Verzeichnis
mv openvpn-client1-keys.tgz /home/pi
# Besitzrechte
chown stefan:stefan /home/pi/openvpn-client1-keys.tgz</pre>
# openvpn neustarten
/etc/init.d/openvpn restart

Wichtig ist noch eine Portweiterleitung bzgl. Port 1194 – Protokoll UDP auf euren Server in eurem Router einzurichten. Wie das geht steht in der Bedienungsanleitung eures Routers.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert