永遠にnetcatでプロキシする


16

netcatでVNC TCPサーバーポートをプロキシしています。プロキシマシンはLinuxを実行します。

これは私が使用するコマンドです:

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

しかし、私はサービスをまったく中断しない「公式の」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-traditionalDebian / Ubuntuのパッケージは、期待どおりに聞き続けないことに気付きました。その場合は、netcat-openbsd代わりにパッケージを使用して再試行してください!

または、socatプロキシサーバーのユースケースによりターゲットを絞ったを使用します。socatもちろん、マンページからのランダムなTCPフォワーダーの例には、いくつかの修正が必要です。

   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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.