OpenVPN mit Docker auf dem RPI

Da ich meinen Raspberry PI grundsätzlich nur als „NAS“ missbrauche, soll er so clean wie möglich bleiben. D.h. keine zusätzliche Software, die nicht nötig ist.
Um jetzt aber OpenVPN zu testen und ggf. dauerhaft laufen zu lassen (wenn es klappt) will ich nicht meinen produktiven RPI zerstören und später neuinstallieren.

  Und hier kommt Docker ins Spiel. Durch die Software-Container kann ich testen und spielen und jederzeit mit einem Befehl den Container stoppen und löschen. Das RPI System bleibt an sich sauber. Wer neu in Docker ist und mehr über Docker auf dem RPI erfahren möchte, dem sei die Seite von Alex ans Herz gelegt. Die Docker Grundkommandos werden hier nicht behandelt, deshalb geht es mit OpenVPN weiter… PS: mit curl -sSL https://get.docker.com | sh installiert man Docker. Eine Variable namens $OVPN_DATA für die folgenden Befehle wird gesetzt:

OVPN_DATA="ovpn-data"  

Das $OVPN_DATA Volume mit den Konfigurations- und Zertifikatsdaten wird erstellt (Befehle nacheinander eingeben, die DYNDNSADRESSE muss natürlich gegen eure wirkliche ausgetauscht werden ;)):

docker volume create --name $OVPN_DATA 

docker run -v $OVPN_DATA:/etc/openvpn --rm giggio/openvpn-arm ovpn_genconfig -u udp://DYNDNSADRESSE  

Zertifizierungsstelle (PKI) mit Easy-RSA wird erstellt (Zertifikat Erstellung dauert lange):

docker run -v $OVPN_DATA:/etc/openvpn --rm -it giggio/openvpn-arm ovpn_initpki nopass  

Starte den OpenVPN Docker Container mit dem Namen openvpn und dem Port 1194 (dieser Port muss bei eurem Router auf den RPI weitergeleitet werden):

docker run -v $OVPN_DATA:/etc/openvpn -d --name openvpn -p 1194:1194/udp --cap-add=NET_ADMIN giggio/openvpn-arm  

Jetzt noch das Client Zertifikat erstellen (ohne PW oder mit PW. Das PW muss beim Verbinden dann eingegeben werden. CLIENTNAME natürlich frei wählen):

docker run -v $OVPN_DATA:/etc/openvpn --rm -it giggio/openvpn-arm easyrsa build-client-full CLIENTNAME nopass

oder mit Passwort:

docker run -v $OVPN_DATA:/etc/openvpn --rm -it giggio/openvpn-arm easyrsa build-client-full CLIENTNAME  

Client Konfiguration erstellen und an aktuellen „Shell-Ort“ kopieren:

docker run -v $OVPN_DATA:/etc/openvpn --rm giggio/openvpn-arm ovpn_getclient CLIENTNAME > CLIENTNAME.ovpn  

Das wars.
Die CLIENTNAME.ovpn enthält das Client Zertifikat, welche nun auf den Client (PC, Smartphone, etc.) kopiert wird und mit einem OpenVPN fähigen Programm geöffnet. Die Verbindung wird dann über die anfangs eingegebene DYNDNSADRESSE aufgebaut. Bitte den Port am Router entsprechend freigeben 😉 Nun kann der VPN-Container wunderbar über Docker gestartet, gestoppt oder gelöscht werden. Das saubere RPI-System bleibt bestehen.