Proxy với netcat mãi mãi


16

Tôi đang ủy quyền một cổng máy chủ VNC TCP bằng netcat. Máy proxy chạy linux.

Đây là comand tôi sử dụng:

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

10.1.1.116 là máy "từ xa" có dịch vụ VNC gốc chạy trên cổng 5902. Sau lệnh này, dịch vụ VNC có sẵn trên localhost cho các máy khác.

Nhưng sau mỗi phiên VNC, "máy chủ proxy" netcat dừng lại, đó là cách netcat hoạt động.

Làm cách nào tôi có thể khiến netcat giữ "dịch vụ proxy" chạy sau khi phiên VNC bị chấm dứt?


Như một cách giải quyết, tôi đang đặt dòng lệnh netcat trong một Vòng lặp vô hạn:

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

Nhưng tôi thích một giải pháp netcat "chính thức" mà không làm gián đoạn dịch vụ.


Tôi đã đọc về tham số "-" nhưng tôi không chắc liệu điều này có phù hợp với trường hợp này không và tôi vẫn chưa thể áp dụng chính xác.


Nhận xét bổ sung:

Tất nhiên tôi có thể làm điều này với đường hầm ssh theo nhiều cách khác nhau, nhưng tôi muốn một giải pháp mà không cần chi phí mã hóa để làm cho nó phản ứng nhanh nhất có thể cho máy khách VNC. Một giải pháp proxy khác sẽ ổn nếu không.

Máy khách phải là VNC, không có giao thức nào khác có thể.

Câu trả lời:


24

Các -ktùy chọn nên làm thủ thuật.

Từ trang của 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.

Tôi đã nhận thấy netcat-traditionalgói trên Debian / Ubuntu không tiếp tục nghe như bình thường. Trong trường hợp đó, sử dụng netcat-openbsdgói thay thế và thử lại!

Ngoài ra, sử dụng socat, được nhắm mục tiêu nhiều hơn đến usecase của bạn về một máy chủ proxy. Một ví dụ chuyển tiếp TCP ngẫu nhiên từ trang chủ trong socatđó cần một số sửa đổi tất nhiên.

   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 Vâng, thật là hiển nhiên, phải trung thực. Hãy biến việc đọc trang thành một thói quen. :)
gertvdijk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.