Einen eigenen VPN Server einzurichten kann aus vielerlei Gründen Sinn machen. Z.B um von unterwegs sicher auf das eigene Heimnetzwerk zugreifen zu können, oder um den Netzwerktraffic zu verschlüsseln wenn man in einem Hotel oder Caffee in ein ungesichertes Netzwerk eingebucht ist.
Wer dafür einen allerorts günstig angebotenen vServer verwenden möchte muss darauf achten dass dieser über ein TUN/TAP Netzwerkinterface verfügt. Dies ist bei virtuellen Servern oft nicht vorhanden, oder nur gegen Aufpreis zu haben.

Zu diesem Thema gibt es ein aktualisiertes Tutorial für einen OpenVPN Server, welcher IPv4 und IPv6 unterstützt: OpenVPN Server mit IPv4 und IPv6.

Server einrichten:

Zuerst muss Openvpn installiert werden

 sudo apt-get install openvpn

Dann das Verzeichnis zur Schlüsselerzeugung nach /etc/openvpn kopieren

 sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa2

Vor dem Erstellen der Schlüssel und Zertifikate sollten in der /etc/openvpn/easy-rsa2/vars einige Variablen angepasst werden. Damit erspart man sich dass man diese bei jeder Zertifikaterstellung neu eingeben muss.

sudo nano /etc/openvpn/easy-rsa2/vars

und KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL anpassen.

Nun das Verzeichnis für die Schlüssel erstellen:

sudo mkdir /etc/openvpn/easy-rsa2/keys

Jetzt werden das Master-Zertifikat und der Master-Schlüssel erstellt

cd /etc/openvpn/easy-rsa2

source ./vars

sudo -E ./clean-all

sudo -E ./build-ca

Als nächstes Zertifikat und Schlüssel für den Server generieren:

sudo -E ./build-key-server servername

Für „Common Name“ nehmen wir den Hostname des Rechners (welcher in /etc/hostname steht). Die Frage nach einem Passwort einfach mit Return überspringen.
Es folgen noch zwei Abfragen, welche beide mit „Y“  benatwortet werden können.

Jetzt werden noch die Schlüssel für die Clientrechner erstelt. Dieser Schritt muss für jeden Computer der sich später mit dem Server verbinden soll extra durchgeführt werden. Bei der Abfrage „Common Name“ wird in diesem Fall der Name des Clients eingetragen.

sudo -E ./build-key clientname1

sudo -E ./build-key clientname2

usw.

Dann

sudo -E ./build-dh

Die erstellten Schlüssel liegen nun alle in /etc/openvpn/easy-rsa2/keys/ und können auf die entsprechenden Clients verteilt werden.
Unter Linux nach /etc/openvpn, unter Windows nach c:programmeopenvpn
Client 1 bekommt: ca.crt, clientname1.crt, clientname1.key
Client 2 bekommt: ca.crt, clientname2.crt, clientname2.key
usw.

Als nächstes legen wir uns einen neuen Benutzer an, welcher openvpn ausführt

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

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

Damit unser kompletter Traffic über das VPN geroutet wird müssen dafür die entsprechenden Regeln angelegt werden. Damit diese nach einen Neustart erhalten bleiben schreiben wir diese in die /etc/rc.local. Die Regeln werden erst nach einem Neustart des Rechners wirksam.

sudo nano /etc/rc.local

und fügen folgenden Code vor dem „Exit 0“ ein:

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -o eth0 -i tun0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT 
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Die Namen der Netzwerkinterfaces (eth0 und tun0) können in den meisten Fällen übernommen werden. Wer mehrere Netzwerkkarten hat muss dies wahrscheinlich anpassen. „10.8.0.0/24“ ist die Standardeinstellung für das OpenVPN Subnetz.
Der Rechner muss nun neugestartet werden 

Nun legen wir uns die Serverkonfigurationsdatei an:

sudo touch /etc/openvpn/server.conf

Die Datei öffnen

sudo nano /etc/openvpn/server.conf
und den folgenden Text einfügen:
port 1194
proto udp
dev tun
ca ./easy-rsa2/keys/ca.crt
cert ./easy-rsa2/keys/servername.crt
key ./easy-rsa2/keys/servername.key # Diese Datei geheim halten.
dh ./easy-rsa2/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
verb 3

Unter /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz gibt es Beispieldateien für die server.conf und die Clientdateien. Diese müssen entpackt werden und können in den Voreinstellungen verwendet werden. Angepasst werden muss dann aber:
die Pfade ca, cert, key und dh,  und vor „push „redirect-gateway def1 bypass-dhcp““ muss das # entfernt werden. Ausserdem muss user und group angepasst werden.Nun ist die Serverkonfiguration beendet und OpenVPN kann neugestartet werden um die neue  Konfiguration zu laden.

sudo service openvpn restart

Client einrichten

Zuerst muss natürlich auch auf dem Client OpenVPN installiert werden:

sudo apt-get install openvpn

Wer es noch nicht erledigt hat muss noch die ca.crt, clientname1.crt, clientname1.key vom Server auf den Client nach /etc/openvpn kopieren.

Die Clientkonfigurationsdatei anlegen

sudo touch /etc/openvpn/clientname1.ovpn

öffnen

sudo nano /etc/openvpn/clientname1.ovpn

und folgenden Text einfügen:

client
dev tun
proto udp
remote xx.xx.xx.xx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert clientname1.crt
key clientname1.key
ns-cert-type server
comp-lzo
verb 3

xx.xx.xx.xx muss durch die öffentliche IP des Servers ersetzt werden. Es kann auch eine dyndns Adresse eingegeben werden.
Wer die Beispieldateien verwendet muss die IP Adresse anpassen und die Pfade zu ca, cert und key. Ansonsten können die Standardeinstellungen verwendet werden.

Wer den Server zuhause hinter einem Router stehen hat, oder eine Firewall wie ufw verwendet muss Port 1194 UDP freigeben.

Wer die Verbindung über den Netzwerkmanager aufbauen will und nicht über die Konsole kann die oben erstellte clientname.ovpn einfach importieren. Sollte der Netzwerkmanager nicht installiert sein kann dieser unter Ubuntu und Gnome/Unity mit
„sudo apt-get install network-manager-openvpn-gnome“ installiert werden.

Jetzt kann die Verbindung aufgebaut werden. Dabei muss OpenVPN mit sudo oder als root ausgeführt werden, da sonst die nötigen Routen nicht gesetzt werden können

cd /etc/openvpn

sudo openvpn clientname1.ovpn

Wenn man nun auf http://wieistmeineip.de geht sollte nichtmehr die eigene IpAdresse, sondern die vom Server angezeigt werden.


Dieser Artikel ist lizenziert unter einer Creative Commons Namensnennung 3.0 Deutschland Lizenz.

4 Comments

  1. Muss der Computer während der Konfiguration online sein oder sollte man die Internetverbindung doch lieber trennen, aus Sicherheitsgründen.

    • Ich sehe keinen Grund warum die Sicherheit des Systems während der Konfiguration beeinträchtigt sein sollte. Ein unauthorisierter Zugriff ist auch während der Einrichtung nicht möglich, so dass die Internetverbindung gerne bestehen bleiben kann.