Konfiguration eines OpenVPN-Servers innerhalb eines VServer-Gastes

/!\ Work in progress /!\

Server

Schritte im VServer-Wirtsystems

persistenten Tunnel beim Start des VServer-Gastes erzeugen

Skript /etc/vservers/VSERVER/scripts/initialize anlegen und ausführbar machen, mit dem Inhalt

 #!/bin/bash

/usr/sbin/openvpn --mktun --dev tun23
/sbin/ip link set dev tun23 txqueuelen 100
/sbin/ifconfig tun23 10.0.0.1 pointopoint 10.0.0.2 mtu 1500
/sbin/route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.2

Dabei müssen die IP-Adressen natürlich passend gewählt werden. Des Weiteren muss dafür gesorgt werden, daß jeder VServer-Gast sein eigenes Tunnel-Interface (hier tun23) bekommt.

Damit der Gast sauber neu gestartet werden kann muss dafür gesorgt werden, daß der Tunnel auch wieder entfernt wird, dazu wird das Skript /etc/vservers/VSERVER/scripts/postpost-stop angelegt:

 #!/bin/bash

/sbin/route del -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.2
/sbin/ifconfig tun23 down
/usr/sbin/openvpn --rmtun --dev tun23

Interfaces im VServer-Gast bekannt machen

Dateien /etc/vservers/VSERVER/interfaces/NUMMER/ip, /etc/vservers/VSERVER/interfaces/NUMMER/prefix, /etc/vservers/VSERVER/interfaces/NUMMER/nodev anlegen:

ip

10.0.0.1

prefix

24

nodev

tun23

Kontroll-Devicenode anlegen

mkdir -m 0755 /var/lib/vservers/VSERVER/dev/net
mknod -m 0660 /var/lib/vservers/VSERVER/dev/net/tun c 10 200

Schritte im VServer-Gastsystem

Zertifikate erzeugen

Es bietet sich an, eine eigene CA zu erzeugen und diese zur Ausstellung von Server- und Clientzertifikaten zu benutzen, da in der Default-Konfiguration der OpenVPN-Server alle gültigen Zertifikate akzeptiert. Wird stattdessen eine öffentliche CA wie z.B. CACert benutzt, muss der OpenVPN-Server so konfiguriert werden, daß bei jedem Verbindungsaufbau die Attribute des Zertifikats geprüft werden. Siehe dazu die Links an Ende dieses Artikels.

/!\ hier fehlt noch die Anleitung zur Erzeugung der Zertifikate /!\

OpenVPN-Server konfigurieren

/etc/server.conf

server 10.0.0.0 255.255.255.0
dev tun23
ifconfig-noexec
route-noexec
comp-lzo
client-to-client
ifconfig-pool-persist ipp.txt
dh dh1024.pem
ca ca.crt
cert server.crt
key server.key
keepalive 10 60
;user nobody
;group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 4
management localhost 7505 /etc/openvpn/mgmt-pw

/etc/openvpn/mgmt-pw

irgendein gutes passwort

Interessante Optionen (siehe auch die OpenVPN manpage):

client-to-client

sind mehrere Clients mit dem Server verbunden, so können diese auch untereinander Daten austauschen, ohne diese Option kann immer nur mit dem Server kommuniziert werden

ifconfig-pool-persist

Clients bekommen immer die selbe IP-Adresse zugewiesen

status

bei jeder Status-Änderung wird die Datei mit dem aktuellen Zustand gefüllt

management

aktiviert das Admin-Interface

Client(s)

/etc/openvpn/client.conf

client
proto udp
dev tun
remote garfield.prima.de
comp-lzo
verb 4
ca ca.crt
cert cl-sakura.crt
key cl-sakura.key

Das Zertifikat der CA (ca.crt) ist bei allen Teilnehmern (Server und Client(s)) identisch.

Internet-Verbindungen

Das beschriebene Setup erlaubt keine Verbindung zum Internet, routing/NATing sind auf dem VServer-Host nicht aktiv. Da Linux-VServer eine gemeinsame Routingtable für alle Gäste und das Wirtssystem verwendet, ist routing nicht trivial aufzusetzen. Es werden iptables-Regeln benötigt, um sicherzustellen, daß keine getrennten VPNs miteinander verbunden werden. Alternativ kann auf Policy-Routing aufgebaut werden.

Als simple Alternative bieten sich TCP-Relays an, die im Userspace laufe. Hier gibt es mehrere Optionen:

Links

Software/OpenVPN in VServer (zuletzt geändert am 2014-11-21 07:53:58 durch SvenNeuhaus)