Wenn man sich in einem internen Netzwerk befindet und dort der gesamte TCP/UDP-Verkehr nach außen blockiert ist, hat man normalerweise schlechte Chancen noch irgendwie ins WWW zu kommen. Evtl. hat aber der fleißige Admin vergessen, den Datenverkehr über das ICMP-Protokoll zu sperren - oder er hat schlicht keine Möglichkeit das zu tun. Bei Routern aus dem SOHO-Bereich lässt sich beispielsweise häufig nur der TCP/UDP-Verkehr blockieren.

Wichtiger Hinweis: Bevor ihr diese Methode anwendet, erkundigt euch bitte vorher ob das in dem jeweiligen Netzwerk erlaubt ist. Nicht alle Netzwerk-Administratoren freuen sich über sowas!

Das ICMP-Protokoll hilft uns hier jedenfalls weiter, denn mit Hilfe der Software ptunnel ist es möglich, die beliebten TCP/UDP-Pakete über das ICMP-Protokoll zu tunneln.

Ob der ICMP-Kanal für uns auch wirklich frei ist, lässt sich ziemlich einfach testen. Einfach einen Ping auf eine beliebige IP-Adresse im Internet absetzen - am besten eine, von der man weiß das sie auch zurück pingt.

Was wir wollen

  • Einen ICMP-Tunnel zu unserem Server im Internet aufbauen
  • Über diesen ICMP-Tunnel eine SSH-Verbindung zu unserem Server aufbauen
  • Über diese SSH-Verbindung wiederrum weitere Verbindungen tunneln (z.B. HTTP, IMAP)

Was wir brauchen

  • Einen aus dem Internet erreichbaren Linux-Rechner, auf dem wir ptunnel installieren können
  • Einen Client (Linux oder Windows)

Konfiguration des Servers

Hier ist eigentlich relativ wenig Arbeit nötig. Zuerst müssen wir mal ptunnel installieren:

apt-get install ptunnel

Danach kann das Programm auch schon gestartet werden (-v 4 ist der Verbose-Level)

sudo ptunnel -v 4

Konfiguration des Clients (Linux)

Auch hier muss ptunnel installiert werden:

apt-get install ptunnel

Nun können wir die Verbindung zum Server aufbauen:

sudo ptunnel -p myserver.com -lp 8000 -da 127.0.0.1 -dp 22 -v 5

-p myserver ist unser Server auf dem ptunnel läuft

-da 127.0.0.1 ist die Ziel-Adresse

-lp 8000 ist der lokale Port auf den wir uns später verbinden können (frei wählbar)

-dp 22 ist der SSH Ziel-Port auf dem entfernten Ziel-Rechner

-v 5 ist das Verbose-Level (optional)

Nun bauen wir z.B. mit PuTTY oder dem SSH-Kommando eine Verbindung zu unserem Server im Internet auf:

ICMP-Tunnel

Die Verbindung von 127.0.0.1:8000 wird automatisch auf unseren Server myserver.com:22 umgeleitet.

Nun sollte die SSH-Verbindung stehen, und über diese können wir nun weitere Anwendungen getunnelt werden (z.B. Firefox). Dazu trägt man in PuTTY unter "Connection -> SSH -> Tunnels" einen beliebigen "dynamischen" Port ein und trägt diesen im Firefox als SOCKS-Proxy ein (127.0.0.1 mit dem entsprechenden Port).

Konfiguration des Clients (Windows)

Unter Windows brauchen wir natürlich erstmal wieder ein paar Zusatz-Tools ;-)

Zuerst installieren wir WinPcap und MinGW. Dies sollte allerdings mit einer noch bestehenden Internet-Verbindung gemacht werden, da MinGW einige Dateien nachlädt.

Jetzt öffnen wir eine Eingabeaufforderung als Administrator und bauen unseren SSH-Tunnel auf (gleich wie unter Linux):

ptunnel.exe -p 192.168.20.2 -lp 8000 -da 127.0.0.1 -dp 22 -v 4

Danach öffnen wir PuTTY und öffnen eine SSH-Verbindung zum Zielserver:

ICMP-Tunnel mit PuTTY