Proxy mit Netcat für immer

16

Ich habe einen VNC-TCP-Server-Port mit Netcat vertreten. Der Proxy-Rechner läuft unter Linux.

Dies ist der Befehl, den ich benutze:

mkfifo backpipe
nc -l 5902  0<backpipe | nc 10.1.1.116 5902 1>backpipe

10.1.1.116 ist die "entfernte" Maschine, auf der der ursprüngliche VNC-Dienst auf Port 5902 ausgeführt wird. Nach diesem Befehl ist der VNC-Dienst auf localhost für andere Maschinen verfügbar.

Aber nach jeder VNC-Sitzung stoppt der "Proxy-Server" von Netcat, so funktioniert Netcat.

Wie kann ich dafür sorgen, dass netcat den "Proxy-Dienst" nach Beendigung einer VNC-Sitzung weiterhin ausführt?


Als Workaround stelle ich die Netcat-Kommandozeile in eine Endlosschleife:

mkfifo backpipe
while true; do   nc -l 5902  0<backpipe | nc 10.1.1.116 5902 1>backpipe; done

Aber ich würde eine "offizielle" Netcat-Lösung vorziehen, die den Dienst überhaupt nicht unterbricht.


Ich habe über den Parameter "-" gelesen, bin mir aber nicht sicher, ob dies zum Fall passt, und konnte ihn noch nicht richtig anwenden.


Zusätzliche Bemerkungen:

Natürlich kann ich dies mit ssh-Tunneling auf verschiedene Arten tun, aber ich wollte eine Lösung ohne Verschlüsselungsaufwand, um sie für den VNC-Client so reaktionsschnell wie möglich zu gestalten. Eine andere Proxy-Lösung wäre ansonsten OK.

Der Client muss VNC sein, andere Protokolle sind nicht möglich.

Alojz Janez
quelle

Antworten:

24

Die -kOption sollte den Trick machen.

Aus der Manpage von nc(1):

 -k      Forces nc to stay listening for another connection after its
         current connection is completed.  It is an error to use this
         option without the -l option.

Ich habe bemerkt, dass das netcat-traditionalPaket unter Debian / Ubuntu nicht mehr so ​​läuft, wie es sollte. Verwenden Sie in diesem Fall netcat-openbsdstattdessen das Paket und versuchen Sie es erneut!

Alternativ können Sie verwenden socat, was mehr auf Ihren Verwendungszweck eines Proxyservers abzielt. Ein zufälliges TCP-Forwarder-Beispiel, aus dessen Manpage socatnatürlich einige Modifikationen erforderlich sind.

   socat -d -d -lmlocal2 \
   TCP4-LISTEN:80,bind=myaddr1,reuseaddr,fork,su=nobody,range=10.0.0.0/8 \
   TCP4:www.domain.org:80,bind=myaddr2

          TCP  port  forwarder,  each  side  bound to another local IP
          address (bind). This example  handles  an  almost  arbitrary
          number  of parallel or consecutive connections by fork'ing a
          new process after each accept() . It provides a little secu‐
          rity by su'ing to user nobody after forking; it only permits
          connections from the private  10  network  (range);  due  to
          reuseaddr,   it   allows   immediate  restart  after  master
          process's termination, even if some child  sockets  are  not
          completely  shut down.  With -lmlocal2, socat logs to stderr
          until successfully reaching the accept loop. Further logging
          is directed to syslog with facility local2.
gertvdijk
quelle
@AlojzJanez Ja, es ist ein bisschen offensichtlich, um ehrlich zu sein. Machen Sie es sich zur Gewohnheit, Manpages zu lesen. :)
gertvdijk