ChromeCast und Netflix – Finales Setup

s5-productheroWie bereits beschrieben ist ein Google Chromecasthalblegal aus US of A bezogen in Deutschland derzeit recht sinnfrei. Man kann Filme vom GooglePlay streamen, Youtube und ein wenig Musik hören. Yeah!

Es gäbe auch die Möglichkeit, Netflix am großen Screen zu schauen, wenn man denn in einem Land wohnen würde, wo der Service angeboten wird. Die Wege sich das zu erschleichen sind bekannt. Wenn man es schafft, mit einem Linux auf dem Router den ChromeCast über die DNS-Server von Unlocator, Tunlr oder Unblock-US laufen zu lassen, funktioniert das auch weitgehend fein. Allerdings ist es so, dass man für einen halbwegs schnellen DNS-Service Geld zahlen muss, Unlocator und Tunlr sind kostenfrei im Moment, aber auch nicht sehr schnell. Dazu kommt, man übermittelt jede DNS-Anfrage an einem zweifelhaften Anbieter, der ohne weiteres auch “meinebank.de” per DNS auf einen ganz anderen Server biegen könnte. Leicht fader Beigeschmack, nur weil man ein wenig TV schauen will. Durch Kommentare und weitere Experimente am alten Beitrag ist nun ein finales Setup gelungen, welches so wenig wie möglich Risiken birgt und trotzdem die gewünschte Lösung bereit hält. Es gibt keine lästigen Fehler 16001 oder 16003 in der Netflix App auf dem Chromecast und man sendet nicht mehr als nötig Anfragen über die DNS-Server von Unlocator. Man braucht einen ChromeCast und einen Router der IPTables und DNSmasq laufen hat. Das sollte auf fast alle Router mit DD-WRT, OpenWRT oder OpenLinkSys-Varianten zutreffen. Die OEM-Firmware von Asus kann es wohl auch.

Zuerst braucht man die Netflix-App. Die kann man in Deutschland nicht aus dem PlayStore beziehen. Ein Blick in Google hilft, oder bei XDA-Developer vorbei schauen. Da gibt es einen Thread, der allerlei solche Apps enthält. Man kann sich da die Netflix APK runter laden, die aktuellen Versionen sind da schnell vorhanden. So muss man dann auch Updates machen, der PlayStore tut das nicht allein.

Hat man die App, braucht man einen Account bei zum Beispiel Unlocator. Im Moment kostenlos, da Beta-Phase. Man meldet sich da an, nachher kann man für die eigene IP die Netflix-Region einstellen und so Dinge. Optionen dazu wären Tunlr.net oder der kostenpflichtige Unblock-US. Das Prinzip ist das gleiche. Man meldet sich an, man bekommt die Auswahl der Netflix-Region und vor allem bekommt man 2 bis 3 DNS-Server-IP-Adressen. Diese braucht man im nächsten Schritt.

Die Setup-Guides der DNS-Anbieter gehen immer davon aus, dass man sein ganzes Netzwerk oder genau ein Gerät über den Service laufen lassen will. Am besten wäre es ja, nur was nötig ist über den DNS-Tunnel laufen zu lassen. Wir lassen also die DNS-Settings des Router unverändert. Generell sollen alle DNS-Requests weiter über vertrauenwürdige Server laufen, oder spezielle Angebote wie OpenDNS oder Google oder was auch immer. Die normalen vom Netzwerk-Betreiber sind keine so schlechte Idee. Das Beispiel-Bild zeigt TomatoUSB auf dem AC66U, die Dialoge sollten sonst ähnlich ausschauen. Zur Not kann man sich per ssh oder telnet am Router anmelden und dort die Konfig bearbeiten. Im Falle von TomatoUSB ist diese im /etc/dnsmasq.conf zu finden. Es gehören unten die Zeilen dran:

dnsmasq

Kleine, aber feine zusätzliche Zeile zu sehen, man kann da mit DNSMasq direkt auch Namen auf lokale Adresse biegen. In dem Falle der externe Name des NAS. Sonst würde dessen Traffic “außen” über die IP gehen. Und so wird im lokalen Netz auch über das lokale Netz übertragen, trägt man den Laptop oder das Tablet aber weg, funktioniert alles normal über die externe Adresse vom NAS. Wichtig sind hier “strict-order” und die 3 Zeilen. Da wird für *.netflix.com und *.hulu.com und auch *.unlocator.com der DNS-Server von Unlocator benutzt. Die Liste der Domains lässt sich beliebig erweitern um jeden benötigten Dienst, den man auf diese Weise nutzen will.

Laut Beschreibung ist die Option “Intercept DNS port (UDP 53)” genau das, was jetzt kommt. Es hat aber nicht jeder TomatoUSB/OpenLinkSys Firmware, leider. Die resultierende Zeile in der IPTables-Konfig schaut dann so aus:

iptables -I PREROUTING -s 192.168.100.0/255.255.255.0 -d ! 192.168.100.0/255.255.255.0 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.100.1

Das kommt mir glatt so vor, als wäre es die einfache Lösung für den folgenden, vergleichsweise komplizierten Teil. Nun gut. Wäre zu testen. Es geht nun darum, den (oder die) ChromeCast-Sticks auf eine fixe IP zu bringen und deren kompletten DNS-Traffic auf die Server des DNS-Anbieters zu biegen. Im Beispiel hat der Chromecast die IP 192.168.100.124 fest zugewiesen bekommen (der andere die 192.168.100.110). Es muss nun eine Zeile in die IPTables-Konfig die folgend aussieht:

iptables -I PREROUTING -t nat -p udp -s 192.168.100.124 --dport 53 -j DNAT --to-destination 50.112.143.40

Im TomatoUSB kann man solche Scripte in der Admin-GUI eingeben. Diese Regeln kann man sich auch im DD-WRT definieren, wenn nichts hilft, dann platziert man eben ein Script per SSH oder Telnet im Router. Wie dem auch sei, diese Zeile löst das Problem, dass die Netflix-App am ChromeCast den Fehler 16001 oder 16003 zeigt und meint, Timeout beim Verbinden zum Device zu haben.

iptables

Das Bild zeigt 2 Zeilen, weil es 2 ChromeCast’s gibt. Funktioniert genau so seit geraumer Zeit. Das Resultat ist nun, dass nur DNS vom ChromeCast und von allen Clienten für selektierte Dienste über unlocator laufen. Keine anderen DNS-Abfragen. Das liefert was es soll, es läuft Netflix und verschlechtert nicht die genrelle Performance des eigenen Netzes durch relativ langsame DNS-Server und beeinträchtigt nicht die Sicherheit des Netzes, weil DNS-Abfragen generell über einen fremden DNS-Server laufen.

Die erste Zeile die aus dem Häckchen “Intercept DNS Port 53” resultierte, leitet einfach allen DNS-Traffic an den Router. Dort übernimmt DNSMasq die Verteilung. Sollte auch funktionieren. Hat aber auch weitere Effekte. Vorteil wäre, man kann Webseiten blockieren mit OpenDNS zum Beispiel und das Kind kann das nicht umgehen, indem es sich eigene DNS einträgt. Dafür wird aber auch DNS-Traffic umgeleitet, der zum Beispiel in ein VPN gehen sollte.

  • Pingback: ChromeCast und Netflix | Thoms Blog()

  • Stefan

    Tolle Anleitung. Ich nutze die dnsmasq Methode mit Interception. Kann ich nun irgendwie herausfinden, ob mein Router wirklich nur die unlocator DNS bei Aufrufen von netflix.com verwendet und nicht bei anderen Websites?

    • Hi! Also wenn Du DNSMASQ *und* das Häkchen bei Intercept gemacht hast, dann werden ALLE DNS Requests von allen Hosts über unlocator geleitet.
      Deshalb hab ich diese Einstellung nicht gemacht, nur die Umleitung für die 2 festen IPs der 2 Chromecasts. Es wäre so, entweder Intercept *oder* die manuelle Zeile pro Chomecast. Dazu die Einträge im Textfeld für die Domains. Rausfinden kannst das nicht wirklich. Weil es ja transparent passiert.

  • Tezla

    Besteht irgendwie die Möglichkeit, diese Einstellungen bei einer Fritzbox 7360 zu machen?

  • Pingback: Netflix und andere mit Unblock-US | Thoms Blog()

  • Pingback: Netflix in Deutschland, die Kataloge | Thoms Blog()

  • Jan

    Hier mein Tutorial, wie man sich seinen eigenen Unlocator baut:
    http://www.kammerath.net/eigener-smartdns-haproxy-dnsmasq.html