surf´in USA

Heute habe ich mir zusamm mit einem Freund einen kleinen vServer gekauft, welcher in den USA gehostet ist. Wieso ausgerechnet die USA mag man sich fragen.. nunja, der Server soll uns hauptsächlich als Gateway dienen, um länderspezifische Blockaden zu umgehen. Das diese Sperren nutzlos und sehr simpel zu umgehen sind, beweist dieser Artikel. Kernpunkt dieses Artikels wird die Einrichtung von openVPN sein, da sämtliche benötigten Funktionen vom sicheren VPN-Tunnel bis zum umleiten der Routen mit diesem Tool realisiert werden können. Der Artikel gliedert sich in 3 Teile:

  1. openVPN-Server installieren
  2. openVPN-Client einrichten
  3. den VPN-Tunnel als Default-Gateway verwenden & mögliche Probleme während der Installation

1. Server installieren

Als Basis nutze ich ein Debian 7 System. Hier installiert man (als root) das Programm mit folgendem Befehl:

apt-get install openvpn

Um das Programm mit der Beispielconfig zu füllen, führen wir als nächstes folgende Schritte in der Shell aus:

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

Die Verbindung zwischen Server und Client wird mit Hilfe von Zertifikaten realisiert, diese werden auf dem Server erzeugt und entsprechende Files anschließend auf die Client(s) kopiert. Durch einen Fehler wird unter Umständen das Verzeichnis ./keys nicht automatisch erstellt und muss von Hand angelegt werden. Geht dazu in den Ordner /etc/openvpn/easy-rsa2 und führt folgenden Befehl aus:

mkdir keys

Im Anschluss erstellen wir das Master-Schlüssel und löschen vorher zur Sicherheit einmal alles mit dem entsprechenden Skript

./clean-all
./build-ca

An dieser Stelle kann es zu einem Fehler kommen, dass angeblich die falsche openSSL-Version installiert ist oder der Pfad nicht gefunden wird. Um dieses Problem zu lösen führen wir im selben Ordner einfach folgenden Befehl aus:

sudo cp openssl-1.0.0.cnf openssl.cnf

Jetzt muss noch das Zertifikat und der Schlüssel für den Server erstellt werden:

./build-key-server server

Wichtig dabei ist, dass bei „Common Name“ der Name eingegeben werden sollte, mit dem auf den Server später zugegriffen wird. Das kann z.B. auch der DynDNS-Name sein. Das „Challenge Password“ sollte leer gelassen werden, sonst wäre es möglich sich mit diesem Passwort anzumelden.

Zur sicheren Übertragung der kryptografischen Schlüssel über sichere Kanäle muss noch der Diffie-Hellman-Parameter generiert werden:

./build-dh

Jetzt sind alle für den Server benötigten Dateien erstellt. Jetzt geht es an das anlegen der Benutzer. Die Namen sind frei wählbar:

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

Im Ordner keys haben sich mittlerweile eine ganze Menge Dateien angehäuft. Die .key-Dateien sind geheime Schlüssel, die nur auf den entsprechenden Clients gespeichert werden sollten wohingegen die .cert-Dateien Zertifikate sind die nicht geheim gehalten werden müssen. Kurz gesagt im oben genannten Beispiel vom client1 müssen die Dateien „ca.crt“, „client1.key“ und „client1.crt“ auf den VPN-Client kopiert werden. Die ca.crt muss dabei auf jedem Client vorhanden sein. Am sichersten und einfachsten packt man diese Dateien in ein .tar-Archiv und versendet sie.

Kommen wir nach dem erstellen der Zertifikate und Schlüssel nun zur Konfiguration des Servers. Die Konfigurationsdatei liegt normalerweise in /etc/openvpn/server.conf und muss noch angepasst werden. Die wichtigsten Änderungen betreffen die Pfade zu den Zertifikaten und sollten (wenn die Dateien wie oben beschrieben angelegt wurden) wie folgt aussehen:

ca ./easy-rsa2/keys/ca.crt
cert ./easy-rsa2/keys/server.crt
key ./easy-rsa2/keys/server.key # Diese Datei geheim halten.
dh ./easy-rsa2/keys/dh1024.pem # Diffie-Hellman-Parameter

Ein gelegentlich auftretender Fehler ist, dass der dh-Parameter weiter unten in der config nochmals abgefragt wird, kommentiert diesen ggf aus oder löscht die Zeile gleich aus der config.

Zur Steigerung der Sicherheit ist es ratsam, openVPN nicht mit root-Rechten laufen zu lassen. Dazu kommentiert man in der config einfach folgende Zeilen ein:

user nobody
group nobody

Wer auch nobody nicht vertraut, kann auch einen eigenen user dafür anlegen, welcher keinen login und keine shell hat. Dazu geben wir folgendes in die Konsole ein:

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

Nun sind alle wesentlichen Einstellungen serverseitig getan und wir starten ihn neu:

/etc/init.d/openvpn restart

2. openVPN-Client einrichten

Linux:

Die Installation erfolgt wie beim Server mit apt-get install openvpn. Ob es sich beim eingesetzten System um einen Server oder Client hält, hängt von der config ab. Analog zur default-server-config kopieren wir auch für den Client eine config in den Ordner:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Im Ordner /etc/openvpn erstellen wir mit „mkdir keys“ einen Ordner für die Client-Schlüssel und fügen dort die drei oben genannten Dateien ein. Damit diese von der Config auch gefunden werden und der Client den richtigen Server anspricht, müssen wir auch diese editieren:

remote mein.server.de 1194
ca ./keys/ca.crt
cert ./keys/client1.crt
key ./keys/client1.key

Hier wird danach ebenfalls das Programm mit /etc/init.d/openvpn restart neugestartet werden und schon sollte eine Verbindung aufgebaut werden. Testen könnt ihr das, indem ihr den server anpingt. Bei Standardconfig sollte dies mit „ping 10.8.0.1“ gehen.

Windows

Unter Windows liegt das Programm im Normalfall in C:\Programme\openVPN Dort gibt es den Ordner „configs“ in dem ihr eine Datei config.ovpn erstellen müsst. Im folgenden mal der Inhalt meiner config, analog könnt ihr euch auch eine kommentierte Beispielconfig aus dem Web suchen:

client
dev tap
proto udp
remote meinserver.dyndns.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3

ca ca.crt
cert client1.crt
key client.key

Ähnlich wie unter Linux müsst ihr die Pfade unter „remote“ zum Server mit einer Adresse/IP anpassen und unten die Pfade zu den Dateien anpassen. Liegen die Zertifikate und Schlüssel im selben Ordner, so genügt es die Pfade wie oben zu sehen anzupassen.

3. VPN-Tunnel als Default-Gateway verwenden & mögliche Probleme während der Installation

Mit der oben genannten Konfiguration haben wir erfolgreich einen VPN-Tunnel zwischen Server und Client hergestellt, der normale Web-Traffic fließt jedoch wie gehabt über die heimische Internet-Leitung. Möchten wir nun diesen auch über den Server umleiten, so genügt es, eine Zeile in der Serverconfig zu ergänzen:

push "redirect-gateway def1 bypass-dhcp"

Das sollte im Normalfall schon ausreichen, der Server muss nur neugestartet werden und bei der nächsten Verbindung mit dem Client wird automatisch auf dem PC eine neue default-route definiert, welche sämtlichen Traffic auf den Server weiterleitet. Damit dieser den Traffic auch routet, muss die Systemdatei /etc/sysctl.conf bearbeitet werden und die Zeile „net.ipv4.ip_forward=1“ einkommentiert werden und anschließend das Netzwerk z.B. mit „/etc/init.d/networking restart neugestartet werden. Wenn dies nicht hilft und ihr es euch leisten könnt, macht einen neustart des Servers, danach geht es auf jeden Fall.

Wenn ihr iptables auf dem Server nutzt, muss für das Routing noch eine Regel erstellt werden:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Jetzt sollte die Verbindung auf jeden Fall funktionieren. Testen könnt ihr dies, indem ihr websites wie www.cmyip.com besucht. Hier sollte jetz die IP eures Servers zu sehen sein über den ihr surft.

Probleme mit Windows

Fragt nicht, wieso aber scheinbar gibt es manchmal Probleme unter Windows mit der Verbindung zum Server bzw. dem erstellen der Routen. Zu erkennen ist dies dadrann, dass zuerst die Verbindung scheinbar normal aufgebaut wird, danach aber häufiger die Meldung „Route: Waiting for TUN/TAP interface to come up…“ im log zu sehen ist. Hier gibt es eine sehr einfache Methode, dem Abhilfe zu schaffen durch neustarten des DHCP-Dienstes:

  • klickt auf start und gebt „services.msc“ ein
  • sucht den Dienst DHCP-Client aus der Liste und doppelklickt auf ihn
  • stellt den Starttyp auf „Automatisch“
  • wenn der Dienst gestartet ist, klickt auf „Stop“ und anschließend wieder auf „Start“ ACHTUNG: hierbei werden sämtliche LAN-Verbindungen unterbrochen
  • klickt auf OK und schließt das Fenster
  • probiert die Verbindung mit openVPN erneut

Ein weiteres Problem, bei dem zwar die Verbindung erfolgreich hergestellt wird, aber Windows kein neues default-gateway bekommt ist das Rechtesystem unter Windows. Startet openVPN explizit mit Administratorrechten (rechtsklick auf das Programm -> Als Administrator ausführen), damit es die Rechte hat, die Routen anzulegen.

Das wars fürs erste. Mit openVPN kann man noch andere tolle Sachen machen wie LANs miteinander verbinden, aber dazu an anderer Stelle mehr.

Stay Tuned – Støertebeker

Veröffentlicht unter Allgemein, Linux, Tutorials, Windows

Schreibe einen Kommentar