Zwangs-Proxy durchtunneln

Situation: man befindet sich in einem Netzwerk, in dem man einen Proxy zum Surfen verwenden muss. Ein direkter Zugang ins Internet ist gesperrt. Aus Gr├╝nden m├Âchte man diesen umgehen. In diesem Beispiel ist das Netzwerk so aufgebaut:

Der Proxy, der verwendet werden muss, hat die IP 192.168.120.253 und den Port 3128. Um das zu umgehen, braucht man einen Jump-Host, der z. B. via dyndns ereichbar sein muss. Im Beispiel wird jumpit.dyndns.org verwendet, der nat├╝rlich nicht existiert.

Auf diesem Jump-Host braucht man einen SSH-Server, der zus├Ątzlich zum Standard-Port 22 auf dem Port 443, der standardm├Ą├čig f├╝r https verwendet wird, lauscht. Au├čerdem muss dort ebenfalls ein Proxy-Server, z. B. der leichtgewichtige tinyproxy, installiert sein. Alles dies kann man mit einem Router mit dd-wrt erledigen.

Auf dem Client im Netz braucht man Firefox-Portable, Putty oder wahlweise myentunnel-Portable

Das Ziel ist es, den Traffic durch den Proxy durchzutunneln und auf der anderen Seite mit dem Jump-Host wieder aufzudr├Âseln, um so ins unbeschr├Ąnkte Internet zu gelanen.

  • Einrichtung von myEntunnel, geht nur, wenn der Proxy den Port 443 ungefiltert durchl├Ąsst, was oft der Fall ist

  • Alternativ: Einrichtung von Putty. Dieses Setup geht auch, wenn alles durch den Zwangs-Proxy geleitet werden muss. Mit Putty dann via ssh einloggen, eingeloggt bleiben und putty dann minimieren.

  • dann Firefox-Portable wie folgt einstellen, und alles sollte wuppen.

  • Version mit SOCKS-Proxy

SOCKS hat den Vorteil, dass man auf der anderen Seite, dem Jump-Host, kein separates Proxy-Programm installieren muss. SOCKS ist ssh integriert. Allerdings muss die zu tunnelnde Anwendung SOCKS untert├╝tzen, ein Umstand, der bei Firefox gegeben ist. Es reicht also, eine ssh-Verbindung aufzubauen, in der SOCKS konfiguriert ist, bzw. SOCKS bei myentunnel zu aktivieren. In den Folgenden Beispielen wird als SOCKS-Port 1234 verwendet, das ist relativ frei w├Ąhlbar, muss nur im Firefox dann genauso angegeben werden.

Folgende Einstellung ist in diesem Fall noch durchzuf├╝hren: in about:config im Firefox:

network.proxy.socks_remote_dns = true 
  • Anleitung f├╝r Linux
ssh -L 3128:127.0.0.1:3128 chrissie@doit.dyndns.org -p 443

Mit SOCKS:

ssh -D 1234 chrissie@doit.dyndns.org -p 443

Wenn man ssh durch einen HTTP-Proxy leiten muss, muss man unter Linux noch connect.c kompilieren. dieses Programm dann als connect nach /usr/local/bin kopieren

ssh -L 3128:127.0.0.1:3128 -o "ProxyCommand connect -H 192.168.120.253:3128 %h %p" \ 
chrissie@doit.dyndns.org -p 443

Mit SOCKS:

ssh -D 1234 -o "ProxyCommand connect -H 192.168.120.253:3128 %h %p" \ 
   chrissie@doit.dyndns.org -p 443 

Wenn man connect.c nicht hat, kann man es sich hier schnell laden: Download connect.c

Kompilieranleitung:

chrissie@pc1 ~ $ gcc connect.c -o connect
connect.c:1031:1: warning: return type defaults to 'int' [-Wimplicit-int]
 domain_match(const char *s1, const char *s2)
 ^~~~~~~~~~~~
chrissie@pc1 ~ $ chmod 755 connect
chrissie@pc1 ~ $ ./connect 
connect --- simple relaying command via proxy.
Version 1.100
usage: ./connect [-dnhst45] [-p local-port][-R resolve] [-w timeout] 
          [-H proxy-server[:port]] [-S [user@]socks-server[:port]] 
          [-T proxy-server[:port]]
          [-c telnet-proxy-command]
          host port
chrissie@pc1 ~ $ su
Password: 
pc1 /home/chrissie # mv connect /usr/local/bin/
  • andere Anwendung von connect.c: Man ist in einer Firma, es geht nur ein Proxy auf dem Port 80, man muss Dinge tun
  • Proxy hier: 10.89.230.30 Port 80

  • ssh
$ ssh -o "ProxyCommand connect -H 10.89.230.30:80 %h %p" chrissie@doit.dyndns.org -p 443
  • scp
$ scp -P 443 -o "ProxyCommand connect -H 10.89.230.30:80 %h %p" mysql-dump.sql chrissie@doit.dyndns.org: 
  • rsync
chrissie@server:/var/www $ rsync  -avzre 'ssh -p 443 -o "ProxyCommand connect -H 10.89.230.30:80 %h %p"' --links /var/www/ chrissie@doit.dyndns.org:~/www/

Viel Spa├č im Internet!

Artikel erstellt am: 01 May 2010 , aktualisiert am 01 August 2019