Servus,
ich wollte mittlerweile mal wieder ein Update geben, was sich bei der immer neuen Problematik zum Thema FRITZ!Box VoIP über OpenVPN Tunnel so tut.
Zwischenzeitlich habe ich mein Netzwerk etwas umgebaut - man könnte mich jetzt etwas paranoid nennen - um den internen Datenverkehr besser vor neugierigen Blicken seitens des Providers schützen zu können. Man hört ja immer wieder, was den Provider theoretisch so alles an Möglichkeiten offen stehen, über ihre gesponsorten Router in privaten Netzen rumzuschnüffeln. Nicht, dass sie es unbedingt tun würden, aber sicher ist sicher.
Demnach wurde nun meinen alten Netgear WGT634U durch einen etwas moderneren TP-Link WDR4300 (mit Dual-Band WiFi sowie GiBit Ethernet Ports) ausgetauscht, welcher natürlich ebenfalls wieder mit OpenWrt ausgestattet wurde. Außerdem habe ich ganzen noch ein Cisco 8-Port GiBit Switch spendiert, denn man benötigt ja nun schließlich noch ein paar zusätzliche Ethernet Ports wenn an den FRITZ!Box Router zukünftig nix mehr angeschlossen wird bzw. werden darf.
Und damit kommen wir dem Thema bereits etwas näher...
Die FRITZ!Box läuft jetzt praktisch nur noch als Modem (und als Basisstation für die Telefonie, aber dazu komme ich später). Naja also fast nur Modem... denn im Bridge Mode wollte ich sie dann doch nicht laufen lassen, denn damit hätte ich mir den Zugang auf die FRITZ!Box Administration aus dem internen Netzwerk versperrt. Also letztendlich arbeitet sie immernoch als Router, jedoch routet sie nur noch den Datenverkehr zwischen dem Internet und dem TP-Link. Das ganze verdeutliche ich mal an einem kleinen Schaubild:
Code:
10.0.0.2/24 10.0.0.1/24
+--------------------+
| |
-------------- -------------
| TP-Link W | | FRITZ!Box |------------> Kabel BW
| 1 2 3 4 | -------------
--------------
| | | |
| | | |
| | | |
| | | +----> Host A
------- | | +-------> Host B
| 1|----+ +----------> Host C
| 2|------------------> usw.
| 3|------------------> usw.
| 4|------------------>
| 5|------------------> Intern:
| 6|------------------> 192.168.178.0/24
| 7|------------------>
| 8|------------------>
-------
Cisco
Switch
Wie man sehen kann, hat die FRITZ!Box die interne IP-Adresse 10.0.0.1/24 und der TP-Link hat am WAN Port die IP-Adresse 10.0.0.2/24, damit sich die beiden untereinander unterhalten können. Damit die FRITZ!Box der Arbeit eines reinen Modems möglichst nahe kommt, ist im Port-Forwarding der FRITZ!Box der TP-Link Router als DMZ (bzw. Exposed Host) eingetragen. Somit geht sämtlicher Datenverkehr direkt und ohne Umwege an den TP-Link. Alle sonstigen Dienste wie WLAN, Firewall, und und und (mit Ausnahme der Telefonie natürlich) sind auf der FRITZ!Box abgeschaltet.
Die auf dem TP-Link installierte Firewall blockt dann erstmal alles bis auf Port 1194 (OpenVPN via TAP) und Port 1195 (OpenVPN via TUN)... wie Ihr schon in einem vorherigen Post von mir gesehen habt, halte ich mir immer beide Möglichkeiten offen. Ich persönlich favorisierte TAP, immer da wo es möglich ist, aber ein Handy ohne Root unterstützt mit OpenVPN for Android nun mal nur TUN.
Wo wir nun auch langsam beim Thema wären...
Natürlich möchte ich nachwievor auf meinem Android Handy die Internet Telefonie meiner FRITZ!Box nutzen. Solange ich im internen Netzwerk per WLAN eingeloggt bin, klappt das auch ganz prima, egal welches Programm ich auf meinem Handy benutze (FRITZ!App Fon, Zoiper, CSipSimple, etc.)
Interessant wird es bei der Nutzung von VoIP über OpenVPN via TUN. Hier stellen sich mittlerweile ganz neue Herausforderungen. Zum einen wurde die OpenVPN for Android Anwendung mittlerweile aktualisiert und funktioniert in meinen Augen schlechter als zuvor, zum Anderen läuft mein Handy mittlerweile auf Android 4.4.2, wodurch sich anscheinend auch eine Änderungen an der Netzwerkverwaltung im Gerät ergeben haben, die dazu führen, dass nicht mehr alles so reibungslos verläuft wie bisher.
Die Details zu den etlichen Stunden erfolgloser Versuche mit verschiedensten Einstellungen, sowie Versuche mit siproxd auf dem TP-Link, etc. möchte ich Euch hier ersparen und komme direkt zu meiner Lösung, die letztendlich funktioniert und hoffe, dass ich damit einigen von Euch genügend Stoff liefern kann, die an Ähnlichen Problemen gescheitert sind, wie zunächst ich gescheitert bin.
OpenVPN Konfiguration
Vorraussetzung, damit das Ganze funktioniert, ist natürlich ein funktionsfähiger OpenVPN Tunnel über den von einem OpenVPN Client aus die FRITZ!Box mit der IP 10.0.0.1 erreicht werden kann. D.h. es müssen die die korrekten Routen vom OpenVPN Server an den Client (das Handy) gepusht werden.
Um das Ganze zu verdeutlichen, zeige ich hier die Konfiguration meines OpenVPN Servers. Bitte wundert Euch nicht über den Aufbau der Konfiguration. Es handelt sich dabei um eine OpenWrt-spezische UCI Konfigurationsdatei. Die eigentlichen Parameter für OpenVPN lassen sich daraus aber trotzdem prima ableiten.
Code:
config openvpn lan_tun
option enable 1
option port 1195
option proto udp
option dev tun
option ca "/etc/openvpn/Andromeda_VPN_Root_CA.crt"
option cert "/etc/openvpn/Andromeda_VPN_Server.crt"
option key "/etc/openvpn/Andromeda_VPN_Server.pem"
option dh "/etc/openvpn/dh1024.pem"
option crl_verify "/etc/openvpn/crl.pem"
option ifconfig_pool_persist "/etc/openvpn/ipp_tun.txt"
option client_config_dir "/etc/openvpn/ccd_tun"
option keepalive "10 120"
option comp_lzo 1
option persist_key 1
option persist_tun 1
option status "/tmp/openvpn-status-tun.log"
option log_append "/tmp/openvpn-tun.log"
option verb 3
option server "192.168.179.0 255.255.255.0"
list push 'dhcp-option DOMAIN intern.wurstnetz.de'
list push 'dhcp-option DNS 192.168.178.1'
list push 'route 192.168.178.0 255.255.255.0'
list push 'route 10.0.0.0 255.255.255.0'
OpenVPN selbst läuft, wie man sehen kann, im Netz 192.168.179.0/24. Außerdem kann man erkennen, dass der OpenVPN Server zwei Routen an die Clients pusht. Zum einen für das Netz 192.168.178.0/24 (das ist das interne Netzwerk) sowie eine Route für das Netzwerk 10.0.0.0/24 (das Netzwerk zwischen TP-Link und FRITZ!Box). Damit ist die Verbindung aus dem VPN zur FRITZ!Box gewährleistet.
Nun könnte man denken
"Alles klar, wenn die Verbindung vom Handy zur FRITZ!Box funktioniert, sollte nun auch FRITZ!App Fon oder jede weitere VoIP App sich ohne Probleme mit der FRITZ!Box Verbinden können." ... Pustekuchen.
Wo das Problem genau liegt, kann ich leider nicht sagen. Entweder an OpenVPN for Android, an Android 4.4.2 selbst oder an der jeweils genutzen VoIP App.
Fakt ist, beim Verbindungsaufbau zwischen VoIP App und der FRITZ!Box sendet die jeweile App im REGISTER Befehl als SIP-Client Adresse (im Via-Header) nicht wie eigentlich gewünscht und erwartet die IP-Adresse des tun-Interfaces (also 192.168.179.x) sondern es sendet die öffentliche IP-Adresse, die das Handy über den aktuell verbundenen Zugangspunkt (WLAN, UMTS, etc.) erhalten hat.
Die Registrierung an der FRITZ!Box funktioniert zwar trotzdem, aber hat man anschließend das altbekannte Problem, dass man bei einem Anruf zwar eventuell gehört werden kann, aber selbst den Gesprächspartner nicht hört.
Letztendlich habe ich das Problem mit der App CSipSimple aus der Welt schaffen können. Hier gibt es nämlich die Option
Socket-Bindungsadresse für RTP. Setzt man diese auf die IP-Adresse, die das Handy vom OpenVPN Server zugewiesen bekommt, funktioniert die Kommunikation anschließend wieder einwandfrei.
Um diese Option festlegen zu können muss man in CSipSimple zunächst ein neues Konto hinzufügen und als Kontotyp nicht etwa FRITZ!Box sondern
Expert auswählen. Nachfolgend habe ich meine Konfigurationsoptionen aufgelistet, mit denen eine erfolgreiche Verbindung zur FRITZ!Box inkl. funktionierender Sprachkommunigation aufgebaut werden konnte:
Hinweis: Ich habe nur die von mir geänderten Optionen hier aufgelistet. Alle nicht aufgelisteten Optionen sollten also so belassen werden, wie sie per Default vorgegeben werden.
Code:
Kontoname: FRITZ!Box (VPN)
Konto ID: Telefonname <sip:[email protected]> (XXX ist dabei die Konto-ID des SIP Kontos auf der FRITZ!Box, z.B. 620)
URL Registrierung: sip:10.0.0.1 (also die IP Adresse der FRITZ!Box)
Realm: fritz.box
Benutzername: XXX (siehe Konto ID)
Passwort: supersicheres_passwort
Protokoll: UDP
Socket-Bindungsadresse
für RTP: 192.168.179.x (Die IP-Adresse, die das Handy vom OpenVPN Server zugewiesen bekommen hat)
Allow SDP NAT rewrite: [x]
Mit diesem Optionen kann ich mich über CSipSimple erfolgreich mit der FRITZ!Box verbinden sowie Telefongespräche führen. Und für den Fall, dass ich mit meinem Handy in meinem privaten WLAN eingeloggt bin, habe ich nochmal ein weiteres Konto mit dem Kontotyp
FRITZ!Box erstellt.
Ich hoffe ich konnte Euch hiermit ein wenig weiterhelfen.