VPN – Virtuelles Privates Netzwerk

openvpn_logoWozu? Verschlüsselte Verbindung zu deinem Server. Brauchbar z.B in einem offenem WLAN. Durch VPN Können aber auch ganze Netzwerke miteinander verbunden werden.
Wie? Gibt einige Möglichkeiten z.B. direkt auf dem Router oder halt auch einfach auf einem Server. Heute mit: OpenVPN 😉
Warum? Frei, offen, funktioniert.

Download hier: https://openvpn.net/


Oder unter Debian etc. einfach apt-get install openvpn
Abhängigkeiten wie easyrsa, openssl, opensc (für smartcards) usw. sollten dabei automatisch installiert werden wenn sie nicht schon vorhanden sind.
Infos zu Abhängigkeiten können mit apt-cache show openvpn angezeigt werden.
Eine gute Anleitung findet sich auch auf der openVPN Website: https://openvpn.net/index.php/open-source/documentation/howto.html

Hier ist kurz nur ein Beispiel erklärt, wie man einen Server für den Zugriff mehrerer Clients einrichtet.
Wenn man sich z.B von Seinem Desktop und Laptop zum Server verbinden möchte und diese sich auch untereinander erreichen sollen.

Als Beispielaufbau haben wir hier den Server ‚debain-server‘ mit der IP 192.168.0.101
und den Client ‚debian-client‘

Zertifikate

Zertifikate hatten wir ja schon.

Wir brauchen für unseren Server diese vier Dateien

ca.crt
debian-server.crt
debian-server.key
dh2048.pem

Diese Dateien können jetzt in das Verzeichnis /etc/openvpn/ kopiert werden.

VPN – Konfiguration

Soweit ist alles vorbereitet. Jetzt brauchen wir noch Konfigurationsdateien für Server und Client.

Server

Die Hauptkonfiguration des Servers:
Diese liegt im Verzeichnis /etc/openvpn/.
Die Zertifikatsdateien und die dh haben wir ja schon hier hinterlegt. Dann kann auch direkt die Serverkonfiguration erstellt werden.

Diese gibt es als gut kommentierte Beispieldateien unter: /usr/share/doc/openvpn/examples/sample-config-files/
Die sehen dann so aus. Einzelne Einträge sind hier auch noch einmal kurz erklärt.

server.conf

Ich erspar mir die Kommentare aber erkläre einfach einmal was hier passieren soll:
Der Server soll auf udp Port 1194 VPN Verbindugen entgegennehmen.
Debian erstellt dafür ein Netzwerkinterface. Möglich sind ‚tun‘ und ‚tap‘ Ich möchte einen gerouteten IPv4 Tunnel also ‚tun‘. ‚tap‘ erstellt eine Ethernet Verbindung.
Für die Verschlüsselungen nutzen wir die gerade erzeugten Zertifikate und für einen Sicheren Verbindungsaufbau die Diffie-Hellman Datei.
Als VPN Netz 10.0.0.0 mit entsprechender Netzmaske.
Den Clients wird eine Feste IP vergeben. Die entsprechenden Dateien liegen Verzeichnis ‚clients‘. (Dazu Später mehr…)
Ausserdem sollen sich die Clients gegenseitig finden können. Wenn ich mich also mit dem Laptop zum Server verbinde möchte ich auch auf den verbundenen Desktop Rechner zugreifen können.
Datenverkehr niedrig halten mit Kompression. Und natürlich soll der VPN Server nicht als root ausgeführt werden.
Dazu müssen aber das tun Interface und der key bei restart des Servers geöffnet bleiben, weil unser User nicht genügend Rechte hat diese neu zu starten bzw. einzulesen.
Dann hätte ich noch gerne eine kleine Statusmeldung in der Datei openvpn-status.log
Apropos Logs… Damit die VPN Logs nicht einfach in die Syslog geschrieben werden, legen wir noch eine separate Logdatei und entsprechend das Loglevel fest.
Zwischendurch soll der Server immer mal die Clients anstupsen. Sagen wir alle 20sek. Und wenn der Client 6x nicht antwortet also für 120sek gehen wir davon aus, dass er nicht mehr da ist.
Jetzt müssen wir genau das nur noch dem Server mitteilen.
Dies passiert in der

/etc/openvpn/server.conf

Hier die gekürzte Version die genau das oben beschriebene umsetzt:

port 1194
proto udp
dev tun
ca ca.crt
cert debian-server.crt
key debian-server.key  
dh dh2048.pem 
server 10.0.0.0 255.255.255.0 
client-config-dir clients
client-to-client
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 4
keepalive 20 120

Statische IPs

Für die statischen IPs müssen noch die ClientKonfigurationen angelegt werden:
Dazu erst einmal das angegebene Verzeichnis ‚clients‘ erstellen.
In diesem Verzeichnis wird dann für jeden Client eine Konfigurationsdatei mit dem für den Client erstellen ‚Common Name‘ abgelegt.
Beim hier erstellten Clientzertifikat heißt die Datei dann also ‚debian-client‘.
Darin wird Dann die IP und Netzmaske für den Client festgelegt.

ifconfig-push 10.0.0.11 255.255.255.0

Serverstart

So Der Server steht. War doch garnicht so schwer.
Dann starten wir den doch schonmal /etc/init.d/openvpn start ( service openvpn start geht auch gibt aber keine Rückmeldung.)
Mit /etc/init.d/openvpn status kann eine Statusmeldung ausgegeben werden.
Evtl muss das Netzwerk einmal neu gestartet werden.
Durch ifconfig tun kann jetzt das VPN Device mit der IP 10.0.0.1 angezeigt werden.

Clients

Natürlich muss auch auf dem Client openvpn installiert sein.
apt-get install openvpn

Zertifikate ablegen

Dann ins Konfigurationsverzeichnis /etc/openvpn/ wechseln.
Die Dateien debian-client.crt, debian-client.key und ca.crt sollten mittlerweile angekommen sein und können auch in dieses Verzeichnis kopiert werden.

client.conf

Für die Konfiguration muss man noch ein paar Infos über den Server haben:
Tunnelart, Server IP (oder wenn auflösbar der Hostname), VPN Port, Protokoll, Kompression?

Es gibt auch wieder eine schön kommentierte client.conf in /usr/share/doc/openvpn/examples/sample-config-files/

Client Wunschliste:
Es wird ein Client. Device und Protokoll wie beim Server. Der Server ist in diesem Fall debian-server.lan und der wartet auf Port 1194. Lässt sich der Host nicht auflösen, probiers halt weiter.
Der Ausgangsport ist mir erstmal egal aber auch der Client soll den VPN Dienst nicht als root ausführen. (Dazu müssen dann auch wieder das Interface und die Key Datei bei Restarts im Speicher bleiben.)
Bei Notebooks kann es auch passieren, dass mal ein Proxy dazwischen funkt. Sollte im Hinterkopf sein. Und in Wlans gibt es oft Paketprobleme. Die Sollen nicht alle einzeln aufgelistet werden.
Es müssen Natürlich die erhaltenen Zertifikatsdateien benutzt werden.
Da wir die Zertifikate mit dem build Script erstellt haben können wir dabei durch den Eintrag ’ns-cert-type server‘ sogar sicherstellen, dass Das Zertifikat vom Server erstellt wurde.
Logdatei bitte wieder nicht ins Syslog – und auch nicht immer das gleiche rein schreiben.

Unsere Infos und Anforderungen listen wir dann einfach mal in der client.conf auf:

client
dev tun
proto udp
remote debian-server.lan 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
;http-proxy-retry
;http-proxy [proxy server] [proxy port #]
mute-replay-warnings
ca ca.crt
cert debian-client.crt
key debian-client.key
ns-cert-type server
comp-lzo
log-append /var/log/openvpn.log
verb 4
mute 20

Das wärs auch schon.

Verbindungsaufbau

/etc/init.d/openvpn start

Auch auf dem Client kann jetzt mit ifconfig das tun Interface und die vom Server vergebene IP angezeigt werden.

root@debian-client$ ifconfig tun
tun0      Link encap:UNSPEC  Hardware Adresse 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet Adresse:10.0.0.11  P-z-P:255.255.255.0  Maske:255.255.255.255
          UP PUNKTZUPUNKT RUNNING NOARP MULTICAST  MTU:1500  Metrik:1
          RX-Pakete:0 Fehler:0 Verloren:0 Überläufe:0 Fenster:0
          TX-Pakete:0 Fehler:0 Verloren:0 Überläufe:0 Träger:0
          Kollisionen:0 Sendewarteschlangenlänge:100 
          RX-Bytes:0 (0.0 B)  TX-Bytes:0 (0.0 B)

Wer es nicht glaubt, kann ja einmal den Server anstubsen und schauen ob er reagiert:

root@debian-client$ ping 10.0.0.1 -c 2
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=27.4 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=26.8 ms

--- 10.0.0.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 26.818/27.153/27.489/0.373 ms

Die Pakete sieht man dann auch auf dem Server tun Interface:

root@debian-server$ ifconfig tun
tun0      Link encap:UNSPEC  Hardware Adresse 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet Adresse:10.0.0.1  P-z-P:10.0.0.2  Maske:255.255.255.255
          UP PUNKTZUPUNKT RUNNING NOARP MULTICAST  MTU:1500  Metrik:1
          RX-Pakete:2 Fehler:0 Verloren:0 Überläufe:0 Fenster:0
          TX-Pakete:2 Fehler:0 Verloren:0 Überläufe:0 Träger:0
          Kollisionen:0 Sendewarteschlangenlänge:100 
          RX-Bytes:168 (168.0 B)  TX-Bytes:168 (168.0 B)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

fiveundtwenty − = threeundtwenty