= VPN
Das Access VPN wird grade auf [[intern:wireguard]] umgestellt, dementsprechend sind manche Abschnitte auf dieser Seite nicht mehr aktuell!
== 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 [[hardware:encoder]]'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
* ''router-hacc.lan.c3voc.de'': 10.73.81.0/24
Konfiguriert werden die entsprechenden Subnetzzugehörigkeiten auf [[intern:server:ber.c3voc.de:mng]] ''/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
Um Konflikte zu vermeiden, sollte darauf geachtet werden, dass die IP-Adresse ''10.73.0.254'' nicht automatisch konfiguriert wird, sondern nur bei Bedarf.
==== Weiteren Traffic durch das VPN routen
Auf [[intern:server:ber.c3voc.de:mng]] 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 $auphonic_ip via 10.8.0.1 dev tun0`
oder
* `route add $auphonic_ip gw 10.8.0.1 dev tun0`
== Neuen VPN Client konfigurieren
=== Auf dem VPN-Server
==== neuen Key erstellen
Der VPN-Server ist aktuell [[intern:server:ber.c3voc.de:mng]]. Sämtliche Keys die für das OpenVPN mit easy-rsa2 verwaltet werden befinden sich in dem [[intern:git|git]]-Repository ''git@git.c3voc.de:openvpn-ca''. Dieses Repository //lokal// auschecken und neuen Key generieren:
source vars
./build-key
./sign-csr
# 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 [[intern:server:ber.c3voc.de:mng|VPN-Server]] anwenden:
sudo -E su
cd /etc/openvpn/easy-rsa2
git pull origin master
chmod 600 keys/*key
==== 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
/etc/init.d/openvpn restart # Achtung das kickt leider alle Clients :/
=== Auf dem Client
[[https://openvpn.net/|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 185.106.84.49
port 1194
proto udp
keepalive 10 30
resolv-retry infinite
link-mtu 1400
mssfix 0
; crypto
cipher AES-128-CBC
; certificates
key /etc/openvpn/.key # TODO: change me
ca /etc/openvpn/ca.crt
cert /etc/openvpn/.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''
* ''.key''
* ''.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
Die Nutzung von Network Manager ist nicht empfohlen. Dieser übernimmt nicht alle Einstellungen aus der Client Config (mtu) ([[https://bugs.launchpad.net/ubuntu/+source/network-manager-openvpn/+bug/364101|vergl.]]). Das Problem macht sich dann spätestens beim Aufbau einer ssh Verbindung bemerkbar.
== Client Zertifikat widerrufen
Auf dem [[intern:server:ber.c3voc.de:mng|VPN-Server]] in den Ordner ''/etc/openvpn/easy-rsa2/'' wechseln und das ''revoke-full'' wie folgt aufrufen:
source vars
./revoke-full
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.