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

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

<note warning>Um Konflikte zu vermeiden, sollte darauf geachtet werden, dass die IP-Adresse 10.73.0.254 nicht automatisch konfiguriert wird, sondern nur bei Bedarf.</note>

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@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

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:

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

<note warning>Die Nutzung von Network Manager ist nicht empfohlen. Dieser übernimmt nicht alle Einstellungen aus der Client Config (mtu) (vergl.). Das Problem macht sich dann spätestens beim Aufbau einer ssh Verbindung bemerkbar.</note>

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.