SSHはソックス(4/5)プロキシチェーンをスキップします。ホスト - >ソックスプロキシ - >ソックスプロキシ - >ターゲット

SSHはソックス(4/5)プロキシチェーンをスキップします。ホスト - >ソックスプロキシ - >ソックスプロキシ - >ターゲット

良い答えを得ましたより早いMachineのSocksプロキシを介してMachineからMachineにA接続する方法に関する質問です。CB

マシンB IPがあると仮定すると、218.62.97.105ポート1080でリッスンしています。

これに対するコマンド:

ssh -o ProxyCommand='socat - socks:218.62.97.105:HOST_C:21,socksport=1080'

靴下プロキシでチェーンを作ることが可能かどうか疑問に思います。

次のシナリオを考えてみましょう。マシンA、->マシンB(ソックスプロキシ1)、->マシンC(ソックスプロキシ2)、->マシンD(対象)

マシンB IP:218.62.97.105ポート1080

マシンC IP:11.11.11.11ポート3128

マシンD IP:55.55.55.55ポート8080

誰かがsocatや他のツールの経験を持っていることを願っています。現時点では、これは非常に複雑に見えます。

私に有効な答えを与えることができる人には+100です。


socat 1コマンドのデバッグ:

2012/10/02 20:45:00 socat[15641] D read -> 8
2012/10/02 20:45:00 socat[15641] D received socks4 reply data (offset 0): 00 5c 00 50 c1 6b 90 17
2012/10/02 20:45:00 socat[15641] D received all 8 bytes
2012/10/02 20:45:00 socat[15641] I received socks reply VN=0 CD=92 DSTPORT=80 DSTIP=193.107.144.23
2012/10/02 20:45:00 socat[15641] E socks: ident refused by client
2012/10/02 20:45:00 socat[15641] N exit(1)
2012/10/02 20:45:00 socat[15641] I shutdown(4, 2)
2012/10/02 20:45:00 socat[15641] D shutdown()  -> 0
2012/10/02 20:45:00 socat[15641] I shutdown(3, 2)
2012/10/02 20:45:00 socat[15641] D shutdown()  -> 0
2012/10/02 20:45:00 socat[15638] I childdied(signum=17)
2012/10/02 20:45:00 socat[15638] D waitpid(-1, 0xbfbea3fc, 1)
2012/10/02 20:45:00 socat[15638] D waitpid(, {256}, ) -> 15641
2012/10/02 20:45:00 socat[15638] I childdied(17): cannot identify child 15641
2012/10/02 20:45:00 socat[15638] D saving pid in diedunknown1
2012/10/02 20:45:00 socat[15638] W waitpid(): child 15641 exited with status 1
2012/10/02 20:45:00 socat[15638] D waitpid(-1, 0xbfbea3fc, 1)
2012/10/02 20:45:00 socat[15638] D waitpid(, {256}, ) -> -1
2012/10/02 20:45:00 socat[15638] I waitpid(-1, {}, WNOHANG): No child processes
2012/10/02 20:45:00 socat[15638] I childdied() finished

socat 2番目のコマンド:

2012/10/02 20:44:38 socat[15640] D socket(2, 1, 6)
2012/10/02 20:44:38 socat[15640] I socket(2, 1, 6) -> 3
2012/10/02 20:44:38 socat[15640] D fcntl(3, 2, 1)
2012/10/02 20:44:38 socat[15640] D fcntl() -> 0
2012/10/02 20:44:38 socat[15640] D connect(3, {2,AF=2 127.0.0.1:22222}, 16)
2012/10/02 20:44:38 socat[15640] D connect() -> 0
2012/10/02 20:44:38 socat[15640] D getsockname(3, 0xbf8111cc, 0xbf811058{112})
2012/10/02 20:44:38 socat[15640] D getsockname(, {AF=2 127.0.0.1:40843}, {16}) -> 0
2012/10/02 20:44:38 socat[15640] N successfully connected from local address AF=2 127.0.0.1:40843
2012/10/02 20:44:38 socat[15640] I sending socks4 request VN=4 DC=1 DSTPORT=21 DSTIP=xx.xxx.xxx.xxx USERID=mnmnc
2012/10/02 20:44:38 socat[15640] D malloc(42)
2012/10/02 20:44:38 socat[15640] D malloc() -> 0x8f1ec80
2012/10/02 20:44:38 socat[15640] D sending socks4(a) request data 04 01 00 15 3e f4 9f 9a 6d 6e 6d 6e 63 00
2012/10/02 20:44:38 socat[15640] D write(3, 0xbf811304, 14)
2012/10/02 20:44:38 socat[15640] D write -> 14
2012/10/02 20:44:38 socat[15640] I waiting for socks reply
2012/10/02 20:44:38 socat[15640] D read(3, 0xbf811234, 8)
2012/10/02 20:45:00 socat[15640] D read -> 0
2012/10/02 20:45:00 socat[15640] E read(): EOF during read of socks reply, peer might not be a socks4 server
2012/10/02 20:45:00 socat[15640] N exit(1)
2012/10/02 20:45:00 socat[15640] I shutdown(3, 2)
2012/10/02 20:45:00 socat[15640] D shutdown()  -> 0
ssh_exchange_identification: Connection closed by remote host

答え1

そして:

socat tcp-listen:12345,reuseaddr,fork,bind=127.1 socks:218.62.97.105:11.11.11.11:3128,socksport=1080

ループバックインターフェイスのポート12345でTCP接続を待ち、218.62.97.105:1080のソックスサーバーを介して11.11.11.11:3128に転送するsocatがあります。

その後、これを使用してD:に接続できます。

ssh -o ProxyCommand='socat - socks:127.1:%h:%p,socksport=12345' -p 8080 55.55.55.55

(テストされていません)

答え2

私は使う靴下この目的のために。すべての接続をキャプチャし、tsocks.conf ファイルに基づいて渡す​​ラッパーです。たとえば、

server = 127.0.0.1
server_type = 5
server_port = 1338

これは、localhostがポート1338にSSHエージェントを設定したためです。この方法では、tsocksラッパーで実行される次のSSHセッションは、SSH接続のもう一方の端にあるかのように動作するため、接続をネストできます。

socatを使用するよりも必ずしも良いわけではありませんが、制御する方が簡単であることがわかりました。

関連情報