= 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: * [[https://packages.debian.org/simpleproxy|simpleproxy]] * [[https://packages.debian.org/socat|socat]] * [[https://packages.debian.org/stone|stone]] * [[https://packages.debian.org/rinetd|rinetd]] = Links = * http://linux-vserver.org/Frequently_Asked_Questions#Can_I_run_an_OpenVPN_Server_in_a_guest.3F * http://debianforum.de/forum/viewtopic.php?f=30&t=127504 * 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://wiki.cacert.org/openVPN * http://robert.penz.name/21/ovpncncheck-an-openvpn-tls-verify-script/ * http://wiki.yobi.be/wiki/Virtual_Private_Networks * http://openvpn.net/index.php/open-source/documentation/manuals/65-openvpn-20x-manpage.html