DEBIAN OPENVPN FAQ

Aus OPPServer.net Wiki | OPPs Wiki
Zur Navigation springen Zur Suche springen

DEBIAN OPENVPN FAQ (Stand 26.05.2013) [ © Oliver Schuetz aka OppTupacShakur | http://OPPServer.net | http://unix.oppserver.net ]


Als root einloggen!!! Die IP Range 10.11.12.x kann natuerlich gegen jede andere Private IP Range gewechselt werden, z.B. 192.168.100.x.


Bevor wir OpenVPN installieren, pruefen wir ob es das tun device gibt:

cat /dev/net/tun 

Falls man die Meldung "File descriptor in bad state" bekommt, ist alles in Ordnung. Falls nicht, kann man versuchen das Device anzulegen:

mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun 

Falls dies auch nicht hilft, muss man seinen Server/VPS/VServer Provider bitten tun/tap zu aktivieren.


Zunaechst installieren wir openVPN auf dem Server und auf dem Client:

aptitude install openvpn


Dann stellen wir sicher, dass keine ungewollten Configs herumschwirren (openVPN erstellt gerne Samples) und loeschen die Dateien (nicht die Ordner) innerhalb von /etc/openvpn:

rm -rf /etc/openvpn/examples


Auf dem Server erstellen wir unsere Schluessel und Zertifikate. Daher kopieren wir die easy-rsa-Tools von openVPN ins Config-Verzeichnis:

cp -rf /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa


Nun bereiten wir das easy-rsa-Tool auf das Erstellen der Zertifikate und Schluessel vor: Dazu editieren wir zunaechst die vars mit userem Lieblingseditor (z.B. nano /etc/openvpn/easy-rsa/vars). Dabei interessieren eigentlich nur die Werte fuer "KEY_SIZE", wo wir 2048 nehmen, "CA_EXPIRE", wo wir fuer die Ewigkeit 7300 (20 Jahre) nehmen, "KEY_EXPIRE", wo wir 7300 (20 Jahre) nehmen, und "KEY_COUNTRY", "KEY_PROVINCE", "KEY_CITY", "KEY_ORG" und "KEY_EMAIL", was wohl selbsterklaerend ist. Damit diese Werte verwendet werden, lesen wir sie in unsere Shell-Sitzung ein:

. ./vars


Um zunaechst reinen Tisch zu machen, fuehren wir das Clean-Tool aus, erstellen eine neue CA und erzeugen einen Diffie-Hellman-Parameter mit 2048 Bit:

./clean-all
./build-ca
./build-dh


Wenn die Erzeugung des Diffie-Hellman-Paramters abgeschlossen ist, erzeugen wir nun noch ein Server-Zertifikat:

./build-key-server [Server-Name]

Bei [Server-Name] koennen wir dabei einsetzen, was wir wollen. Wichtig ist dabei, dass der Name (CN) absolut eindeutig bleibt. Auch sollte bedacht werden, dass wir fuer verschiedene Configs nicht mehrere Zertifikat-Key-Paare benoetigen. Wir muessen also keine komplizierten Namen bestehend aus Verwendungszweck und Hostnamen verwenden. Ich empfehle ein simples "openVPN-Server". Was genau da nun drinsteht, interessiert letztendlich niemanden mehr.


Um nun Client-Zertifikate zu erstellen, ist ab sofort nur noch folgendes Procedere noetig, uebrigens wann immer man moechte:

. ./vars
./build-key [Client-Name]

Am Ende mit 2x y bestaetigen.

Bitte auch hier auf die Eindeutigkeit des Client-Namens achten.


Nun legen wir noch einen Link fuer die Keys an und erstellen das client dir:

ln -s /etc/openvpn/easy-rsa/keys /etc/openvpn/keys
mkdir /etc/openvpn/clients


Jetzt legen wir auf dem Server eine Config unter /etc/openvpn/ an, z.B. "server.conf". Die endung ".conf" ist dabei fuer den Daemon wichtig, denn alle .conf-Dateien in diesem Verzeichnis werden vom Init-Script automatisch bei Systemstart gestartet und beim Shutdown gestoppt:


# Diese Config initiiert einen Server mit mehreren Clients
mode server

# zusaetzlich TLS-Authentication-Server
tls-server

# lokale IP
local [IP des Servers]

# Um die Rechte einzuschraenken
user nobody
group nogroup

# Port (beliebig, nur mind. 4-stellig)
port 5000

# UDP ist Pflicht fuer TAP, wir nutzen aber TUN
;proto udp
proto tcp

# Das Device muss fuer bridging TAP sein, wir nutzen aber TUN
;dev tap
dev tun

# Hiermit vergeben wir dem Server und den Clients IPs
server 10.11.12.0 255.255.255.0

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/[Server-Name].crt
key /etc/openvpn/keys/[Server-Name].key
dh /etc/openvpn/keys/dh2048.pem

# Wir komprimieren, um die Bandbreite zu verbessern
comp-lzo

# Welcher Verschluesselungs-Algorithmus?
cipher AES-256-CBC

# Aufrechterhaltung der Verbindung
keepalive 10 120

# Client-to-Client-Traffic erlauben
client-to-client

# Clients mit selben Key erlauben zu verbinden
duplicate-cn

# Max. Anzahl an Clients erlauben
max-clients 100

# einige log Configs
persist-key
persist-tun
status openvpn-status.log
verb 3
nice -10

# Clients eigene Configs zuteilen (siehe unten)
client-config-dir clients


Jetzt bekommt jeder normale Benutzer eine IP-Adresse von 10.11.12.0/24. Unsere "speziellen" Benutzer muessen noch mithilfe des common names vom Zertifikat spezielle Regeln bekommen, dazu gibt es den Befehl client-config-dir <Verzeichnis>.

client-config-dir clients

Je nach common name vom Zertifikat wird jetzt die Konfiguration clients/[Client-Name] aufgerufen. Jetzt brauchen wir nur noch Dateien fuer die entsprechenden Benutzer erstellen:

clients/client1:
   ifconfig-push 10.11.12.6 10.11.12.5
clients/client2:
   ifconfig-push 10.11.12.10 10.11.12.9

ifconfig-push weisst den Clients eine virtuelle IP zu, die kann dann per routing auf die entsprechenden Server gerouted werden. Die erste IP-Adresse gibt die Adresse des virtuellen Clients an, die 2. des virtuellen Server endpoints. Laut openvpn.org-HOWTO muessen Sie aus /30 Subnets geholt werden, damit die Windows Clients/TAP-Win32 Treiber mitspielen.

Quote von http://openvpn.net/howto.html:

Specifically, the last octet in the IP address of each endpoint pair must be taken from this set:

[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254] 


Jetzt legen wir auf dem Client eine Config unter /etc/openvpn/ an, z.B. "client.conf". Die endung ".conf" ist dabei fuer den Daemon wichtig, denn alle .conf-Dateien in diesem Verzeichnis werden vom Init-Script automatisch bei Systemstart gestartet und beim Shutdown gestoppt. Falls der Autostart nicht erwuenscht ist muss man openvpn aus den runleveln mit "update-rc.d -f openvpn remove"(Debian Lenny 5.0) oder "update-rc.d-insserv -f openvpn remove"(Debian Squeeze 6.0) und dann manuell mit "openvpn --config /etc/openvpn/client.conf" gestartet werden. Bei einem Windows Client muss die Endung ".ovpn" lauten:


# Diese Config initiiert einen Client
client

# zusaetzlich TLS-Authentication-Client
tls-client

# UDP ist Pflicht fuer TAP, wir nutzen aber TUN
;proto udp
proto tcp

# Das Device muss fuer bridging TAP sein, wir nutzen aber TUN
;dev tap
dev tun

# Remote-Server
remote [IP des Servers] [Port des Servers]

# Keinen lokalen Port festlegen
nobind

# Kompression
comp-lzo

#Verschluesselungs-Algorithmus
cipher AES-256-CBC

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/[Client-Name].crt
key /etc/openvpn/keys/[Client-Name].key

# Folgendes auskommentieren wenn man nicht mit dem DNS des Server surfen moechte
redirect-gateway

# Weitere Configs
resolv-retry infinite
ns-cert-type server
persist-key
persist-tun
verb 3
float
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
script-security 2


Nun nur noch vom Server die Dateien /etc/openvpn/keys/ca.crt /etc/openvpn/keys/[Client-Name].crt und /etc/openvpn/keys/[Client-Name].key auf den jeweiligen Client nach /etc/openvpn/keys kopieren.


FORWARD TRAFFIC VIA VPN Falls man redirect-gateway am Client nutzen will, also ueber die Ip des Servers surfen moechte, ist noch folgendes notwendig: (Im Kernel werden dafuer folgende Module benoetigt: ip_tables ip_conntrack ip_conntrack_ftp ip_conntrack_irc iptable_nat ip_nat_ftp und evtl ip_nat_irc)

Im Server IP-Forwarding aktivieren waehrend der aktiven Laufzeit

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

Um dies bei jedem Bootvorgang permanent zu machen, muss in /etc/sysctl.conf

#net.ipv4.ip_forward=1

nach

net.ipv4.ip_forward=1

geaendert werden.

Dann muessen einige Iptables Regeln gesetzt werden (Interface eth0 muss evtl angepasst werden, zb bei einem openvz VPS kann es venet0 sein, immer das Interface was die verbindung ins Internet hat):

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.11.12.0/24 -o eth0 -j ACCEPT

Entweder wenn MASQUERADE auf dem Server aktiviert ist reicht folgendes:

iptables -t nat -A POSTROUTING -s 10.11.12.0/24 -o eth0 -j MASQUERADE

Wenn nicht und man die Fehlermeldung "iptables: No chain/target/match by that name" bekommt, kann man noch diese Moeglichkeit probieren:

iptables -t nat -A POSTROUTING -s 10.11.12.0/24 -j SNAT --to-source 1.1.1.1

(Die IP 1.1.1.1 MUSS gegen die oeffentliche IP des Servers gewechselt werden.)


Sobald alles wie gewollt laeuft, kann man die Regeln wie folgt speichern und beim Bootvorgang automatisch laden lassen:

iptables-save > /etc/iptables.up.rules
nano /etc/network/if-pre-up.d/iptables

Hier fuegen wir folgende Zeilen ein:

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

Dann setzen wir noch folgende Rechte:

chmod +x /etc/network/if-pre-up.d/iptables


Basierend auf folgenden Anleitungen:

http://blog.kleen.ch/2010/06/01/von-uberall-ins-lan-mittels-openvpn/
http://sohonetwork.blogspot.de/2012/05/install-openvpn-ubuntu-vps-10-minutes.html