OpenVPN: Ohne manuelle Passworteingabe mit VPN-Anbieter verbinden

Für wenige Bitcoin und ohne Angabe persönlicher Details ermöglichen Anbieter wie Private Internet Access (Empfehlungslink) ein entspannteres Nutzen des Internet mit den IP Adressen ihrer VPN-Server.

Um die Einwahl via OpenVPN beim Systemstart zu automatisieren und somit die Passwortabfrage zu vermeiden, können die entsprechenden Zugangsdaten in einer einfachen Textdatei abgelegt werden.

Ein Verweis aus der OpenVPN-Client Konfigurationsdatei reicht aus um die Textdatei zu nutzen.

OpenVPN Konfigurationsdateien von Private Internet Access laden

Nach der OpenVPN Installation (Ubuntu: sudo apt-get install openvpn) lädt man mit folgenden Befehlen das Konfigurationspaket herunter.

url='https://www.privateinternetaccess.com/openvpn/openvpn.zip'
tmpdir=`mktemp -d`
zip="${tmpdir}/openvpn.zip"

cd "${tmpdir}"
curl "${url}" > "${zip}"
unzip "${zip}" && rm "${zip}"

curl(1), unzip(1)

OpenVPN Konfigurationsdateien zur Nutzung der Credentials-Datei umschreiben

sed --in-place=_before_credentials_file \
's/auth-user-pass/auth-user-pass credentials.txt\nauth-nocache/g' *.ovpn

sed(1)

Credentials-Datei mit Benutzername und Kennwort erstellen

# Hier müssen die entsprechenden Daten eingetragen werden:
PIA_BENUTZERNAME=
PIA_PASSWORT=

# Daten in eine Datei schreiben
credentials_file=`mktemp`
echo "${PIA_BENUTZERNAME}\n${PIA_PASSWORT}" > ${credentials_file}
chmod go-rwx ${credentials_file}

sudo mv -i * /etc/openvpn/

echo(1), chmod(1), mv(1)

OpenVPN-Verbindung aktivieren

PIA_SERVER=Sweden

sudo ln -s /etc/openvpn/${SERVER}.ovpn /etc/openvpn/pia.conf
sudo service openvpn restart

ln(1), service(8)

An dieser Stelle sollte die Verbindung zum gewünschten Server des VPN-Anbieters hergestellt sein.

Tipps und Tricks

Gerätename für VPN-Tunnel festlegen

Standardmäßig wird beim Verbindungsaufbau ein neues tun-Gerät verwendet.

Dadurch könnte man theoretisch zu allen VPN-Servern gleichzeitig eine Verbindung aufbauen.

Möchte man sicherstellen, dass dies unterbunden ist, vergibt man in der Konfigurationsdatei explizit einen Namen:

sed --in-place=_before_dev_rename \
's/^dev tun$/dev tunPIA/g' *.ovpn

Nun wird das tun-Gerät stets als tunPIA benannt.

Das ist vor allem dann praktisch, wenn man den Schnittstellennamen in Skripten nutzen möchte.

Bestimmte IP Adressen von VPN-Tunnel ausnehmen

Bei manchen VPN-Anbietern muss man explizit ein Whitelisting von Mailservern beantragen, da sie ansonsten Verbindungen über die entsprechenden Ports blocken.

Möchte man den Aufwand vermeiden, oder vertraut man einer Verbindung zum Mailserver einfach mehr, kann man einzelne IP-Adressen via OpenVPN-Konfigurationsdatei am Tunnel vorbeileiten:

# IP hier angeben
AUSNAHME_IP=
echo "route ${AUSNAHME_IP} 255.255.255.255 net_gateway" | tee -a *.openvpn
tee(1)

Netzwerkschnittstellen elegant formatiert auflisten

# Aktive Schnittstellen auflisten
ip -family inet -oneline addr show scope global |
awk '{ printf "%s %s up\n", $2, $4 }'

# Inaktive Schnittstellen auflisten
ip -family inet -oneline link show scope global |
grep ' DOWN ' | sed 's/\://g' |
awk '{ printf "%s none down\n", $2}'