OpenVPN: Netzwerkleitungen durch das Internet tunneln |
OpenVPN findet sich im Paket openvpn, das bei Debian und Ubuntu mit dem Befehl apt-get installiert werden kann.
apt-get install openvpn
Im folgenden sind hier kurz die Schritte zusammengefasst, die im Buch Linux-Server für Einsteiger ein wenig breiter dargestellt sind.
Die passenden OpenVPN-Clients können Rechner von Mitarbeitern sein, die einen Heimarbeitsplatz nutzen wollen oder auch Filialen, die über das Internet an den Server der Zentrale angebunden werden sollen.
Es wird ein Verzeichnis /etc/openvpn/easyrsa2 angelegt und dort werden die Zertifate erstellt. Zunächst wird das Beispielverzeichnis von Easy-RSA-Paket dorthin kopiert. Es wurde bei der Installation unter /usr/share/doc abgelegt.
cp -rp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easyrsa2 cd /etc/openvpn/easyrsa2Zum Bau des Zertifikats wird eine Datei openssl.cnf benötigt. Die ist auch vorhanden, enthält aber eine Versionsnummer. Davon wird ein symbolischer Link gebildet.
ln -s openssl-1.0.0.cnf openssl.cnfZuerst wird die Umgebung initialisiert, dann eventuelle fehlgeschlagene Vorversuche entsorgt. Dann wird zunächst ein Basiszertifikat (ca.crt) für die gesamte OpenVPN-Umgebung generiert. Dies kann entfallen, wenn Sie ein Original-Zertifikat einer Certificate Authority besitzen.
. ./vars ./clean-all ./build-ca ./build-dhNun wird zunächst für den Server mit dem Skript build-key-server ein Schlüsselpaar für den OpenVPN-Server erstellt, das hier phantasieloserweise server genannt wird.
Für jeden zugriffsberechtigten Client wird ebenfalls ein Schlüsselpaar gebildet, hier durch den Namen client1 angedeutet.
./build-key-server server ./build-key client1Der Client-Key wird für jeden benötigten Client mit einem eigenen Namen erneut erzeugt. Mit diesen Zertifikaten an der Hand kann nun die Konfiguration gebaut werden.
Nun zu dem Teil, der im Buch Linux-Server für Einsteiger ein wenig kurz geraten ist.
Die Beispielkonfiguration geht davon aus, dass der OpenVPN-Server in einem lokalen Netzwerk mit der Nummer 192.168.109.0/24 steht, da er das Routing für dieses Netzwerk an die Clients weiterpusht.
Ansonsten sieht man die Pfade auf die Zertifikate des Servers.
# /etc/openvpn/server.conf dev tun0 proto udp # nicht noetig, da default port 1194 # nicht noetig, da default server 10.0.0.0 255.255.255.0 push "route 192.168.109.0 255.255.255.0" dh /etc/openvpn/easyrsa2/keys/dh1024.pem ca /etc/openvpn/easyrsa2/keys/ca.crt cert /etc/openvpn/easyrsa2/keys/server.crt key /etc/openvpn/easyrsa2/keys/server.keyDie Verbindung wird wie üblich, per UDP über Port 1194 eingerichtet. Falls es erforderlich ist, durch eine Firewall zu gehen, die eine Kommunikation auf diesem Weg ausschließt, würde die folgende Einstellung dazu führen, dass der OpenVPN-Server wie ein gewöhnlicher Web-Server aussieht.
proto tcp-server port 80Das funktioniert natürlich nur, wenn auf dem Rechner nicht ein anderer Server wie etwa der Apache bereits den Port 80 bedient.
Der Server erzeugt das virtuelle Interface tun0 und verwendet für dieses den freien IP-Nummernkreis 10.0.0.0/24. Es kann eine beliebige Netzwerkadresse verwendet werden. Wichtig ist nur, dass es keine Konflikte mit den Netzwerkadressen der beteiligten Partnern gibt.
Mit dem push wird dem Client eine Route auf das serverseitige Netzwerk 192.168.109.0 zugeschoben. Nur so kann der Client mit den Netzwerkadressen im Zielnetz umgehen.
Damit der Client auch die anderen Rechner im Netzwerk erreichen kann, sind noch ein paar Schritte erforderlich:
cat /proc/sys/net/ipv4/ip_forward
sudo openvpn --config /etc/openvpn/client.confDazu wird der Client eine Konfigurationsdatei wie die folgende verwenden:
dev tun0 client proto udp # nicht noetig, da default port 1194 # nicht noetig, da default remote meinedyndns.adresseim.net ca ca.crt key client1.key cert client1.crtHier wird ebenfalls eine virtuelle Netzwerkschnittstelle tun0 erstellt. Eine Netzwerkadresse des internen Netzwerks gibt der Client nicht an, weil er diese vom Server erfährt. Dafür muss er mit remote die öffentliche Adresse des Servers angeben. Hier wäre es beispielsweise eine dynamische DNS-Adresse. Zuletzt werden über ca, key und cert die Zertifikat-Dateien angegeben. In dieser Konfiguration liegen sie im Aufrufverzeichnis. Normalerweise sollte man den ganzen Pfad angeben.
Soll der Client auf einen OpenVPN-Server zugreifen, der Port 80 unter dem TCP-Protokoll bedient, müsste port und proto entsprechend geändert werden.
port 80 proto tcp-clientMit den Befehlen netstat -i oder ifconfig tun0 kann man nun das Interface tun0 sehen. Mit netstat -r müsste eine Route im Netzwerk 10.0.0.0/24 auf den OpenVPN-Server zu sehen sein und ein Eintrag in das lokale Netzwerk des Zielrechners, der durch den Push-Befeh eingerichtet wurde.
netstat -r Kernel-IP-Routentabelle Ziel Router Genmask Flags MSS Fenster irtt Iface default 192.168.99.1 0.0.0.0 UG 0 0 0 eth0 10.0.0.1 10.0.0.5 255.255.255.255 UGH 0 0 0 tun0 10.0.0.5 * 255.255.255.255 UH 0 0 0 tun0 192.168.99.0 * 255.255.255.0 U 0 0 0 eth0 192.168.109.0 10.0.0.5 255.255.255.0 UG 0 0 0 tun0192.168.99.0/24 ist in diesem Fall das lokale Netzwerk auf der Client-Seite. Nur die Pakete für 10.0.0.0/24 und 192.168.109.0/24 gehen also über das VPN. Alle anderen Routen sind nicht betroffen.
Homepage | (C) Copyright 2014 Arnold Willemer |