Question Proxy avec netcat pour toujours


Je proxy un port de serveur TCP VNC avec Netcat. La machine proxy tourne sous Linux.

C'est la commande 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" sur laquelle le service VNC d'origine est exécuté sur le port 5902. Après cette commande, le service VNC est disponible sur localhost pour les autres machines.

Mais après chaque session VNC, le "serveur proxy" netcat s'arrête, c'est ainsi que fonctionne netcat.

Comment puis-je faire en sorte que Netcat maintienne le "service proxy" actif après la fin d'une session VNC?


Pour contourner le problème, je mets 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 "officielle" de netcat qui n'interrompt pas du tout le service.


J'ai lu sur le paramètre "-" mais je ne suis pas sûr que cela convienne et je ne pouvais pas encore l'appliquer correctement.


Remarque additionnelle:

Bien sûr, je peux le faire avec le tunneling SSH de différentes manières, mais je voulais une solution sans surcharge de chiffrement pour la rendre aussi réactive 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.


15
2017-12-12 14:02


origine




Réponses:


le -k l'option devrait faire l'affaire.

De la page de 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é le netcat-traditional Le paquet sur Debian / Ubuntu ne continue pas à écouter comme il se doit. Dans ce cas, utilisez le netcat-openbsd package à la place et essayez à nouveau!

Sinon, utilisez socat, qui est plus ciblé sur votre cas d'utilisation d'un serveur proxy. Un exemple d’expéditeur TCP aléatoire de la page de manuel de socat qui nécessite bien sûr des modifications.

   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.

22
2017-12-12 14:05



@AlojzJanez Oui, c'est assez évident, pour être honnête. Faites des pages de manuel une habitude. :) - gertvdijk