Je suis proxyse d'un VNC TCP avec NetCat. La machine proxy fonctionne Linux.
C'est le Comand que j'utilise:
mkfifo backpipe
nc -l 5902 0<backpipe | nc 10.1.1.116 5902 1>backpipe
10.1.1.116 est la machine "distante" avec le service VNC d'origine exécutant sur le port 5902. Une fois que ce service de commande VNC est disponible sur localhost pour d'autres machines.
Mais après chaque session VNC, le Netcat "Proxy Server" s'arrête, c'est ainsi que NetCat fonctionne.
Comment puis-je rendre NetCat conserver le "service proxy" en cours d'exécution après la résiliation d'une session VNC?
En tant que contournement, je pose la ligne de commande Netcat dans une boucle infinie:
mkfifo backpipe
while true; do nc -l 5902 0<backpipe | nc 10.1.1.116 5902 1>backpipe; done
Mais je préférerais une solution de Netcat "Oficial" qui n'interrompt pas du tout le service.
J'ai lu sur le paramètre "-", mais je ne suis pas sûr que cela correspond à l'affaire et que je n'étais pas encore en mesure de l'appliquer correctement.
Remarque additionnelle:
Bien sûr, je peux le faire avec un tunneling SSH de différentes manières, mais je voulais une solution sans que la surcharge de cryptage ne le rendait aussi réactif que possible pour le client VNC. Une solution de proxy différente serait ok sinon.
Le client doit être VNC, aucun autre protocole n'est possible.
L'option -k
Devrait faire l'affaire.
Du manuel de 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.
J'ai remarqué que le package netcat-traditional
Sur Debian/Ubuntu ne continue pas d'écouter comme il se doit. Dans ce cas, utilisez plutôt le package netcat-openbsd
Et réessayez!
Alternativement, utilisez socat
, qui est plus ciblé pour votre usecase d'un serveur proxy. Un exemple de transitaire de TCP aléatoire à partir du manuel de socat
qui nécessite des modifications bien sûr.
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.