ssh -D
はローカルマシンにソックスポートを作成し、トラフィックをリモートに送信してから他の場所に送信できます。
ssh -L port:Host:hostport
、ローカルマシンのリッスンポート、リモートマシンの観点から「Host:hostport」にトラフィックを渡します。
ssh -R port:Host:hostport
はssh -L
の対応物であり、リモートマシンのリスンポートであり、ローカルマシンの観点から "Host:hostport"にトラフィックを渡します。
しかし、ssh -D
に対応するものは何ですか。つまり、リモートマシンでsocksポートを開いて、トラフィックをローカルに転送してから他の場所に転送する方法を教えてください。
-D
&-L
を使用すると、2つのマシン間でどちらの方法でも通信できます。
そう...
-R
を使用して、ローカルマシンのsshdを指すリモートマシンにリスニングポートを作成します。-D
を使用します。下に記入するとうまくいくと思います...
ssh remotehost -R remoteport:localhost:localport "ssh -D 9050 localhost -p remoteport"
上記の「remotehost
」、「remoteport
」および「localport
」は変更する必要があります。ソックスプロキシは9050に形成されます。
〜/ .ssh/configのこのスニペットで透過的に達成できます:
Host sockstunnel
ProxyCommand ssh -D 3128 localhost nc -q 1 localhost 22
Host target
RemoteForward 3128 localhost:3128
ProxyCommand ssh -W target:22 sockstunnel
逆のDynamicForwardが必要です。これは、2つのsshコマンドを使用して実現されます。
ssh -D 3128 localhost
ssh -R 3128:localhost:3128 target
このようにして、ターゲットにはSSHクライアントへのSOCKSトンネルがあります。
私が行ったことは、sshをチェーン化する従来の方法を使用して、中間ホストを介してリモートターゲットに到達することで、ターゲットにログインしているときにSOCKSトンネルの作成が透過的に処理されるようにすることです。 -WはClearAllForwardingsを意味するため、最初のProxyCommand + ncトリックは必須です。
local$ ssh -R 1080 remote
remote$ curl --socks5 localhost https://example.com
openSSH 7.6以降
ssh(1):逆動的転送のサポートを追加。このモードでは、sshはSOCKS4/5プロキシとして機能し、リモートSOCKSクライアントによって要求された宛先に接続を転送します。このモードは、-RおよびRemoteForwardオプションの拡張構文を使用して要求されます。このモードはクライアントでのみ実装されるため、サーバーを更新してサポートする必要はありません。
OpenSSHでリバースソックストンネルを提供する機能はないため、「リモート」マシンでソックスプロキシを提供するsshコマンドを実行する必要があります。
リモートマシンがローカルマシンにSSH接続できない場合は、最初にローカルからリモートへのSSH接続を作成し、ポート22を転送します。 2222.次に、リモートマシンcanローカルマシンのポート2222にSSHで接続します。
OpenSSHの新しいバージョンは、リバースダイナミックTCP転送をネイティブでサポートしています。-R
オプションの(現在の)マニュアルから:
...明示的な宛先[is]が指定されていない場合、sshはSOCKS 4/5プロキシとして機能し、リモートSOCKSクライアントによって要求された宛先に接続を転送します。
それでおしまい!