Konfiguration eines OpenVPN-Servers innerhalb eines VServer-Gastes
Inhaltsverzeichnis
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
http://linux-vserver.org/Frequently_Asked_Questions#Can_I_run_an_OpenVPN_Server_in_a_guest.3F
http://www.techrepublic.com/blog/opensource/how-to-set-up-an-openvpn-server/1873
http://openvpn.net/index.php/open-source/documentation/howto.html#install
http://robert.penz.name/21/ovpncncheck-an-openvpn-tls-verify-script/
http://openvpn.net/index.php/open-source/documentation/manuals/65-openvpn-20x-manpage.html