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:
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: