Blog-Seite

Jeder Beitrag auf dieser Blogseite soll den Umgang mit dem Domain Name Service vereinfachen.

alle Artikel
3 min Lesezeit

Die Idee hinter der Nutzung eines Tunnels auf Basis von DNS ist es, den gesamten ausgehenden Datenverkehr vor anderen zu verstecken. Dies bedeutet, den von Menschen lesbare Hostnamen in numerische IP-Adressen durch DNS zu übersetzen und auch umgekehrt.

Normalerweise werden solche Einträge auf dem Name-Server des Providers gespeichert und man selbst hat keine Kontrolle darüber. Um dieses Vorgehen zu unterbinden, werden alle Anfragen an eine bestimmte Subdomain an einen selbst betriebenen Name-Server delegiert.

Technische Umsetzung

Um alle Anfragen an sub.example.com an ns.anothernameserver.com zu delegieren, müssen zunächst alle DNS-Anfragen an diesen Name-Server delegiert und verknüpft werden.

sub.example.com.              IN NS ns.anothernameserver.com.
ns.anothernameserver.com.     IN A 192.0.1.1

Insofern der neue Name-Server hinter einer dynamischen IP-Adresse betrieben werden sollte, kann die Delegation auch mittels einem CNAME-Eintrag realisiert werden. Der CNAME ist ein kanonischer Name.

sub.example.com. IN NS ns.extern.example.com.
ns.extern.example.com. IN CNAME foo.bar.dyndns.org.

Der Fake-Server 

Der Fake-Server, um den gesamten Datenverkehr zu tunneln, ist ein kleines Programm namens OzymanDNS, das von Dan Kaminsky in Perl (Client und Server zusammen 642 SLOC) geschrieben wurde. Das Tool selbst ist in vier Dateien aufgeteilt, von denen zwei Dateien ein Tool zum Hoch- und Herunterladen von Dateien unter Verwendung von DNS sind. Das Skript nomde.pl ist der Name-Server selbst. Da sich der Name-Server an Port 53 UDP bindet, muss dieser Service via dem Benutzer root gestartet werden. Zusätzlich sollte sichergestellt sein,  dass Port 53 UDP aus dem Internet erreichbar ist. Normalerweise wird der Name-Server wie folgt gestartet:

 sudo ./nomde.pl -i 0.0.0.0 server.example.com 

Dies bedeutet der Name-Server hört nur auf DNS-Anfragen für alle Subdomänen von server.example.com.

Der Client

Der OzymanDNS-Client ist lediglich ein Perl-Skript, das alles, was es auf STDIN empfängt, kodiert und über DNS-Anfragen an sein Ziel weiterleitet. Die Antworten werden auf STDOUT geschrieben.

Als eigenständiges Programm ist das Perl-Skript nicht besonders nützlich. Jedoch wurde das Skript für die Verwendung zusammen mit SSH entwickelt. Im Zusammenspiel mit SSH verfügt das Skript über die Konfigurationsoption "ProxyCommand" zum Tunneln des SSH-Verkehrs . Der Befehl, um eine Verbindung zum Fake-Server herzustellen, würde wie folgt aussehen:

 ssh -o ProxyCommand="./droute.pl sshdns.server.example.com" user@localhost