พร็อกซีกับ 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 จะพร้อมใช้งานบน localhost สำหรับเครื่องอื่น ๆ

แต่หลังจากแต่ละ 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 "oficial" ที่ไม่รบกวนบริการเลย


ฉันได้อ่านเกี่ยวกับพารามิเตอร์ "-" แต่ฉันไม่แน่ใจว่าสิ่งนี้เหมาะสมกับตัวพิมพ์หรือไม่และยังไม่สามารถใช้ได้อย่างถูกต้อง


ข้อสังเกตเพิ่มเติม:

แน่นอนว่าฉันสามารถทำสิ่งนี้ได้ด้วย ssh tunneling ในรูปแบบต่าง ๆ แต่ฉันต้องการโซลูชันที่ไม่มีค่าใช้จ่ายในการเข้ารหัสเพื่อให้ตอบสนองได้ดีที่สุดสำหรับไคลเอนต์ VNC โซลูชันพรอกซีที่แตกต่างกันจะใช้ได้เช่นกัน

ไคลเอ็นต์ต้องเป็น VNC ไม่สามารถใช้โปรโตคอลอื่นได้

คำตอบ:


24

-kตัวเลือกที่ควรทำเคล็ดลับ

จาก manpage ของ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ซึ่งเป็นเป้าหมายของ usecase พร็อกซีเซิร์ฟเวอร์ของคุณมากกว่า ตัวอย่าง TCP-forwarder แบบสุ่มจาก manpage 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 ใช่มันค่อนข้างชัดเจนว่าจะซื่อสัตย์ ทำให้การอ่าน manpages เป็นนิสัย :)
gertvdijk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.