08. Aug 2015 12:08
5 Kommentare

Eigener SmartDNS mit HAproxy und DNSmasq

HaProxy und DNSmasq mit Netflix und Zattoo
HaProxy und DNSmasq mit Netflix und Zattoo
Bereits in meinem Artikel "Chromecast mit Zattoo und Unblock-Us" habe ich darüber geschrieben, wie man sog. "SmartDNS" Dienste mit OpenWrt Routern anbindet. In diesem Artikel möchte ich mich einmal damit beschäftigen, wie man einen solchen Dienst auf dem eigenen Server konfiguriert und einrichtet. Der Dienst soll es ermöglichen, dass ich nicht meinen OpenVPN Zugang verwenden muss um auf Netflix und Zattoo in der Schweiz zugreifen zu können. Das Basis-Setup meines Servers habe ich bereits im Artikel "Ubuntu OpenVPN Server konfigurieren" beschrieben.

Was ist SmartDNS und wozu braucht man es?

Als SmartDNS bezeichnet man Dienste wie Unblock Us, Unotelly oder Tunlr. Sie bieten einen eigenen DNS-Server, der bestimmte Domains auf einen sog. Reverse-Proxy umleitet, der diese Inhalte dann abruft. Das führt dazu, dass durch den Abruf des Reverse-Proxy auch dessen IP Adresse genutzt wird. Da sich der Reverse-Proxy in einem anderen Zielland befindet, kann man somit auch Inhalte abrufen, die im eigenen Land gesperrt sind. Wohnt man also nicht in der EU, möchte aber Zattoo und Netflix nutzen, dann wird dies durch das Umleiten über den Reverse-Proxy Server möglich. Der nachfolgende Screenshot zeigt wie Zattoo, Netflix sowie wieistmeineip.de den eigenen Standort in der Schweiz ermitteln, während die Website meine-aktuelle-ip.de den korrekten Standort "Katar" anzeigt. Letztere wird nicht über den Reverse-Proxy geladen, die ersten drei schon.

SmartDNS mit HAproxy und DNSmasq

Vor- und Nachtteile von SmartDNS gegenüber VPN

VPN Verbindungen senden grundsätzlich absolut alle Netzwerkdaten über die verschlüsselte VPN Verbindung. Man kann zwar auch hier selektiv vorgehen, wie ich in meinem Artikel zu gleichzeitigen VPN Verbindungen beschrieben habe, man muss dafür jedoch IP Adresse für IP Adresse durchgehen. Die Vorteile für Video-Streaming über Reverse-Proxy mit SmartDNS im Vergleich zu VPN sind die Folgenden.

  • Schneller als VPN, weil keine zusätzlichen Daten übertragen werden
  • Weniger CPU-Leistung nötig, da nicht verschlüsselt wird
  • Keine Zusatzsoftware auf dem Router notwendig
  • Wird seltener von Firewalls und Packet Inspection blockiert

Der Hauptvorteil gegenüber VPN ist Geschwindigkeit. Eine Verbindung über Reverse-Proxy ist einfach bedeutend schneller und kann größere Datenmengen transportieren, da keine zusätzlichen VPN Kopfdaten übertragen werden müssen. Verwendet man keinen Chromecast oder andere eingeschränkte Geräte, dann funktioniert dies auch mit normalen Routern aus dem Hausgebrauch ohne angepasste Systeme wie OpenWrt. Den enormen Geschwindigkeitsvorteil bezahlt man jedoch auch mit den folgenden Nachteilen.

  • Aufwendigere Konfiguration erfordert Firewall-, Proxy- und DNS-Konfiguration
  • Höherer Wartungsaufwand, da Domains gepflegt werden müssen
  • Geringere Sicherheit, denn Daten werden meistens unverschlüsselt übertragen

Man sollte sich nach Abwägung der Vor- und Nachteile entscheiden, welche Technik man einsetzen möchte. In vielen Fällen empfiehlt es sich häufig sowohl VPN als auch SmartDNS mit Reverse-Proxy einzusetzen. Dies ist auch bei mir der Fall, da ich in einem Land lebe in dem es zwar akzeptable Internetanbindungen mit bis zu 100 Mbit/s gibt, jedoch kaum bis gar keine Dienste und Anbieter. Hier setze ich für das Netflix-Video und Zattoo TV-Streaming SmartDNS ein und für IP-Telefondienste Asterisk über OpenVPN sowie ebenfalls Online-Banking und einige andere sensible Dienste.

119,00 €
Jetzt bestellen »
Linksys WRT1200AC-EU Wireless AC1200 Open Source Router (1200Mbit/s, Dual Band, 4 Gigabit Ethernet Ports, 1x USB 3.0, Smart WiFi app), schwarz
Gewöhnlich versandfertig in 24 Stunden

Installation der benötigten SmartDNS-Systeme und -Dienste

Zur Installation benötigen wir zunächst natürlich einen Server am gewünschten Standort. Bei mir ist das ein Server in Zürich. Man kann natürlich auch einen in den USA, Großbritannien oder Österreich nehmen, je nach dem welche Dienste man verwenden möchte. Auf diesem Server benötigen wir die Software HAproxy für den Reverse-Proxy und DNSmasq für den DNS Server. In dieser Anleitung verwende ich als Betriebssystem auf dem Server Ubuntu 14.04. 

DNSmasq installieren und konfigurieren

Der DNS Server DNSmasq findet sich bei Ubuntu bereits im Repository und kann daher mit folgendem Befehl ganz einfach direkt installiert werden.

Die Konfiguration von DNSmasq findet sich im Pfad "/etc/dnsmasq.conf" und ist relativ einfach gehalten. Dort werden alle Domains eingetragen, die wir auf unseren Reverse-Proxy umleiten wollen. Für Zattoo und Netflix habe ich am Ende der Datei folgende DNS Adressinformationen eingetragen.

Hierbei muss man selbstverständlich die IP-Adresse "192.168.1.1" mit der IP Adresse des Servers ersetzen, den man verwendet. Eine DNS Abfrage des DNSmasq Servers mit folgendem Befehl löst dann auch entsprechend die Domain zur angegebenen IP Adresse auf.

Das funktioniert bisher natürlich nur auf dem Server und auch nur von dort, da wir die Firewallfreigabe für den DNS Server ja noch nicht eingerichtet haben. Das machen wir jetzt im folgenden Schritt mit dem nachfolgenden Befehl.

Jetzt kann, sofern der Server öffentlich im Internet erreichbar ist, jeder über DNS Hostnamen vom Server erfragen. Das ist grundlegend kein Problem. Wer das nicht möchte, beschränkt den Zugriff auf seine eigene IP Adresse. Wie das geht findet man in der Dokumentation der Ubuntu Firewall. Die Installation und Konfiguration von DNSmasq ist hiermit abgeschlossen.

Installation und Konfiguration von HAproxy

Das Konfigurieren von HAproxy gestaltet sich etwas komplizierter und ist auch aufgrund der vielen zu verwendenen Domains etwas aufwendig. Das geht zuerst damit los, dass Ubuntu 14.04 nur HAproxy Version 1.4 an Bord hat, für diesen Anwendungszweck jedoch Version 1.5 benötigt wird. Hierzu müssen wir erst ein neues Repository hinzufügen und die aktuellere HAproxy Version installieren, was mit den nachfolgenden Befehlen schnell erledigt ist.

Nachfolgend legen wir die Konfigurationsdatei an. Die wird mit der Zeit extrem klobig, da HAproxy eigentlich ein Load Balancer ist und wir sämtliche Zielsysteme definieren müssen sowohl für HTTP als auch HTTPS. Die IP Adresse "192.168.1.1" muss auch hier wieder mit der des eigenen Systems ersetzt werden. Als Beispiel habe ich Zattoo und Netflix entfernt und der Leserlichkeit halber als Beispiel nur www.wieistmeineip.de angelegt.

Wer natürlich mein vollständiges Konfigurationsbeispiel sehen möchte, kann es hier herunterladen: HAproxy Konfiguration für Netflix und Zattoo. Anhand der Größe der Datei kann man sehen, was für ein Mordsaufwand es ist diese zu pflegen. Per Hand dauert das Stunden oder Tage. Ich habe hierfür ein kleines PHP Skript geschrieben, welches ich weiter unten noch erläutern werde. Anschließend müssen wir nun auch noch HAproxy in die Firewall-Regeln eintragen, damit der Zugriff klappt.

Hierbei muss natürlich die IP-Adresse "1.2.3.4" mit der eigenen öffentlichen IP-Adresse ersetzt werden. Hat man eine sich regelmäßig ändernde IP Adresse, so muss diese auch regelmäßig geändert werden. Einen Zugriff für alle Nutzer aus dem Internet auf den eigenen Reverse-Proxy empfiehlt sich in keinem Fall. Fremde Nutzer könnten die eigene IP-Adresse bei Netflix oder Zattoo missbrauchen oder einfach den Dienst unbezahlt nutzen und somit die Bandbreite massiv negativ beeinflussen. Weiter unten beschreibe ich auch, wie man die IP Adresse automatisch aktualisieren kann.

HAproxy Konfiguration per Skript erzeugen

Wie vorher erwähnt, ist das Erzeugen der Konfiguration für HAproxy aufgrund der Vielzahl der Einträge extrem mühsam. Deshalb empfiehlt es sich hierfür ein Skript einzusetzen. Mein PHP Skript sieht wie folgt aus.

Man beachte, dass in diesem Skript entsprechend die IP Adresse 1.2.3.4 mit der Adresse des Servers ausgetauscht werden muss. Zusätzlich muss im gleichen Pfad dann auch die Liste der Domains liegen und Zeile für Zeile die Domainnamen beinhalten. Der Dateiname im Skript ist hier "domainlist.txt" und nachfolgend ein paar Ausschnitte als Beispiel:

Das Ausführen des Skripts gibt nun die neue Konfiguration für HAproxy aus. Man sollte diese natürlich vor dem Einsetzen in HAproxy kontrollieren. Zudem erlaubt HAproxy nur die Verwendung von Servern dessen Hostname sich über DNS auch zu einer IP Adresse auflösen lässt. Es geht also nicht, wild irgendwelche Server einzutragen.

Firewall-Regeln automatisch per Skript aktualisieren

Ich habe bei mir dynamischen DNS auf dem Router eingerichtet, sodass mein Netzwerk zu Hause zwar eine dynamische IP-Adresse hat, jedoch über einen statischen Hostnamen verfügt (z.B. "beimirzuhause.dyndns.org"). Informationen hierzu findet man auf DynDNS.org sowie im Handbuch des eigenen Routers. Folgendes Skript läuft jeden Stunde auf meinem Server.

Hierzu muss im Skript der Hostname entsprechend an den eigenen Hostnamen angepasst werden. Wer das ganze etwas dynamischer haben möchte oder mehrere Quellsysteme verwendet, muss es entsprechend anpassen. Mit "crontab -e" habe ich meine Cron-Konfiguration für zeitlich geplante Anwendungen bearbeitet und folgende Zeile hinzugefügt.

Die Sicherheitskonfiguration muss man sich hier gut überlegen und an den eigenen Anwendungsfall anpassen. Ich nutze meinen Proxy und den DNS nur aus meinem Heimnetzwerk heraus. Die mobile Nutzung kann sich bedeutend schwieriger gestalten, insbesondere mit Smartphone in Mobilfunknetzen. Ich nutze für den Streaming-Zugriff über Mobiltelefon OpenVPN und für zu Hause mit den Chromecast und allen anderen Geräten im WLAN die hier beschriebene Proxykonfiguration.

Quellsysteme für DNSmasq und HAproxy konfigurieren

Das Konfigurieren der Quellsysteme gestaltet sich abschließend relativ einfach. Es muss lediglich der DNS-Server auf die IP Adresse des eigenen Servers konfiguriert werden. Es empfiehlt sich für die Nutzung von Chromecast und anderen Geräten im Netzwerk dies direkt auf dem Router durchzuführen.  Eine ausführliche Anleitung dazu habe ich in meinem Artikel "Chromecast mit Zattoo und Unblock Us" beschrieben. Die IP-Adresse von Unblock-Us muss hier lediglich mit der des eigenen DNS Servers ersetzt werden. 

Obige Konfiguration ist der Eintrag für "eth0.2" in der OpenWrt Konfigurationsdatei "/etc/config/network". Der beispielhafte DNS-Server "1.2.3.4" muss hier natürlich mit der IP Adresse des eigenen Servers ersetzt werden. Ansonsten sollte man die Dokumentation des eigenen Routers konsultieren.

24,90 €
Jetzt bestellen »
Galileo Computing: Computer-Netzwerke: Grundlagen, Funktionsweise, Anwendung
Versandfertig in 1 - 2 Werktagen

Fazit zu SmartDNS mit HAproxy und DNSmasq

Die Serverkonfiguration gestaltet sich recht aufwendig, was auch den mangelnden Sicherheitsfunktionen in HAproxy geschuldet ist. Hier muss jedoch erwähnt werden, dass HAproxy für diesen Anwendungsfall ursprünglich nicht vorgesehen wurde. Die Leistung dieser Lösung ist hervorragend und ermöglicht maximale Bandbreite. Die Beschränkung durch die CPU des Quellsystems, in meinem Fall der Router mit 700 Mhz, entfällt gegenüber OpenVPN fast vollständig. Die Lösung schließt OpenVPN zudem nicht aus, sondern kann parallel dazu betrieben werden. Erheblicher Nachteil des hohen Konfigurationsaufwands ist, dass man gut mit Netzwerktechniken inklusive den Protokollen HTTP, SSL, TCP/IP und DNS vertraut sein muss. Gute Linux-Kenntnisse sind zudem ebenfalls zwingende Voraussetzung. Wer dies nicht mitbringt, sollte erheblich mehr Zeit für die Konfiguration einplanen und sich die notwendige Lektüre besorgen. Ansonsten kann ich die Lösung nur jedem empfehlen.

Bücher zum Thema „Linux“

Die nachfolgenden Bücher behandeln das Thema "Linux" und werden von Amazon empfohlen. Viele dieser Bücher habe ich selbst gelesen und teilweise auch zur Recherche für diesen Artikel genutzt.
49,90 €
Jetzt bestellen »
Linux: Das umfassende Handbuch. 20 Jahre »Kofler« ― Das Standardwerk für Einsteiger und fortgeschrittene Anwender. Über 1.400 Seiten Linux-Wissen pur
Michael Kofler, Rheinwerk Computing
2,50 €
Jetzt bestellen »
Linux Befehlsreferenz kompakt: Thematisches Shellkommando-Verzeichnis
Klaus Utech, Books on Demand
19,90 €
Jetzt bestellen »
Linux Kommandoreferenz: Shell-Befehle von A bis Z
Michael Kofler, Rheinwerk Computing
49,90 €
Jetzt bestellen »
Linux-Server: Das umfassende Handbuch. Backup, Sicherheit, Samba 4, Kerberos-Authentifizierung, IPv6 u. v. m.
Dirk Deimeke, Rheinwerk Computing

Diese Artikel könnten Dich auch interessieren

Besucher, die diesen Beitrag gelesen haben, haben sich auch die unten aufgeführten Beiträge angesehen. Schau' doch einfach mal in die Artikel rein.
11 Besucher haben auch das gelesen
8 Besucher haben auch das gelesen
8 Besucher haben auch das gelesen
5 Besucher haben auch das gelesen
4 Besucher haben auch das gelesen
4 Besucher haben auch das gelesen

Kommentare zum Thema „Eigener SmartDNS mit HAproxy und DNSmasq“

Wenn Du möchtest, kannst Du hier Kommentare zum Thema hinterlassen und Dich mit anderen Nutzern austauschen. Damit Du kommentieren kannst, musst Du Dich nur anmelden und schon kann es losgehen.
10.01.2016 15:00
Klasse Artikel. Eine Frage an der Stelle. Wie finde ich den ein oder anderen Server noch raus ? Suche noch eine Möglichkeit Maxdome ans laufen zu bekommen. Klar maxdome.de habe ich bereits eingetragen. Klappt auch im Browser, jedoch nicht mit dem iPad / Apple TV ...
10.01.2016 15:07
Hallo Sascha, am Ehesten findest Du die Server, wenn Du tcpdump und Wireshark benutzt. Du findest hier zum Thema WLAN Daten abhören auch einen Artikel.
10.01.2016 17:08
Hallo Jan, ich habe es über syslog und dann die DNS Abfragen versucht, leider komme ich damit nicht weiter. Ich werd mir das mit Wireshark bzw tcpdump mal ansehen. Danke für den Tip. Versuche nun mal mein Glück. Wobei es schon ne Menge an Daten ist, die hier hin und her gehen.
10.01.2016 17:41
es ist api.maxdome.de :-) Danke
13.12.2016 22:44
sehr coole sache, leider habe ich noch 2 sachen:1) wenn ich per: netstat -pte |grep "" | grep " $(whoami) " überprüfe bekomme ich als ausgabe:tcp 0 0 xxxxxxx:https xxx.xxx.xxx.xxx:44493 TIME_WAIT root 0 tcp 0 1 xxxxxxx:http xxx.xxx.xxx.xxx:35860 FIN_WAIT1 root 0müsste ich nicht ESTABLISHED irgendwann mal bekommen?und das 2te bin mir nicht ganz sicher ob ich übers handy alle streaming pakete über dem proxy laufen, und ich habe darstellung fehlern über dem pc, bzw die sind so drastisch das ich mich nicht mal einloggen kann.
Jetzt zum Kommentieren anmelden