Die letzten Tage habe ich damit verbracht ein Telefon sicher und zuverlässig mit einer SIP Telefonanlage zu verbinden, welches im Homeoffice stehen soll. Jeder der mit VoIP zu tun hat, weiß, das SIP/RTP sich nicht sehr gut mit diversen NAT Routern oder Firewalls verträgt. Auch wenn die Ports alle offen sind (was ja wieder ein Sicherheitsrisiko darstellt), sind einfach die verschiedensten Router, Fritzboxen und Firewalls dieser Welt einfach zu unüberschaubar in ihrer Konfigurationsvielfalt.
Und dabei geht es doch so viel einfacher. Mit OpenVPN.
Ganz einfach ausgedrückt: OpenVPN ist wie eine Art virtuelles Netzwerkkabel, welches zwischen dem Telefon und der Telefonanlage gespannt wird und eine verschlüsselte Kommunikation gewährleistet.
Besser noch: Durch dieses virtuelle Netzwerkkabel IST das Telefon Teil des Firmennetzwerkes und funktionert haargenau so, als wenn es IN den Büroräumen stehen würde.
Vorher (verinfacht):
Telefon -> Router -> Internet -> Router -> TelefonanlageNachher (vereinfacht):
Telefon -> OpenVPN -> Telefonanlage
Damit entfällt eine Konfiguration und die Fehlerquelle Router komplett, die Verbindung auf dem Weg vom Telefon zur Telefonanlage wird nicht zig mal angefasst oder verändert. Yay!
Diese Lösung wurde (das sie nur sehr wenige Nutzer hat) denkbar einfach realisiert und verbraucht so gut wie nix an Strom. Mit einem RaspberryPI3, Raspian (Debian) und OpenVPN.
Im wesentlich sind das meine Aufzeichnungen der Installation, da ich keine zusammenhängende und gültige Anleitung gefunden habe. Irgendwie war immer irgendwas falsch oder überholt.
Inhaltsverzeichnis
- Vorraussetzung auf der Serverseite
- Vorraussetzung auf der Clientseite
- OpenVPN und Apache installieren
- Snom VPN Paket erstellen
- Passwortschutz für das OpenVPN Verzeichnis
- SSL Erweiterung bei Apache aktivieren
- Dienst beim Bootvorgang mitstarten
- Routing zwischen 192.168.2.0 und 192.168.22.0 ermöglichen
- Dem Snom Telefon die VPN Konfig hinterlegen
Variablen
Hier werden bestimme Namen und Dateinamen vorgegeben, die man tunlichst auf die eigene Bedürfnisse anpassen sollte (sind unten in Rot markiert):
# sip.cc.local = Serverzertifikat
# snom.cc.local = Zertifikat des Telefons
# firma.dyndns.biz = Hostname des OpenVPN Servers (idealerweise ein externer FQDN)
# 192.168.22.0 = VPN Subnetz
# 192.168.2.0 = Lokales Netz
# vpnclient-snom-user1 = VPN Benutzername
Vorraussetzung auf der Serverseite
- Raspberry: Ein aktuelles Rasbian ist installiert und betriebsbereit
- Raspberry: Interne feste IP Adresse
- Router: Von außer per DNS oder DynDNS erreichbar
- Router: einkommende NAT Regel Port 8443, Protokoll TCP auf interne IP und Port 443 des OpenVPN Servers
- Router: einkommende NAT Regel Port 1194, Protokoll UDP auf interne IP und Port 1194 des OpenVPN Servers
Vorraussetzung auf der Clientseite (Telefon)
- Nichts besonderes, hauptsache Strom und ein Netzwerkkabel welches per DHCP eine IP Adresse zuweist und das Routing ins Internet ermöglicht.
- Die zugewiesene IP Adresse muss aber bekannt sein, damit die Konfiguration auf dem Telefon vorgenommen werden kann (steht unter Info im Display)
- Das Snom benötigt eine OpenVPN Firmware die aufgespielt werden muss, bevor es weitergeht.
Wie ist der Ablauf
- Das Telefon bekommt eine URL zu einer Datei, die automatsch vom Telefon runtergeladen wird:
- Diese wird intern verarbeitet und die Informationen und Zertifikate zum Aufbau einer VPN Verbinung eingelesen und im Telefon hinterlegt
- Diese Datei wird per HTTPS verschlüsselt übertragen und vorher wurde ein Benutzername und Kennwort abgefragt. Sonst könnte sich JEDER nur duch das auslesen der Datei und Zertifikate mit dem Firmennetzwerk verbinden!
- Das Telefon kann dann die VPN Verbindung schließlich aufbauen
Hier in der Anleitung arbeiten wir mit der LAN IP 192.168.2.0/24
und OpenVPN bekommt 192.168.22.0/24
Alle Dinge beginnen mit einem beherzten root-fähigem Login per SSH oder Putty auf den frisch installierten RaspberryPi.
Ich hasse sudo, lasst uns die Befehle direkt eingeben:
# sudo -i
OpenVPN und Apache installieren
# apt-get install openvpn apache2
OpenVPN Grundkonfiguration
# cd /usr/share/doc/openvpn/examples/sample-config-files/ # cp server.conf.gz /etc/openvpn/ # cd /etc/openvpn/ # gunzip server.conf.gz
OpenVPN Zertifikate vorbereiten
Die Verbindung wird mittels Zertifikate ermöglicht und nicht per Benutzername und Kennwort. Dazu brauchen wir:
- Ein Stammzertifikat,
- ein Serverzertifikat (was von dem Stammzertifikat bestätigt wird) und
- das Zertifikat für das Telefon (welches auch von dem Stammzertifikat bestätigt wird.
„bestätigen“ bedeutet signieren. Damit vertrauen sich die Zertifikate dann gegenseitig.
Die vorausgefüllten Felder sind Beispielinhalte sind durch eure eigenen Angaben natürlich zu ersetzen.
# mkdir /etc/openvpn/easy-rsa/ && cp -R /usr/share/easy-rsa/ /etc/openvpn/ # cd /etc/openvpn/easy-rsa # mkdir keys # cp openssl-1.0.0.cnf openssl.cnf # nano vars
export KEY_COUNTRY=“DE“
export KEY_PROVINCE=“NRW“
export KEY_CITY=“ERKRATH“
export KEY_ORG=“CC“
export KEY_EMAIL=“info@computing-competence.de“
export KEY_OU=“IT“
# source ./vars
# ./clean-all
OpenVPN Rootzertifikat erstellen
# ./build-ca
Common Name (eg, your name or your server’s hostname) [CC CA]:
OpenVPN Serverzertifikat
# ./build-key-server sip.cc.local
name :PRINTABLE:’OpenVPN Server‘
OpenVPN Clientzertifikat
Hier wird nur ein Clientzertifikat erstellt. Entweder man benutzt dieses eine für mehrere Telefone oder für jedes Telefon wird ein eigenes erstellt. Eure Entscheidung, die sich aber in der OpenVPN Server Konfiguration wiederspiegeln muss (duplicate-cn). Hier braucht erstmal jeder ein eigenes.
# ./build-key snom.cc.local
name :PRINTABLE:’OpenVPN Client‘
Und schließlich alles zusammenfügen und fertig machen. Das dauert etwas.
# ./build-dh
OpenVPN Server einrichten
# nano /etc/openvpn/server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/vpn.local.crt
key /etc/openvpn/easy-rsa/keys/vpn.local.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 192.168.22.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push „route 192.168.2.0 255.255.255.0″
keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun
status openvpn-status.log
log-append /var/log/openvpn.log
verb 4
mute 20
explicit-exit-notify 1
OpenVPN Client vorbereiten
# mkdir /etc/openvpn/client/tmp # cd /etc/openvpn/client/tmp # cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client/tmp/vpn.cnf # nano vpn.cnf
client
dev tun
proto udp
remote firma.dyndns.biz 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /openvpn/ca.crt
cert /openvpn/client.crt
key /openvpn/client.key
ns-cert-type server
verb 0
ping 10
ping-restart 60
cipher AES-256-CBC
Snom VPN Paket erstellen
Die oben erwähnte geheimnisvolle Datei ist eigentlich ein Paket, muss noch erstellt und in ein Webserververzeichnis gelegt werden.
# cp /etc/openvpn/easy-rsa/keys/snom.cc.local.crt /etc/openvpn/client/tmp/client.crt # cp /etc/openvpn/easy-rsa/keys/snom.cc.local.key /etc/openvpn/client/tmp/client.key # cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/client/tmp/ca.crt # cd /etc/openvpn/client/tmp/ # chown -Rf root:root * # chmod -R 700 * # tar cvpf vpnclient-snom-user.tar * # cp /etc/openvpn/client/tmp/vpnclient-snom-user.tar /var/www/html/openvpn/
Passwortschutz für das OpenVPN Verzeichnis
# mkdir /var/www/html/openvpn/ # touch /var/www/html/openvpn/.htaccess # nano /var/www/html/openvpn/.htaccess
AuthType Basic
AuthName „vpnclient-snom-user1“
AuthUserFile .htpasswd
Require user vpnclient-snom-user1
# htpasswd -c /var/www/html/openvpn/.htpasswd vpnclient-snom-user1
New password:
Re-type new password:
SSL Erweiterung bei Apache aktivieren
# a2enmod ssl # nano /etc/apache2/sites-available/default-ssl.conf
SSLCertificateFile /etc/openvpn/easy-rsa/keys/vpn.local.crt
SSLCertificateKeyFile /etc/openvpn/easy-rsa/keys/vpn.local.key
SSLCertificateChainFile /etc/openvpn/easy-rsa/keys/ca.crt
# a2ensite default-ssl.conf
Dienst beim Bootvorgang mitstarten
# service apache2 enable # service openvpn enable
Nun alle Dienste starten
# service apache2 start # service openvpn start
Routing zwischen 192.168.2.0 und 192.168.22.0 ermöglichen
# sysctl -w net.ipv4.ip_forward=1 # nano /etc/sysctl.conf
net.ipv4.ip_forward=1
Test
Versucht nun mal die Datei von dem Webserver runterzuladen:
https://vpnclient-snom-user1:PASSWORT@firma.dyndns.biz:8443/openvpn/vpnclient-snom-user1.tar
Wenn das geklappt hat kann nun das Telefon eingerichtet werden:
Dem Snom Telefon die VPN Konfig hinterlegen
Snom- Erweitert – QoS/Sicherheit –
VPN: an
Unkomprimierter VPN Konfig. Tarball: https://vpnclient-snom-user1:PASSWORT@firma.dyndns.biz:8443/openvpn/vpnclient-snom-user1.tar
Neustarten (Das Telefon startet 2x selbstständig neu)