|
Vorweg, da hier bisweilen Diskussionen über proprietäre Frickelnvpn Lösungen gefahren wurden, zb hamachi, hier _der_ Plan B.
OpenVPN selbst verwaltet keine Nutzer Datenbank um die Authentifizierung zu managen, man kann pro Client ein Zertifikat erstellen, und der Client wird über die das gültig signierte Zertifikat authentifiziert, ist aber für 98% aller Fälle nicht praktikabel, da man für jeden Client ein eigenes Zertifikat und einen Schlüssel erstellen muss. Man möchte Clients eigentlich lieber mit username:password authentifizieren, da OpenVPN selbst keine Nutzerdatenbank verwaltet, muss man in dem Fall dann auf die Möglichkeit von Plugins ( oder Scripts) zur Authentifizierung zurückgreifen. OpenVPN verschifft ein PAM Plugin zur Authentifizierung von Nutzern gegen die lokalen Systembenutzer mit, das ist zwar nicht ideal, weil jeder OpenVPN Nutzer damit gleichzeitig auch ein Systembenutzer ist, hat aber den Vorteil schnell machbar zu sein, und kann auch sehr einfach gegen andere Authentifizierungschema ausgetauscht werden. AuthSqlite zb. ein Authentifizierungsplugin dass SQLite als Datenbank für das Usermanegement verwendet, schlank aber völlig ausreichend.
Desweiteren kann man OpenVPN Tunnel auf IP oder Ethernet Layer aufbauen, Ethernet Layer hat bei manchen LAN Spielen den Vorteil dass Broadcast supported wird, ccg ist soweit ich mich erinner so ein Kandiat. Ums einfach zu halten, stell ich das hier aber erstmal auf IP Layer vor, die ethernet bridge Änderungen sind wenn man es einmal auf IP am laufen hat einfach(er) nachzuvollziehen.
OpenVPN unterstützt auch verschiedene Architekturen, Client/Server sowie 'p2p' zwischen 2 Peers, in einem Client/Server Model geht der gesamte VPN Traffic über den VPN Server, allerdings mit dem Vorteil dass einem der VPN Server im Idealfall selbst gehört, und keiner Firma dessen Namen man nur aus dem "Info" Feld von Hamachi oä. kennt.
In einer Client/Server Architektur kann man zudem auswählen ob sich Clients gegenseitig "sehen" können sollen, für LAN Spiele sicherlich sinnvoll, wir werden das deshalb so machen.
Zusätzlich kann man Serverseitig Client-Einstellungen "forcieren", zum Beispiel dem Client eine neue defaultroute setzen, um den gesamten Traffic eines Clients über den VPN Server zu tunneln, eine nette Sache wenn man in einem öffentlichen WLAN ist, und Mails abholen möchte ohne alle anderen Nutzer dran teilhaben zu lassen. Daher werden wir die notwendigen Einstellungen für dieses Feature in die Server Konfiguration schreiben, aber vorerst auskommentieren.
Auf dem Server: apt-get install openvpn
in /etc/openvpn dann eine Datei "server.conf" mit folgendem Inhalt erstellen. (siehe unten)
Jetzt müssen die notwendigen Zertifikate erstellt werden, um den Abturn in Grenzen zu halten liefert OpenVPN eine Handvoll Scripte "easy-rsa" mit, die eigentlich alles grobe übernehmen.
cd /usr/share/doc/openvpn/examples/easy-rsa/
Den unteren Teil von vars kurz anpassen erspart im weiteren etwas Arbeit:
# These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY=DE export KEY_PROVINCE=NS export KEY_CITY=MeineStadt export KEY_ORG="TheWall.de" export KEY_EMAIL="blackberry@example.org"
Sodann weiter im Text:
. ./vars ./clean-all ./build-ca
build-ca fragt dann noch nach einem "common name", ich hab da zum zeigen mal mein handle "default" genommen. Macht Natürlich mehr Sinn wenn man die gesamten Felder mit sinnigeren Sachen ausfüllt, aber es funktioniert auch so.
Jetzt erstellen wir das Zertifikat und den private Key für den server:
./build-key-server server
wieder den "common name" eintragen, den key signieren und "committen".
Keys für die Clients müssen wir nicht erstellen, aber uns fehlt noch eine ausreichend grosse Primzahl
./build-dh
Nun haben wir den ganzen Zertifikatskram zusammen
drwx------ 2 root root 4096 2007-09-08 15:17 . drwxr-xr-x 4 root root 4096 2007-09-08 15:10 .. -rw-r--r-- 1 root root 3634 2007-09-08 15:13 01.pem -rw-r--r-- 1 root root 1224 2007-09-08 15:10 ca.crt -rw------- 1 root root 891 2007-09-08 15:10 ca.key -rw-r--r-- 1 root root 245 2007-09-08 15:17 dh1024.pem -rw-r--r-- 1 root root 100 2007-09-08 15:13 index.txt -rw-r--r-- 1 root root 21 2007-09-08 15:13 index.txt.attr -rw-r--r-- 1 root root 0 2007-09-08 15:10 index.txt.old -rw-r--r-- 1 root root 3 2007-09-08 15:13 serial -rw-r--r-- 1 root root 3 2007-09-08 15:10 serial.old -rw-r--r-- 1 root root 3634 2007-09-08 15:13 server.crt -rw-r--r-- 1 root root 680 2007-09-08 15:13 server.csr -rw------- 1 root root 887 2007-09-08 15:13 server.key
und können den Server mal weiter konfigurieren:
cp keys/ca.crt keys/ca.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/
Der server sollte im init gestartet werden
In /etc/default/openvpn tagen wir daher
AUTOSTART="server"
ein.
Und wir restarten den VPN Server erstmalig damit das alles geladen wird:
/etc/init.d/openvpn restart Stopping virtual private network daemon: server. Starting virtual private network daemon: server(OK).
Im syslog kann man dann nachlesen dass alles hervorragend gelaufen ist.
Der Server steht, aber um sicherzustellen dass er funktioniert, brauchen wir einen Client:
dazu, auf dem client OpenVPN installieren, und in /etc/openvpn die datei "client.conf" mit folgendem Inhalt erstellen. (siehe unten)
nun kopieren wir das ca.crt vom Server auf den Client
cd /etc/openvpn scp user@openvpnserver:/etc/openvpn/ca.crt ca.crt
und erstellen den Tunnel erstmalig:
openvpn client.conf Sat Sep 8 15:33:11 2007 OpenVPN 2.0.7 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Sep 13 2006 Enter Auth Username:username Enter Auth Password: Sat Sep 8 15:33:17 2007 IMPORTANT: OpenVPN's default port number is now 1194, based on an official port number assignment by IANA. OpenVPN 2.0-beta16 and earlier used 5000 as the default port. Sat Sep 8 15:33:17 2007 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info. ... Sat Sep 8 15:33:17 2007 VERIFY OK: depth=1, /C=DE/ST=NS/L=MeineStadt/O=TheWall.de/CN=default/emailAddress=blackberry@example.org Sat Sep 8 15:33:17 2007 VERIFY OK: depth=0, /C=DE/ST=NS/O=TheWall.de/CN=default/emailAddress=blackberry@example.org
Nun fügen wir den string "/C=DE/ST=NS/L=MeineStadt/O=TheWall.de/CN=default/emailAddress=blackberry@example.org" der client.conf hinzu:
tls-remote "/C=DE/ST=NS/L=MeineStadt/O=TheWall.de/CN=default/emailAddress=blackberry@example.org"
beenden die Client verbindung, und starten sie neu, die man in the middle warning ist weg, und der Tunnel steht wie eine eins.
Vom Client aus kann man den Server nun anpingen:
ping 10.8.0.1 PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=0.769 ms
Möchte man den VPN Server als default gatway für die Clients nutzen, so setzt man
push "redirect-gateway"
in der server.conf, restartet den Server, und erlaubt das forwarding mit iptables
echo 1 > /proc/sys/net/ipv4/ip_forward # Routing an iptables -A INPUT -p udp --dport 1194 -j ACCEPT # Eingehende VPN-Pakete erlauben iptables -A OUTPUT -p udp --sport 1194 -j ACCEPT # Ausgehende VPN-Pakete erlauben iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT # Pakete weiterleiten iptables -A FORWARD -o tun0 -i eth0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # Pakete ins Internet maskieren
Um nun weitere Clients auszustatten, bedarf es nur des Zertifikats (ca.crt), der client.conf und eines validen logins. Unter Windows müssen die config files .ovpn genannt werden, ich habe den graphischen OpenVPN Client für Windows ausprobiert und es ist einfach und funktioniert hervorragend.
Weiteres Features von OpenVPN sind nun iptables Regeln basierend auf Nutzernamen, shaping und viel mehr.
Auf einem (Virtual|Root) Server installiert ist das ganze eine ernsthafte alternative zu hamachi & co, zuhause auf dem Router installiert und mit dyndns versehen hat man immer eine "sichere" Verbindung wenn man mal irgendwo ist und der Leitung nicht trauen möchte.
Wer da Bock hat zu spielen kann das ja im weiteren mal mit oben genanntem SQLite Modul zur Authentifizierung umstricken oder das ganze als Ethernet Bridge umkonfigurieren.
man openvpn
ist erfreulich ergiebig.
--
Du musst Deine Bandbreite verbreitern, damit du breiter wirst von der Bandbreite her und ein breiteres Publikum ansprechen kannst.
|