iodine – IPv4 über DNS tunneln

Ich habe schon öfter über Dinge geschrieben die unterwegs nützlich sind um Zugriff aufs Internet zu bekommen. Ein Tool habe ich bereits seit langem installiert, jedoch jetzt kürzlich das erste Mal praktisch genutzt: iodine.

Zugiodine ermöglicht es einem IPv4 Traffic über DNS zu tunneln. Das ist immer dann praktisch wenn der Internetzugriff per Firewall gesperrt, DNS aber erlaubt ist.

Die Hürden für ein iodine Setup sind erst einmal groß. Um den Server zu installieren bedarf es nicht nur eines entsprechenden Hosts auf dem das Paket installiert werden kann, sondern man muss auch in seinem DNS Einstellungen machen können. Bei mir funktioniert das folgende Setup:

Auf dem gewünschten Server habe ich das iodine Paket aus den Paketquellen installiert:

aptitude install iodine

Anschließend habe ich in der Konfigurationsdatei /etc/default/iodine die folgenden Einstellungen hinterlegt:

START_IODINED="true"
IODINED_ARGS="10.9.0.123 iodine.example.net -c"
IODINED_PASSWORD="MYSECRETPASSWORD"

Nun zum DNS. Dort benötigt man zwei Einträge. Angenommen der Host auf dem iodine installiert ist hat die IP 1.2.3.4, dann bekommt dieser zuerst einen ganz normalen IN A Eintrag. host.example.net zeigt auf 1.2.3.4. Das  ist nichts besonderes sondern so einen Eintrag setzt man ja eigentlich immer.

IN A

Der zweite Eintrag ist nun der abweichende. Wie in den IODINED_ARGS angegeben benötigen wir den DNS-Eintrag iodine.example.net. Dieser bekommt aber keinen IN A Eintrag, sondern als Nameserver den host.example.net eingetragen.

IN NS

Wenn der Server eingerichtet ist, kann man sich an den Client machen. Ich nutze den Network-Manager und dafür gibt es ein praktisches Plugin. Auf dem Client:

aptitude install network-manager-iodine-gnome

Anschließend kann man den nm-connection-editor starten und dort eine neue Verbindung vom Typ VPN – Iodine VPN Tunnel  hinzufügen. Als Verbindungsname wählt man das was man will, als Toplevel Domain trägt man iodine.example.net ein, und das auf dem Server unter IODINED_PASSWORD gesetzte Passwort speichert man auch optional ab. Fertig.

Schnell ist die Anbindung nicht, das ist technisch bedingt, aber sie ist stabil, selbst wenn man von dem Hotspot alle X Minuten per DHCP eine neue IP bekommt bricht der Tunnel nicht ab. Klasse!

Command Line, SSH and webproxy

Ich hatte ja gerade erst darueber geschrieben wie man apt hinter einem proxy benutzen kann, hier noch 2-3 Kleinigkeiten hinzugefuegt.

Als erstes ist es gut, auch die env variable http_proxy=““ zu setzen, damit Programme wie w3m funktionieren:

export http_proxy="http://1.2.3.4:8080"

als zweites ist es natuerlich interessant auch per SSH rauszukommen. Zum Glueck gibt es dafuer in den Ubuntu repositories

aptitude install corkscrew

einem „tunnel TCP connections through HTTP proxies“ Programm. Dafuer die folgenden beiden Zeilen in die ~/.ssh/config hinzufuegen

Host *
ProxyCommand /usr/bin/corkscrew 1.2.3.4 8080 %h %p

wenn es eine Fehlermeldung geben sollte wie:

Proxy could not open connnection to example.net: Proxy Error ( The
  specified Secure Sockets Layer (SSL) port is not allowed. ISA Server
  is not configured to allow SSL requests from this port. Most Web
  browsers use port 443 for SSL requests.  )

einfach mal den SSH-Server auch auf Port 443 lauschen lassen (echo „Port 443 >> /etc/ssh/sshd_config; /etc/init.d/sshd restart) und dann auf dem Port verbinden.

Howto: SSH reverse tunnel

Eine SSH Verbindung von Computer A zu Computer B aufbauen ist absolut nichts besonderes. Ein nettes Feature ist es jedoch, eine SSH Verbindung rueckwaerts zu nutzen (reverse tunnel). Dieses ist besonders dann hilfreich, wenn der gewuenschte Server in einem VPN oder hinter einer Firewall liegt. Dafuer auf Server A einen screen starten und eine SSH Verbindung aufbauen mit:

 ssh -R 3300:localhost:22 MYSERVER.TLD

Danach den screen abhaengen und die Verbindung zum VPN trennen / Firewall geschuetztes Netz verlassen. Nun auf MYSERVER.TLD einloggen und eine Verbindung zum System hinter der Firewall / im VPN herstellen mit:

 ssh -p 3300 localhost

voila :-)