Drucken via Firewallpiercing unter Windows 7

Ich mache ja recht häufig Telearbeit und im Rahmen dessen kommt es hin und wieder vor, dass ich was drucken muss. Bisher hab ich mir die Sachen dann auf meinen Server hochgeladen, vom privaten Rechner aus runtergeladen und ausgedruckt. Sehr umständlich und mir geht das eigentlich schon immer erheblich auf den Zeiger.

Da - jedenfalls bei uns - ein Zugriff auf lokale Netzwerkkomponenten nicht möglich ist, hab ich es wie folgt realisiert: ich verwende einen SSH Tunnel über unseren Proxy zu meinem Router und von dem aus zum TCP Port 9100 meines Netzwerkdruckers (ein HP OJP 8600, den ich nur wärmstens empfehlen kann). Damit das funktioniert, muss man allerdings einen Internetrouter haben, auf den man a) von aussen raufkommt, und der b) SSH spricht. In meinem Fall hab ich ein Gerät mit DD-WRT am Laufen, da geht das.

Zunächst muss man auf dem lokalen Rechner für SSH eine Proxyeinstellung vornehmen, die wie folgt aussieht:

Host meinserver
  User me
  Port 5222
  HostName meinserver.woauchimm.er
  ProxyCommand corkscrew 127.0.0.1 3128 %h %p

Diese Einstellung schreibt man in die Datei ~/.ssh/config. Wer mit Windows arbeiten muss, so wie ich, der benötigt Cygwin dafür. Ich meine mich zu erinnern, dass man sowas auch mit Putty machen kann, das müsstet Ihr aber selber herausfinden wie das geht. Für Cygwin braucht man ausserdem auch Corkscrew, alternativ funktioniert auch Netcat. Die ssh Manpage hat eine Sektion über die Funktion "ProxyCommand".

Ausserdem muss auf dem Proxy der entsprechende Port für HTTP CONNECT freigeschaltet sein. Auf dem Port muss dann am Server ein SSH-Daemon lauschen. Auf normalen Proxies sollte zumindest 443 offen sein. Ansonsten die Config anschauen oder den Admin unauffällig fragen :)

Zu guter Letzt muss auch der Router via Internet erreichbar sein. Ich verwende dafür DynDNS, so dass ich die Kiste jederzeit über einen Hostname erreiche. In meinem Fall ist der Port 22 nach aussen nur für meinen Rootserver geöffnet, die Allgemeinheit kommt da also nicht hin. Auch das kann ich nur dringend empfehlen.

Wenn man das alles hat, sieht das SSH Tunnelkommando wie folgt aus:

ssh -g -L9100:127.0.0.1:9100 meinserver "ssh -vg -L9100:192.168.1.100:9100 meinrouter.dyndns.org"

In diesem Beispiel hat der Drucker im LAN daheim die IP 192.168.1.100, und der Router ist unter meinrouter.dyndns.org erreichbar. Mit diesem Befehl baut man 3 verschachtelte Tunnel auf (von hinten nach vorn):

  1. Tunnel vom Router zum Druckerport 9100
  2. Tunnel vom Server zum Tunnelende von 1) auf Port 9100
  3. Tunnel über Proxy zum Tunnelende von 2) auf dem Server, auch Port 9100

Der Drucker ist dann lokal unter Windows über 127.0.0.1:9100 erreichbar.

Als nächstes richtet man den Drucker ein, normalerweise braucht man dafür keine Adminrechte. Über das Startmenü den Assistent "Geräte und Drucker" starten.

Netzwerkdrucker auswählen:

Da der Drucker nicht automatisch gefunden werden kann, auf den Button unten klicken "Der gesuchte Drucker ist nicht aufgeführt":

Dann die Option TCP/IP auswählen

In der folgenden Eingabemaske die IP 127.0.0.1 eintragen, den Haken für die automatische Abfrage deaktivieren (er würde sonst versuchen, den per SNMP abzufragen, was ja nicht gehen wird):

Trotzdem versucht Windows 7 dann den Drucker zu scannen, das dauert eine Weile, funktioniert nicht und kann ignoriert werden. Einfach abwarten:

Hier gibt man nun die Details an, unten "Benutzerdefiniert" auswählen und die Einstellungen checken. Die sollten schon vorausgefüllt sein, sonst korrigieren und bestätigen, dann auf "weiter" gehen:

Nun muss man noch den Treiber auswählen:

Und dem Drucker hernach einen Namen geben, ich empfehle "@ssh-tunnel" dranzuschreiben, damit man später weiss, dass man dafür einen Tunnel braucht:

Und das wars auch schon.

Wichtig ist, dass man vor dem Drucken den Tunnel wie oben beschrieben aufbaut. Kann man sich auch in ein Script schreiben, das spart Tipperei.

Wenn der Drucker ein Webscan-Feature hat (wie meiner), kann man auch über den Browser scannen. Dazu leitet man einfach den Port 80 des Druckers um:

ssh -g -L8000:127.0.0.1:8000 meinserver "ssh -vg -L8000:192.168.1.100:80 meinrouter.dyndns.org"

Dann kann man im Browser http://127.0.0.1:8000/ aufrufen und damit auch scannen.

Ja, zugegeben, das Setup ist etwas wild, aber es funktioniert und ich bin happy damit.

#server

↷ 07.01.2014