Einführung

An öffentlichen Plätzen oder in Cafes gibt es oft öffentliche Hotspots. Manchmal verlangen diese eine Registrierung oder sind nur nutzbar, wenn man bezahlt. Interessant dabei ist, dass DNS-Anfragen auch ohne Anmeldung aufgelöst werden. Jetzt kann man den gesamten Traffic über DNS tunneln und so ohne Anmeldung im Internet surfen.

Voraussetzung

  • Ein DNS-Server
  • Ein Server, welcher für den Tunnel verantwortlich ist
  • Ein Client
  • Die Software OzymanDNS von Dan Kaminsky

Einrichtung DNS-Server

Auf dem DNS-Server eine Zonendelegierung angelegt:

dnstunnel.example.org.          IN      NS      ns.server2.example.org.
ns.server2.example.org.         IN      A       42.23.05.21

Die IP-Adresse 42.23.05.21 entspricht dabei dem Server, welcher für den DNS-Tunnel verantwortlich ist.

Installation der Software OzymanDNS

Auf dem Tunnel-Server und auf dem Client muss die Software OzymanDNS von Dan Kaminsky installiert werden. Als Voraussetzung für diese Software werden Perl-Bibliotheken für DNS und für die Base32/Base64 Codierung benötigt. Folgendermassen können diese über die Paketverwaltung installiert werden:

Unter Arch Linux:

sudo pacman -S perl-net-dns
yaourt -S perl-mime-base32
yaourt -S perl-mime-base64

Unter Debian:

sudo aptitude install libnet-dns-perl
sudo aptitude install libmime-base32-perl
sudo aptitude install libmime-base64-perl

Dann wird die Software heruntergeladen (Auf dem Tunnel-Server und auf dem Client):

wget http://s3.amazonaws.com/dmk/ozymandns_src_0.1.tgz

Und danach entpackt:

$ tar -xvzf ozymandns_src_0.1.tgz
aska.pl
droute.pl
geta.pl
nomde.pl
glance.c

Einrichtung Tunnel-Server

Auf dem Tunnel-Server wird die Software OzymanDNS von Dan Kaminsky gestartet.

sudo ./nomde.pl -i 0.0.0.0 dnstunnel.example.org

Verwenden des Tunnels

Der Client kann jetzt ganz einfach eine SSH-Verbindung zum Tunnel-Server herstellen. Dabei ist zu beachten, dass die Subdomain sshdns vor die Tunnel-Domäne geschrieben wird und dass man als Host den localhost angibt:

ssh -o ProxyCommand="./droute.pl sshdns.dnstunnel.example.org" username_server2@localhost

Jetzt hat man bereits eine SSH-Session auf den Tunnel-Server offen.

Verwenden des Tunnels als SOCKS-Proxy

Mit SSH kann man ganz einfach einen SOCKS-Proxy erstellen:

ssh -D 8080 -N -f -o ProxyCommand="./droute.pl sshdns.dnstunnel.example.org" username_server2@localhost

Im Webbrowser kann jetzt als SOCKS-Proxy localhost auf Port 8080 eingetragen werden.

Was wird übertragen

Mit tcpdump sieht man sehr gut, dass der gesamte Traffic über DNS TXT-Ressource-Records ausgetauscht wird:

emanuel@discordia:~
$ sudo tcpdump port domain
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:55:01.972425 IP 10.0.0.100.53055 > homeserver.duss.xy.domain: 16680+ TXT? 4744-24063.id-31410.down.sshdns.dnstunnel.example.org. (61)
19:55:01.972788 IP 10.0.0.100.45578 > homeserver.duss.xy.domain: 21284+ PTR? 10.0.0.10.in-addr.arpa. (40)
19:55:01.978312 IP homeserver.duss.xy.domain > 10.0.0.100.45578: 21284* 1/1/1 PTR homeserver.duss.xy. (98)
19:55:01.978381 IP 10.0.0.100.57785 > homeserver.duss.xy.domain: 17573+ PTR? 100.0.0.10.in-addr.arpa. (41)
19:55:01.986232 IP homeserver.duss.xy.domain > 10.0.0.100.57785: 17573 NXDomain* 0/1/0 (106)
19:55:01.989063 IP 10.0.0.100.34507 > homeserver.duss.xy.domain: 155+ TXT? 23848-14105.id-52787.down.sshdns.dnstunnel.example.org. (62)
19:55:02.113795 IP homeserver.duss.xy.domain > 10.0.0.100.53055: 16680 1/1/0 TXT `` `` (96)
19:55:02.127387 IP homeserver.duss.xy.domain > 10.0.0.100.34507: 155 1/1/0 TXT `` `` (97)
19:55:04.686581 IP 10.0.0.100.39743 > homeserver.duss.xy.domain: 27552+ TXT? 4744-46997.id-31410.down.sshdns.dnstunnel.example.org. (61)
19:55:04.823762 IP homeserver.duss.xy.domain > 10.0.0.100.39743: 27552 1/1/0 TXT `` `` (96)
19:55:06.005887 IP 10.0.0.100.37415 > homeserver.duss.xy.domain: 64196+ TXT? 23848-57440.id-52787.down.sshdns.dnstunnel.example.org. (62)
19:55:06.183955 IP homeserver.duss.xy.domain > 10.0.0.100.37415: 64196 1/1/0 TXT `` `` (97)
19:55:08.019211 IP homeserver.duss.xy.domain > 10.0.0.100.37457: 55047 1/13/0 A 174.143.142.58 (271)
19:55:08.043757 IP homeserver.duss.xy.domain > 10.0.0.100.37457: 61460 0/1/0 (94)
19:55:08.701239 IP 10.0.0.100.51678 > homeserver.duss.xy.domain: 27523+ TXT? 4744-698.id-31410.down.sshdns.dnstunnel.example.org. (59)
19:55:08.840241 IP homeserver.duss.xy.domain > 10.0.0.100.51678: 27523 1/1/0 TXT `` `` (94)
19:55:10.021281 IP 10.0.0.100.48429 > homeserver.duss.xy.domain: 48196+ TXT? 23848-40142.id-52787.down.sshdns.dnstunnel.example.org. (62)
19:55:10.161332 IP homeserver.duss.xy.domain > 10.0.0.100.48429: 48196 1/1/0 TXT `` `` (97)
19:55:12.717222 IP 10.0.0.100.36828 > homeserver.duss.xy.domain: 35283+ TXT? 4744-24488.id-31410.down.sshdns.dnstunnel.example.org. (61)
19:55:12.856288 IP homeserver.duss.xy.domain > 10.0.0.100.36828: 35283 1/1/0 TXT `` `` (96)
19:55:14.036261 IP 10.0.0.100.46071 > homeserver.duss.xy.domain: 6736+ TXT? 23848-52187.id-52787.down.sshdns.dnstunnel.example.org. (62)
19:55:14.174095 IP homeserver.duss.xy.domain > 10.0.0.100.46071: 6736 1/1/0 TXT `` `` (97)
19:55:16.734383 IP 10.0.0.100.52763 > homeserver.duss.xy.domain: 26146+ TXT? 4744-8838.id-31410.down.sshdns.dnstunnel.example.org. (60)
19:55:18.052329 IP 10.0.0.100.58725 > homeserver.duss.xy.domain: 17293+ TXT? 23848-45884.id-52787.down.sshdns.dnstunnel.example.org. (62)
19:55:18.195326 IP homeserver.duss.xy.domain > 10.0.0.100.58725: 17293 1/1/0 TXT `` `` (97)
19:55:18.752778 IP 10.0.0.100.57793 > homeserver.duss.xy.domain: 27305+ TXT? 4744-2538.id-31410.down.sshdns.dnstunnel.example.org. (60)
19:55:18.891504 IP homeserver.duss.xy.domain > 10.0.0.100.57793: 27305 1/1/0 TXT `` `` (95)
19:55:22.069854 IP 10.0.0.100.52682 > homeserver.duss.xy.domain: 45231+ TXT? 23848-21518.id-52787.down.sshdns.dnstunnel.example.org. (62)
19:55:22.208718 IP homeserver.duss.xy.domain > 10.0.0.100.52682: 45231 1/1/0 TXT `` `` (97)
19:55:22.767600 IP 10.0.0.100.43772 > homeserver.duss.xy.domain: 56593+ TXT? 4744-12830.id-31410.down.sshdns.dnstunnel.example.org. (61)
19:55:22.964026 IP homeserver.duss.xy.domain > 10.0.0.100.43772: 56593 1/1/0 TXT `` `` (96)
19:55:26.085406 IP 10.0.0.100.57741 > homeserver.duss.xy.domain: 39143+ TXT? 23848-26195.id-52787.down.sshdns.dnstunnel.example.org. (62)
19:55:26.225206 IP homeserver.duss.xy.domain > 10.0.0.100.57741: 39143 1/1/0 TXT `` `` (97)
19:55:26.786028 IP 10.0.0.100.57263 > homeserver.duss.xy.domain: 18543+ TXT? 4744-39657.id-31410.down.sshdns.dnstunnel.example.org. (61)
19:55:26.931594 IP homeserver.duss.xy.domain > 10.0.0.100.57263: 18543 1/1/0 TXT `` `` (96)

Weitere Tipps und Tricks

  • Zum schnellen Umschalten der Proxy-Einstellungen eignet sich das Firefox-Plugin FoxyProxy
  • Da die Verbindung nicht sehr schnell ist, kann man mit dem Firefox-Plugin User Agent Switcher den User Agent auf z. B. iPhone ändern, was die Auswirkung hat, dass oft eine mobile Version der Seite geladen wird.
  • Mit ssh -C kann man die Verbindung komprimieren und somit den zu übertragenen Traffic verkleinern
  • Mit der Software tsocks kann man jedes Programm mit einem vorgegebenen Proxy starten