OpenVPN

Beim Einrichten von VPN möchte man meist nicht nur auf das Hostsystem, also den OpenVPN-Gateway zugreifen, sondern auch auf das Netzwerk dahinter. Damit dies gelingt, sollten neben den passenden OpenVPN-Einstellungen zusätzlich passende iptables-Einträge erstellt werden. Damit diese nicht beim Neustart des Servers verloren gehen, liefern wir hier ein kleines Initskript, was dies erledigt.

openvpn-iptables
#!/bin/sh
 
# OpenVPN iptables skript
# --
# (C) 2014 Rene Knipschild - Custom Software Development
# www.rkcsd.com - P.O. Box 1468 - 34484 Korbach - GERMANY
# Phone: +49 5631 9189488
# Email: email@rkcsd.com
# Use my PGP pubkey for email requests: (download here)
# http://go.reneknipschild.net/pubkey
 
### BEGIN INIT INFO
# Provides:      openvpn-iptables
# Required-Start:   $remote_fs $syslog
# Required-Stop:   $remote_fs $syslog
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description:   Sets up OpenVPN iptables
### END INIT INFO
 
case "$1" in
  start)
    echo "Setting up OpenVPN iptables..."
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    ;;
  stop)
    ;;
  *)
    echo "Usage: /etc/init.d/openvpn-iptables {start|stop}"
    exit 1
    ;;
esac
 
exit 0

Dieses muss nur nach /etc/init.d/openvpn-iptables kopiert werden, Rechte richtig setzen per chmod 755 /etc/init.d/openvpn-iptables, und per update-rc.d openvpn-iptables defaults 20 aktiviert werden.1)

Client-Konfiguration

Es bietet sich an, auf den Clients den OpenVPN-Service direkt als Client beim Systemstart mitlaufen zu lassen. Für das Problem, dass ein Push bestimmter Routen nicht funktioniert, bietet sich ein Fix-Skript an.

Service anlegen in /lib/systemd/system/openvpnfix.service

[Unit]
Description=Fixing OpenVPN routes and mount NFS network shares
After=openvpn.service

[Service]
ExecStart=/etc/openvpn/OpenVPNFix.sh                  

[Install]
WantedBy=multi-user.target

Das von uns benötigte Skript:

OpenVPNFix.sh
#!/bin/sh
 
# OpenVPN fixing skript
# --
# (C) 2015, 2016 Rene Knipschild - Custom Software Development
# www.rkcsd.com - P.O. Box 1468 - 34484 Korbach - GERMANY
# Phone: +49 5631 9189488
# Email: email@rkcsd.com
# Use my PGP pubkey for email requests: (download here)
# http://go.reneknipschild.net/pubkey
 
echo "Waiting for OpenVPN connection to be possibly ready (30s)..."
sleep 30
echo "Setting up OpenVPN routes..."
route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.8.0.5
echo "Mounting NFS network shares..."
mount /mnt/server/pool

Die NFS-Shares sind hierbei auf noauto geschaltet, denn sonst werden diese vor dem OpenVPN-Service-Start versucht, zu mounten, was natürlich in einem fremden Netzwerk nicht gehen wird.

Dann noch neuen „Dienst“ per systemctl enable openvpnfix aktivieren2). Es sollte die Meldung Created symlink from /etc/systemd/system/multi-user.target.wants/openvpnfix.service to /lib/systemd/system/openvpnfix.service erscheinen

1) Gilt für Server mit initd-System
2) Gilt für Client mit systemd-System