[server] netcat으로 영원히 프록시

netcat으로 VNC TCP 서버 포트를 프록시하고 있습니다. 프록시 머신은 리눅스를 실행합니다.

이것은 내가 사용하는 명령입니다.

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

10.1.1.116은 포트 5902에서 실행되는 원래 VNC 서비스가있는 “원격”시스템입니다.이 명령 후에 다른 시스템의 로컬 호스트에서 VNC 서비스를 사용할 수 있습니다.

그러나 각 VNC 세션 후에 netcat “프록시 서버”가 중지됩니다. 이것이 netcat 작동 방식입니다.

VNC 세션이 종료 된 후 netcat에서 “프록시 서비스”를 계속 실행하려면 어떻게해야합니까?


해결 방법으로 netcat 명령 줄을 무한 루프에 넣습니다.

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

그러나 서비스를 전혀 방해하지 않는 “oficial”netcat 솔루션을 선호합니다.


“-“매개 변수에 대해 읽었지만 이것이 케이스에 맞는지 확실하지 않으며 아직 올바르게 적용 할 수 없습니다.


추가 사항 :

물론 다른 방법으로 ssh 터널링을 사용 하여이 작업을 수행 할 수 있지만 VNC 클라이언트에 대해 가능한 한 응답 성이 뛰어난 암호화 오버 헤드가없는 솔루션을 원했습니다. 그렇지 않으면 다른 프록시 솔루션이 정상입니다.

클라이언트는 VNC 여야하며 다른 프로토콜은 불가능합니다.



답변

-k옵션은 트릭을해야한다.

맨 페이지에서 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.

netcat-traditional데비안 / 우분투 패키지가 제대로 들리지 않는 것을 알았습니다 . 이 경우 netcat-openbsd패키지를 대신 사용하고 다시 시도하십시오!

또는 socat프록시 서버의 사용 사례에보다 적합한을 사용하십시오. 맨 페이지의 임의의 TCP 전달자 예제 socat는 물론 약간의 수정이 필요합니다.

   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.


답변