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.
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
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.
4 Comments
Kurz und übersichtlich. Genau so eine Anleitung habe ich für mein VPN gesucht. Vielen Dank!
Herzlichen Dank für die Anleitung! Klappt einwandfrei 😉
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.