Openvpn SNOM: Unterschied zwischen den Versionen
Aq (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Snom bietet eine alternative Firmware für ihre Telefone an, die openVPN Verbindungen ermöglicht. Hiermit kann sich das Telefon in ein VPN einwählen und über d…“) |
Admin (Diskussion | Beiträge) |
||
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | --[[Benutzer:Aq|Aq]] 12:28, 10. Jan. 2011 (UTC) | ||
+ | |||
Snom bietet eine alternative Firmware für ihre Telefone an, die openVPN Verbindungen ermöglicht. | Snom bietet eine alternative Firmware für ihre Telefone an, die openVPN Verbindungen ermöglicht. | ||
Hiermit kann sich das Telefon in ein VPN einwählen und über diese Tunnel ein Verbindung zum entsprechenden Server aufbauen. | Hiermit kann sich das Telefon in ein VPN einwählen und über diese Tunnel ein Verbindung zum entsprechenden Server aufbauen. | ||
Zeile 21: | Zeile 23: | ||
Folgende Beisiele basieren auf easy-rsa 2.0, welches mit openvpn mitgeliefert wird. | Folgende Beisiele basieren auf easy-rsa 2.0, welches mit openvpn mitgeliefert wird. | ||
+ | Hinweis: openVPN unter Verwendung von TCP setzt eine hohe Bandbreite vorraus. Ausserdem ist die Sprachqualität hörbar verschlechtert im Vergleich zu einem Einsatz von UDP. | ||
+ | TCP(UDP(RTP)) -> Die Sprachpakete werden in UDP verpackt. Den daraus resultierenden Geschwindigkeitsvorteil macht eine weitere Kapselung in TCP Pakete zu nichte. | ||
+ | Allerdings gilt es zu beachten, dass beim Einsatz von UDP Probleme in Verbindung mit NAT auftreten können. | ||
+ | |||
=== CA erstellen === | === CA erstellen === | ||
Zeile 58: | Zeile 64: | ||
=== Server Konfig === | === Server Konfig === | ||
+ | |||
+ | Im Prinzip kann eine klassische openVPN Server Konfig genommen werden. | ||
+ | Zu beachten ist, das lzo-compression deaktiviert ist und das Netzwerk, welches den VoIP Server beherbergt gepusht wird. | ||
+ | |||
+ | port 1198 | ||
+ | <br> | ||
+ | proto tcp | ||
+ | ;proto udp | ||
+ | <br> | ||
+ | ;dev tap | ||
+ | dev tun | ||
+ | <br> | ||
+ | ca /etc/openvpn/Server/ca.crt | ||
+ | cert /etc/openvpn/Server/server.crt | ||
+ | key /etc/openvpn/Server/server.key # This file should be kept secret | ||
+ | dh dh1024.pem | ||
+ | <br> | ||
+ | server 10.8.123.0 255.255.255.0 | ||
+ | ifconfig-pool-persist ipp.txt | ||
+ | push "route 192.168.44.0 255.255.255.0" | ||
+ | ;push "route 192.168.20.0 255.255.255.0" | ||
+ | ;push "redirect-gateway" | ||
+ | ;push "dhcp-option DNS 10.8.0.1" | ||
+ | ;push "dhcp-option WINS 10.8.0.1" | ||
+ | client-to-client | ||
+ | keepalive 10 120 | ||
+ | <br> | ||
+ | #comp-lzo | ||
+ | <br> | ||
+ | ;max-clients 100 | ||
+ | ;user nobody | ||
+ | ;group nogroup | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | status openvpn-status.log | ||
+ | ;log openvpn.log | ||
+ | ;log-append openvpn.log | ||
+ | verb 2 | ||
+ | ;mute 20 | ||
+ | |||
+ | === Client Konfiguration === | ||
+ | |||
+ | Dies ist der etwas komplizierte Part. | ||
+ | Die Konfiguation muss eine exakte Struktur aufweisen. | ||
+ | Anschliessend muss die Konfiguration zusammen mit den Zertifikaten in ein tar Archiv gepackt werden und auf einem http(s) Server bereitgestellt werden.<br> | ||
+ | '''Die Konfiguration muss den Namen vpn.cnf habe!!'''<br> | ||
+ | '''Der Pfad der Zertifikate auf dem Telefon ist /openvpn (Angabe im Konfig File)!!!'''<br> | ||
+ | |||
+ | client | ||
+ | dev tun | ||
+ | <br> | ||
+ | # (TCP(UDP(RTP))) :) | ||
+ | ;proto udp | ||
+ | proto tcp | ||
+ | remote 80.153.181.30 1198 | ||
+ | <br> | ||
+ | resolv-retry infinite | ||
+ | nobind | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | <br> | ||
+ | ca /openvpn/ca.crt | ||
+ | cert /openvpn/client.crt | ||
+ | key /openvpn/client.key | ||
+ | <br> | ||
+ | ns-cert-type server | ||
+ | <br> | ||
+ | #comp-lzo | ||
+ | <br> | ||
+ | # Set log file verbosity. | ||
+ | verb 0 | ||
+ | ;mute 20 | ||
+ | ping 10 | ||
+ | ping-restart 60 | ||
+ | |||
+ | Diese Konfig legt man in ein Verzeichniss, in dem auch ca.crt, client.crt und client.key liegen und erzeugt den tarball: | ||
+ | cd /in/das/Verzeichniss | ||
+ | chown -R root:root * | ||
+ | chmod -R 700 * | ||
+ | tar cvpf vpnclient.tar * | ||
+ | |||
+ | Dieses Archiv legt man nun auf einen http(s) Server. | ||
+ | Anmerkungen: | ||
+ | * Client Konfig MUSS vpn.cnf heissen | ||
+ | * Zertifikate können beliebig heissen, aber in der Konfig muss /openvpn/$ZERT angegeben sein | ||
+ | * Der Tarball darf nur Dateien ohne Verzeichnissstruktur entahlen. | ||
+ | * comp-lzo MUSS deaktiviert sein | ||
+ | * tcp verlangsamt die Verbindung tcp(udp(rdp)), aber umgeht NAT Problematik. | ||
+ | |||
+ | === Telefon einrichten === | ||
+ | |||
+ | Im Webinterface wechselt man auf "Advanced->QoS/Security" und aktiviert VPN. | ||
+ | Ein Neustart ist nötig! | ||
+ | Nun kann man die Adresse des tarballs auf dem http Server angeben und erneut speichern und rebooten. | ||
+ | Sind alle Konfigurationen korrekt, so erscheint nach erfolgreichem Boot im Display des Snom rechts unten ein VPN Symbol. | ||
+ | |||
+ | == Automatik == | ||
+ | |||
+ | Die Erstellung von weiteren Zertifikaten kann auch automatisiert werden. Dazu müssen einfach eingegebene Variablen in die vars geschrieben werden. Anschliessend startet man ein Script, das die vars sourced und dann ./build-key $CLIENT startet. | ||
+ | |||
+ | build-key muss so modifiziert werden, dass es nicht interaktiv durchläuft. | ||
+ | #!/bin/bash | ||
+ | <br> | ||
+ | # Make a certificate/private key pair using a locally generated | ||
+ | # root certificate. | ||
+ | <br> | ||
+ | export EASY_RSA="${EASY_RSA:-.}" | ||
+ | #"$EASY_RSA/pkitool" $* | ||
+ | "$EASY_RSA/pkitool" $* | ||
+ | |||
+ | Das selbe kann auch für CA oder Server Zertifikate erfolgen. | ||
+ | Anschliessend müssen einfach alle Zertifikate, die $CLIENT.* heissen in ein Unterverzeichniss kopiert werden. Hinzu wird noch das ca.crt kopiert, sowie eine modifizierte vpn.cnf (Anpassung der Zertifikatnamen). Der Inhalt des Verzeichniss muss getart werden und man hat einen funktionierenden tarball. | ||
+ | |||
+ | =Debugging= | ||
+ | Das OpenVPN kann seine Logausgaben an einen Netcat "Server" ausgeben. Dazu muss auf einem Linuxrechner einfach nur eine NC Instanz aufgerufen werden | ||
+ | netcat -l -p 5000 | ||
+ | und im Telefon den Parameter "vpn netcatserver" setzen mit folgender Syntax ( IP/DNS-Name Port) | ||
+ | 1.2.3.4 5000 | ||
+ | |||
+ | |||
+ | =Konfig 2.0= | ||
+ | Nach einigem Hin und Her hat sich die folgende Konfiguration als optimal raus gestellt | ||
+ | |||
+ | Server Seite | ||
+ | <pre> | ||
+ | |||
+ | client-to-client | ||
+ | port 5000 | ||
+ | proto udp | ||
+ | dev tun | ||
+ | ca /etc/openvpn/ca.crt | ||
+ | cert /etc/openvpn/server.crt | ||
+ | key /etc/openvpn/server.key # This file should be kept secret | ||
+ | dh dh1024.pem | ||
+ | server 10.9.123.0 255.255.255.0 | ||
+ | ifconfig-pool-persist ipp.txt | ||
+ | # push "route 10.10.10.0 255.255.255.0" | ||
+ | client-to-client | ||
+ | keepalive 10 60 | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | status /var/log/openvpn/openvpn-status.log | ||
+ | log /var/log/openvpn/openvpn.log | ||
+ | verb 4 | ||
+ | client-config-dir /etc/openvpn/ccd/ | ||
+ | mssfix 1200 | ||
+ | fragment 1200 | ||
+ | script-security 2 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | Client / Telefon | ||
+ | <pre> | ||
+ | client | ||
+ | dev tun | ||
+ | proto udp | ||
+ | remote tkh-voip.metasec.de 5000 | ||
+ | resolv-retry infinite | ||
+ | nobind | ||
+ | persist-key | ||
+ | persist-tun | ||
+ | ca /openvpn/ca.crt | ||
+ | cert /openvpn/57.crt | ||
+ | key /openvpn/57.key | ||
+ | ns-cert-type server | ||
+ | verb 5 | ||
+ | ping 10 | ||
+ | ping-restart 60 | ||
+ | mssfix 1200 | ||
+ | fragment 1200 | ||
+ | script-security 2 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | Wichtig ist das mssfix-ing. Die Telefone neigen dazu, dass der Tunnel zusammenbricht, wenn es s.g. Klampingprobleme gibt hinter NAT Routern. | ||
+ | |||
+ | =Provisionierung= | ||
+ | vpn_on: on | ||
+ | vpn_tarball_url: http://host/download/{mac}.tar | ||
+ | vpn_netcatserver: 192.168.1.1 5000 |
Aktuelle Version vom 23. Februar 2014, 18:34 Uhr
--Aq 12:28, 10. Jan. 2011 (UTC)
Snom bietet eine alternative Firmware für ihre Telefone an, die openVPN Verbindungen ermöglicht. Hiermit kann sich das Telefon in ein VPN einwählen und über diese Tunnel ein Verbindung zum entsprechenden Server aufbauen.
Vorteile sind:
- Nur ein Port muss nach außen geöffnet werden
- Tunnel komplett verschlüsselt
Inhaltsverzeichnis
Firmware
Die entsprechende Firmware basiert auf einer offiziellen 7er Firmware.
Zum flashen des Telefons kopiert man diesen Link FIRMWARE und fügt ihn im Web Interface des Telefons auf der "Software Update" Seite ein. Anschliessend muss man mit "Load" bestätigen und die Firmware wird geladen.
(Alternativ existiert auch schon eine vpn Firmware, die auf der 8er Firmware basiert. Diese wurde von uns aber noch nicht ausreichend getestet)
openVPN
Das Herz bildet ein openVPN Server im lokalen Netzwerk. Zunächst sollte, wenn noch nicht vorhanden eine PKI aufgebaut werden. Folgende Beisiele basieren auf easy-rsa 2.0, welches mit openvpn mitgeliefert wird.
Hinweis: openVPN unter Verwendung von TCP setzt eine hohe Bandbreite vorraus. Ausserdem ist die Sprachqualität hörbar verschlechtert im Vergleich zu einem Einsatz von UDP. TCP(UDP(RTP)) -> Die Sprachpakete werden in UDP verpackt. Den daraus resultierenden Geschwindigkeitsvorteil macht eine weitere Kapselung in TCP Pakete zu nichte. Allerdings gilt es zu beachten, dass beim Einsatz von UDP Probleme in Verbindung mit NAT auftreten können.
CA erstellen
Wechsel in das easy-rsa Verzeichniss, editieren der Datei "vars", und generieren der CA Zertifikate.
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/ vi vars source ./vars ./clean-all ./build-ca
Die Datei vars sollte entsprechend der eigenen Bedürfnisse editiert werden. Veränderungen müssen an den unteren EInträgen vorgenommen werden.
# These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY="DE" export KEY_PROVINCE="NRW" export KEY_CITY="Witten" export KEY_ORG="Metasec" export KEY_EMAIL="admin@metasec.de"
Zertifikate erstellen
Neben dem CA Zertifikat muss nun ein Zertifikat für den Server und für jeden CLienten (Snom Telefon) erstellt werden. Zunächst wird erneut die vars editiert, gesourcet und anschliessend das Zertifikat erzeugt.
vi vars source ./vars ./build-key-server $SERVER ./build-key $CLIENT
Alle Zertifikate werden im Unterverzeichniss keys gespeichert.
Möchte man ALLES rückgängig machen reicht ein ./clean-all aus. Dies löscht alle Zertifikate (CA, Server, Client) sowie alle Listen.
Für den Server werden noch Diffie-Hellmann Parameter benötigt:
./build-dh
Server Konfig
Im Prinzip kann eine klassische openVPN Server Konfig genommen werden. Zu beachten ist, das lzo-compression deaktiviert ist und das Netzwerk, welches den VoIP Server beherbergt gepusht wird.
port 1198
proto tcp ;proto udp
;dev tap dev tun
ca /etc/openvpn/Server/ca.crt cert /etc/openvpn/Server/server.crt key /etc/openvpn/Server/server.key # This file should be kept secret dh dh1024.pem
server 10.8.123.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 192.168.44.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" ;push "redirect-gateway" ;push "dhcp-option DNS 10.8.0.1" ;push "dhcp-option WINS 10.8.0.1" client-to-client keepalive 10 120
#comp-lzo
;max-clients 100 ;user nobody ;group nogroup persist-key persist-tun status openvpn-status.log ;log openvpn.log ;log-append openvpn.log verb 2 ;mute 20
Client Konfiguration
Dies ist der etwas komplizierte Part.
Die Konfiguation muss eine exakte Struktur aufweisen.
Anschliessend muss die Konfiguration zusammen mit den Zertifikaten in ein tar Archiv gepackt werden und auf einem http(s) Server bereitgestellt werden.
Die Konfiguration muss den Namen vpn.cnf habe!!
Der Pfad der Zertifikate auf dem Telefon ist /openvpn (Angabe im Konfig File)!!!
client dev tun
# (TCP(UDP(RTP))) :) ;proto udp proto tcp remote 80.153.181.30 1198
resolv-retry infinite nobind persist-key persist-tun
ca /openvpn/ca.crt cert /openvpn/client.crt key /openvpn/client.key
ns-cert-type server
#comp-lzo
# Set log file verbosity. verb 0 ;mute 20 ping 10 ping-restart 60
Diese Konfig legt man in ein Verzeichniss, in dem auch ca.crt, client.crt und client.key liegen und erzeugt den tarball:
cd /in/das/Verzeichniss chown -R root:root * chmod -R 700 * tar cvpf vpnclient.tar *
Dieses Archiv legt man nun auf einen http(s) Server. Anmerkungen:
- Client Konfig MUSS vpn.cnf heissen
- Zertifikate können beliebig heissen, aber in der Konfig muss /openvpn/$ZERT angegeben sein
- Der Tarball darf nur Dateien ohne Verzeichnissstruktur entahlen.
- comp-lzo MUSS deaktiviert sein
- tcp verlangsamt die Verbindung tcp(udp(rdp)), aber umgeht NAT Problematik.
Telefon einrichten
Im Webinterface wechselt man auf "Advanced->QoS/Security" und aktiviert VPN. Ein Neustart ist nötig! Nun kann man die Adresse des tarballs auf dem http Server angeben und erneut speichern und rebooten. Sind alle Konfigurationen korrekt, so erscheint nach erfolgreichem Boot im Display des Snom rechts unten ein VPN Symbol.
Automatik
Die Erstellung von weiteren Zertifikaten kann auch automatisiert werden. Dazu müssen einfach eingegebene Variablen in die vars geschrieben werden. Anschliessend startet man ein Script, das die vars sourced und dann ./build-key $CLIENT startet.
build-key muss so modifiziert werden, dass es nicht interaktiv durchläuft.
#!/bin/bash
# Make a certificate/private key pair using a locally generated # root certificate.
export EASY_RSA="${EASY_RSA:-.}" #"$EASY_RSA/pkitool" $* "$EASY_RSA/pkitool" $*
Das selbe kann auch für CA oder Server Zertifikate erfolgen. Anschliessend müssen einfach alle Zertifikate, die $CLIENT.* heissen in ein Unterverzeichniss kopiert werden. Hinzu wird noch das ca.crt kopiert, sowie eine modifizierte vpn.cnf (Anpassung der Zertifikatnamen). Der Inhalt des Verzeichniss muss getart werden und man hat einen funktionierenden tarball.
Debugging
Das OpenVPN kann seine Logausgaben an einen Netcat "Server" ausgeben. Dazu muss auf einem Linuxrechner einfach nur eine NC Instanz aufgerufen werden
netcat -l -p 5000
und im Telefon den Parameter "vpn netcatserver" setzen mit folgender Syntax ( IP/DNS-Name Port)
1.2.3.4 5000
Konfig 2.0
Nach einigem Hin und Her hat sich die folgende Konfiguration als optimal raus gestellt
Server Seite
client-to-client port 5000 proto udp dev tun ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key # This file should be kept secret dh dh1024.pem server 10.9.123.0 255.255.255.0 ifconfig-pool-persist ipp.txt # push "route 10.10.10.0 255.255.255.0" client-to-client keepalive 10 60 persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log verb 4 client-config-dir /etc/openvpn/ccd/ mssfix 1200 fragment 1200 script-security 2
Client / Telefon
client dev tun proto udp remote tkh-voip.metasec.de 5000 resolv-retry infinite nobind persist-key persist-tun ca /openvpn/ca.crt cert /openvpn/57.crt key /openvpn/57.key ns-cert-type server verb 5 ping 10 ping-restart 60 mssfix 1200 fragment 1200 script-security 2
Wichtig ist das mssfix-ing. Die Telefone neigen dazu, dass der Tunnel zusammenbricht, wenn es s.g. Klampingprobleme gibt hinter NAT Routern.
Provisionierung
vpn_on: on vpn_tarball_url: http://host/download/{mac}.tar vpn_netcatserver: 192.168.1.1 5000