Konfiguration eines Internetgateways

Aus OpenVPN Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Einleitung

Diese Konfiguration richtet sich an Leute, die über einen entfernten Server surfen möchten. Dabei kann sich ein OpenVPN Client zum Server verbinden und dessen Internetanbindung nutzen.

Warnung: Es hat sich bereits rumgesprochen, dass man durch eine ähnliche Konfiguration eine Firmenfirewall umgehen kann. Wir distanzieren uns davon, für eine solche Vorgehensweise Tipps zu geben. Eine Firewall erfüllt eine gewisse Aufgabe und das ist auch sinnvoll. Wenn ihr sie umgeht ohne dem Administrator Bescheid zu geben, riskiert ihr euren Job. (Das ist ein Kündigungsgrund)


Was man dazu braucht

  • Einen Server der über die entsprechende Internetverbindung verfügt
  • Ein UDP oder TCP Port muss erreichbar sein vom Internet aus
  • Ein lauffähiges Linux auf dem Server mit iptables und NAT-Modul (meistens Standard)
  • tun.ko bzw tun.o Modul oder TUN-Support im Kernel (meistens Standard)
  • Informationen über die DNS Server die vom Server verwendet werden. (/etc/resolv.conf)


OpenVPN Installation

Bei vielen Distributionen ist OpenVPN als fertiges Package verfügbar. Ansonsten müsst ihr OpenVPN aus dem Source-Tarball kompilieren und installieren. OpenVPN hat OpenSSL und LZO (optional) als Abhängigkeiten, diese müssen also vorher installiert werden.

Bevor wir mit der Konfiguration beginnen können, müsst ihr herausfinden wo OpenVPN seine Konfigurationsdateien speichert. Im Normalfall ist dies /etc/openvpn oder /usr/local/etc/openvpn.

Kernelmodul tun laden

Als root folgendes ausführen:

modprobe tun
(liefert im positiven Fall keine Rückmeldung)


Zertifikate erstellen

Informationen dazu findet ihr in dieser Wiki reichlich. Nach dieser Prozedur müsst ihr am Server die folgenden Dateien haben:

  • dh1024.pem
  • server.key/.crt (oder ähnlich)
  • ca.crt

Für jeden Client der später connecten soll braucht ihr ein eigenes Set von Client.crt/.key Dateien und zusätzlich die ca.crt. Nennt alle Clients unterschiedlich mit möglichst einfachen Common Names.


OpenVPN Server konfigurieren

Wechselt in das Konfigurationsverzeichnis von OpenVPN. Dort könnt ihr ein Unterverzeichnis anlegen für die Schlüssel (z.B. keys/) und sie dorthin kopieren. Die Dateien sollten im Besitz von root sein und die server.key sollte 600 als Zugriffsmodus haben.

Erstellt nun im Konfigurationsverzeichnis eine leere Datei namens server.conf und fügt folgende Zeilen ein:

server 10.8.0.0 255.255.255.0

dev tun
port 1194
proto udp

ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem

# Nächste 3 Zeilen erst aktivieren wenn die VPN Verbindung klappt
# push "redirect-gateway def1" # leitet den Internettraffic am Client zum Server um
# push "dhcp-option DNS 123.123.123.123" # DNS-Server 1
# push "dhcp-option DNS 213.213.213.213" # DNS-Server 2 (falls vorhanden)

ping-timer-rem
keepalive 20 180

persist-key
persist-tun

# user nobody # hier könnt ihr einen unprivilegierten User einstellen unter dem OpenVPN nach dem Start läuft
# group nogroup # und eine Gruppe

verb 3
mute 50
(Alles was mit # beginnt bis zum Zeilenende sind Kommentare und werden von OpenVPN ignoriert)


OpenVPN könnt ihr nun testweise mit

openvpn --config server.conf
aus dem Konfigurationsverzeichnis starten. (Beenden mit Strg+C)

Oder als Hintergrundprozess mit

openvpn --daemon --config server.conf
starten. (Beenden mit killall openvpn)

OpenVPN Client konfigurieren

Folgende Konfigurationsdatei sollte am Client funktionsfähig sein:

client

remote my-openvpn-server.dyndns.com 1194 # Hostname/externe IP und Port des Servers
proto udp
dev tun

# Hier die Pfade anpassen um auf die erstellten Keys zu verweisen
ca ca.crt
cert client.crt
key client.key
ns-cert-type server

verb 3
mute 50

Verbindung testen

Nun könnt ihr mit eurem OpenVPN Client eine Verbindung mit dem Server aufbauen. Wenn es klappt, solltet ihr den Server auf 10.8.0.1 pingen können. Falls dies klappt, könnt ihr die Verbindung wieder abbauen. Am Server müssen nun noch die gekennzeichneten Zeilen einkommentiert werden. (# am Anfang entfernen) Danach den Serverprozess neustarten.


Forwarding und NAT

Am Server muss ip_forward aktiviert werden. Dies funktioniert meistens mit folgendem Kommando:

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

Der zweite wichtige Schritt ist das Hinzufügen einer SNAT-Rule. Wenn euer Server eine statische IP-Adresse besitzt, verwendet folgendes Kommando:

iptables -t nat -A POSTROUTING -o ethX -s 10.8.0.0/24 -j SNAT --to 1.1.1.1

Ersetzt dabei ethX durch eurer Netzwerkinterface und 1.1.1.1 mit eurer statischen öffentlichen IP-Adresse.

Wenn euer Server eine dynamische IP-Adresse zugewiesen bekommt:

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

Hinweis: Nach einem Neustart sind die Einstellungen wieder weg.

Verbindung erneut testen

Ein Windows Client sollte nun die DNS Server des VPN Servers ohne Probleme übernehmen. (ipconfig /all) Ihr solltet auch weiterhin 10.8.0.1 pingen können und zusätzlich jeden anderen Host im Internet. Die Konfiguration ist damit beendet und ihr solltet alle ausgehenden Dienste von eurem Client aus verwenden können.


Bekannte Probleme

  • Bei Linux-Clients werden die DNS Server des VPN Servers nicht übernommen. Ihr müsst sie selbst in die /etc/resolv.conf hineinschreiben.
  • Für eingehende Dienste (P2P, Webserver am VPN-Client, ...) müssen entsprechende DNAT Rules beim VPN-Server erstellt werden. Es empfielt sich auch, dem VPN-Client eine statische IP zu geben. (Stichworte "client-config-dir" und "ifconfig-push")
Persönliche Werkzeuge