VPN

Allgemein

Das VPN ist primär dafür gedacht, um Remote-Hands eine direkte Verbindung auf die VOC-Infrastruktur auf einem Event zu ermöglichen. Darüber hinaus kann das VPN auch dazu genutzt werden, um Live-Streams direkt von den Encoder PCs's zu ziehen. Traffic der nicht direkt aus oder in folgende Netze geht, wird nicht durch das VPN geleitet: 10.73.0.0/16 und 10.8.0.0/16.

Folgende VPN-Clients sind für spezielle Subnetze zuständig:

router.lan.c3voc.de: 10.73.0.0/24, 10.73.111.0/24

wrt1.lan.c3voc.de: 10.73.1.0/24

wrt2.lan.c3voc.de: 10.73.2.0/24

wrt3.lan.c3voc.de: 10.73.3.0/24

wrt4.lan.c3voc.de: 10.73.4.0/24

wrt5.lan.c3voc.de: 10.73.5.0/24

oscwrt1.lan.c3voc.de: 10.73.41.0/24

oscwrt2.lan.c3voc.de: 10.73.42.0/24

router-muc.lan.c3voc.de: 10.73.80.0/24

Konfiguriert werden die entsprechenden Subnetzzugehörigkeiten auf mng.ber.c3voc.de /etc/openvpn/clients/wrt${i}@mng.ber.c3voc.de mit dem iroute Befehl.

Tweaks

Router IP vergeben

Um den WRT auch zum default GW (10.73.0.254) des jeweiligen Subnetzes zu machen kann man entweder das Interface router im LUCI-Webinterface aktivieren (Network - Interfaces - ROUTER - Connect) oder folgendes als root auf den jeweiliegem WRT ausführen:

uci set network.router.enabled=1; uci commit; ifup router

10.73.0.254

Weiteren Traffic durch das VPN routen

Auf mng.ber.c3voc.de ist ein NAT für das Subnet 10.8.0.0/16 eingerichtet. Damit kann nach Bedarf auch das VPN als Endpunkt für Internet-Traffic genutzt werden.

Szenario 1:

Auphonic IP ist im Event-Netz für ausgehende Verbindungen gesperrt. Um den Auphonic-Traffic mit durch das VPN zu routen, muss auf dem zuständigen WRT folgende Route per Konsole hinzugefügt werden:

ip route add $auphonicip via 10.8.0.1 dev tun0 oder* route add $auphonicip gw 10.8.0.1 dev tun0

Neuen VPN Client konfigurieren

Auf dem VPN-Server

neuen Key erstellen

Der VPN-Server ist aktuell mng.ber.c3voc.de. Sämtliche Keys die für das OpenVPN mit easy-rsa2 verwaltet werden befinden sich in dem git-Repository git@git.c3voc.de:openvpn-ca. Dieses Repository lokal auschecken und neuen Key generieren:

source vars
./build-key <hostname>
# alle Nachfragen müssen mit 'y' bestätigt werden

Beim lokalen auschecken koennte es passieren, dass der Pfad

dir = /etc/openvpn/easy-rsa2/keys # Where everything is kept

in der openssl.cnf nicht passt. Diesen durch den Pfad ersetzen den pwd anzeigt hilft:

dir = /home/eimann/src/openvpn-ca/keys # Where everything is kept

Danach funktioniert das build-key command.

Anschließend Änderungen commiten (ohne erstellten private key), pushen und das ausgecheckte Repository wieder lokal löschen. Alternativ Permissions anpassen chmod 600 keys/*key.

Änderungen auf dem VPN-Server anwenden:

sudo -E su
cd /etc/openvpn/easy-rsa2
git pull origin master
chmod 600 keys/*key

Sollte das nach einer Passphrase für Keys von root fragen, lokal Key Forwarding aktivieren:

eval $(ssh-agent)
ssh-add <key>
ssh -A mng.ber.c3voc.de

Spezielle Server-Konfiguration für den Client anpassen

Jeder Client bekommt bestimmte routen per default gepushed. Um einzustellen, welcher Client welche Routen bekommt, werden unter /etc/openvpn/clients entsprechende Dateien gepflegt. Der Name der Dateien ist identisch mit dem Common-Name des Client-Zertifikats:

cd /etc/openvpn/clients
ln -s default_clients <client>
/etc/init.d/openvpn restart # Achtung das kickt leider alle Clients :/

Auf dem Client

OpenVPN client installieren z.B.:

aptitude install openvpn
vim /etc/openvpn/voc.conf

/etc/openvpn/voc.conf anpassen:

; general
client
dev tun
topology subnet
; connection
remote 195.54.164.163
port 1194
proto udp
keepalive 10 30
resolv-retry infinite
link-mtu 1400
mssfix 0
; crypto
cipher AES-128-CBC
; certificates
key /etc/openvpn/<client>.key # TODO: change me
ca /etc/openvpn/ca.crt
cert /etc/openvpn/<client>.crt # TODO: change me
tls-auth /etc/openvpn/ta.key 1
; auth
tls-cipher "DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA"
tls-client
auth SHA512
remote-cert-tls server
; logging
verb 0

Folgende Daten müssen lokal in das /etc/openvpn/-Verzeichnis kopiert werden:

ta.key

ca.crt

<hostname>.key

<hostname>.crt

Anschließend Permissions anpassen und OpenVPN-Client starten:

wheezy (init v)

chmod 600 /etc/openvpn/*.key
service openvpn start
tail -f /var/log/daemon.log

Ab jessie (systemd):

chmod 600 /etc/openvpn/*.key
systemctl enable openvpn@voc
systemctl start openvpn@voc
tail -f /var/log/daemon.log

vergl.

Client Zertifikat widerrufen

Auf dem VPN-Server in den Ordner /etc/openvpn/easy-rsa2/ wechseln und das revoke-full wie folgt aufrufen:

source vars
./revoke-full <client CN>

Die letzte Zeile der anschließenden Ausgabe sollte lauten: error 23 at 0 depth lookup:certificate revoked. Änderungen zum Git-Server commiten sowie crl.pem kopieren:

cp /etc/openvpn/easy-rsa2/keys/crl.pem /etc/openvpn/crl.pem

OpenVPN-Server neustarten.