Прокси с netcat навсегда


16

Я прокси-сервер VNC TCP-порт с Netcat. Прокси-машина работает под управлением Linux.

Это команда, которую я использую:

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

10.1.1.116 - это «удаленный» компьютер с исходной службой VNC, работающей через порт 5902. После этой команды служба VNC доступна на локальном хосте для других машин.

Но после каждого сеанса VNC «прокси-сервер» netcat останавливается, как работает netcat.

Как я могу заставить netcat поддерживать «прокси-сервис» работающим после завершения сеанса VNC?


В качестве обходного пути я помещаю командную строку netcat в бесконечный цикл:

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

Но я бы предпочел «официальное» решение netcat, которое вообще не прерывает обслуживание.


Я читал о параметре "-", но я не уверен, подходит ли он для случая, и я еще не смог применить его правильно.


Дополнительные замечания:

Конечно, я могу сделать это с ssh-туннелированием по-разному, но я хотел найти решение без издержек на шифрование, чтобы сделать его максимально отзывчивым для клиента VNC. В противном случае было бы нормально использовать другой прокси-сервер

Клиент должен быть VNC, другие протоколы невозможны.

Ответы:


24

-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пакет в Debian / Ubuntu не продолжает слушать, как следует. В этом случае используйте netcat-openbsdпакет и попробуйте снова!

В качестве альтернативы, используйте socat, который больше ориентирован на ваш случай использования прокси-сервера. Случайный пример TCP-экспедитора, с man-страницы 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.

@AlojzJanez Да, это довольно очевидно, если честно. Сделать чтение страниц привычкой. :)
gertvdijk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.