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の動作方法です。
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でなければなりません。他のプロトコルは使用できません。
_-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.
_
Debian/Ubuntuの_netcat-traditional
_パッケージが期待どおりに聞こえないことに気づきました。その場合は、代わりに_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.
_