Funkenstrahlen Podcasting, Netzpolitik, App-Entwicklung

Ubuntu als OpenVPN Server

Ihr habt einen Server mit Ubuntu irgendwo im Netz stehen? Dann könnt ihr daraus einen OpenVPN Server machen. Ich habe hier die wichtigsten Schritte für mich dokumentiert.

Foto: pixabay.com unter CC0 Linzenz

OpenVPN installieren

sudo apt-get install openvpn easy-rsa

Falls das Paket easy-rsa nicht vorhanden ist, dann lässt sich das auch hier bekommen.

Server Zertifikate generieren

Passe die Parameter in der Datei vars an deine Bedürfnisse an.

cd /etc/openvpn/easy-rsa
sudo vim vars

export KEY_COUNTRY="XX"
export KEY_PROVINCE="YY"
export KEY_CITY="City"
export KEY_ORG="My VPN Service"
export KEY_EMAIL="mail@example.com"

eventuell noch KEY_SIZE auf mindestens 2048 Bit setzen.

Jetzt können die Zertifikate generiert werden:

source ./vars
sudo -E ./clean-all
sudo -E ./build-ca
sudo -E ./build-key-server server
sudo -E ./build-dh
sudo openvpn --genkey --secret ta.key

Diese müssen dann noch in das OpenVPN Verzeichnis kopiert werden.

sudo cp ca.crt /etc/openvpn
sudo cp ca.key /etc/openvpn
sudo cp dh2048.pem /etc/openvpn
sudo cp server.crt /etc/openvpn
sudo cp server.key /etc/openvpn
sudo cp ta.key /etc/openvpn

Client Zertifikate generieren

Nun müssen noch die Zertifikate für den Client generiert werden.

source ./vars
sudo -E ./build-key user1

Diese Dateien kopiert man nun (am besten via ssh/scp) auf den Client.

ca.crt
user1.crt
user1.key
ta.key

Wie man OpenVPN auf einem iPhone einrichtet, habe ich hier beschrieben.

OpenVPN Konfiguration

Einen eigenen User anlegen

sudo adduser --system --no-create-home --disabled-login openvpn
sudo addgroup --system --no-create-home --disabled-login openvpn

Konfigurationsdatei anlegen:

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

Dort anpassen unter welchem User der OpenVPN Service laufen soll.

sudo vim server.conf

user openvpn
group openvpn

TLS Authentication aktivieren.

sudo vim server.conf

tls-auth ta.key 0

Den OpenVPN Service neu starten.

sudo service openvpn restart

Überprüfen, ob das Netzwerkdevice eingerichtet wurde.

ifconfig tun0

Ab hier solltet ihr euch schon problemlos zum OpenVPN Server verbinden können.

Kompletten Client Traffic durch das VPN routen

Viele möchten gerne den kompletten Traffic ihres Clients über das VPN routen. Das ist zum Beispiel sinnvoll, wenn man in einem öffentlichen WLAN sicher gehen will, dass niemand Daten abgreift.

cd /etc/openvpn
sudo vim server.conf

Diese Zeile aktivieren (ist auskommentiert im Default):

push "redirect-gateway def1 bypass-dhcp"

DNS Server für Clients definieren (hier im Beispiel 8.8.8.8 von Google).

push "dhcp-option DNS 8.8.8.8"

Den OpenVPN Service neu starten.

sudo service openvpn restart

IP-Forwarding aktivieren

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

SNAT Regel anlegen (hinten $SERVERIP durch die IP Adresse des Servers ersetzen):

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to $SERVERIP

Dafür sorgen, dass die iptables Regel nach einem Reboot noch vorhanden ist:

sudo apt-get install iptables-persistent
sudo bash -c "iptables-save > /etc/iptables/rules.v4"

Als Vorlage hat mir das Gist von padde gedient.

Das lässt sich auch auf einem OpenWRT betriebenen Router aufsetzen. Wie das geht, findet sich hier.

Wer in die Details einsteigen will, der findet hier die komplette Anleitung von openvpn.net.