Proksi dengan netcat selamanya

16

Saya proksi port server VNC TCP dengan netcat. Mesin proxy menjalankan linux.

Ini adalah perintah yang saya gunakan:

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

10.1.1.116 adalah mesin "jarak jauh" dengan layanan VNC asli berjalan pada port 5902. Setelah perintah ini, layanan VNC tersedia di localhost untuk mesin lain.

Tetapi setelah setiap sesi VNC, "server proxy" netcat berhenti, yang merupakan cara kerja netcat.

Bagaimana saya bisa membuat netcat menjaga "layanan proxy" berjalan setelah sesi VNC dihentikan?


Sebagai solusinya saya menempatkan baris perintah netcat dalam Loop tak terbatas:

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

Tapi saya lebih suka solusi netcat "oficial" yang tidak mengganggu layanan sama sekali.


Saya telah membaca tentang parameter "-" tetapi saya tidak yakin apakah ini cocok dengan case dan saya belum dapat menerapkannya dengan benar.


Tanda tambahan:

Tentu saja saya dapat melakukan ini dengan tunneling ssh dengan cara yang berbeda, tetapi saya menginginkan solusi tanpa overhead enkripsi untuk membuatnya se-responsif mungkin untuk klien VNC. Solusi proxy yang berbeda akan baik-baik saja jika tidak.

Klien harus VNC, tidak ada protokol lain yang mungkin.

Alojz Janez
sumber

Jawaban:

24

The -kpilihan harus melakukan trik.

Dari halaman manual 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.

Saya perhatikan netcat-traditionalpaket di Debian / Ubuntu tidak terus mendengarkan sebagaimana mestinya. Jika demikian, gunakan netcat-openbsdpaket sebagai gantinya dan coba lagi!

Atau, gunakan socat, yang lebih bertarget ke pengguna Anda dari server proxy. Contoh TCP-forwarder acak dari halaman manual socatyang memerlukan beberapa modifikasi tentunya.

   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
sumber
@AlojzJanez Ya, agak jelas, jujur. Jadikan membaca manual sebagai kebiasaan. :)
gertvdijk