web-dev-qa-db-ja.com

リバースダイナミックSSHポート転送を作成する方法

私はsshトンネルレイアウトを設定しようとしています:

  1. クライアントA(ssh-server対応ではない)がサーバーSへのssh接続を開始します
  2. socksサーバーがサーバーS:yyyyで開かれ、クライアントA経由ですべてのデータをトンネルします
  3. クライアントBはサーバーS上のソックスサーバーに接続し、TCPデータはクライアントA経由でインターネットにルーティングします

可能な解決策は、クライアントAにプロキシサーバーを追加し(localhost:xxxxにバインド)、クライアントAで実行することですssh -R yyyy:localhost:xxxx Server。それは目標を達成するでしょう。しかし、これはsshを使用する場合ほどきれいではありません。

AのsshクライアントとSのssh-serverだけでこれを実現することは可能ですか?これはsshでのreverse-dynamic-port-forwardingのようなもので、AからSへのssh -Dを作成してから、このトンネルにSからAへのssh -Dの2番目のトンネルを設定します。やや混乱し、わかりません可能なら。

8
azv

OpenSSH 7.6 ネイティブオプションとしてリバースダイナミックプロキシを導入。これは完全にクライアントに実装されるため、サーバーを更新する必要はありません。

ssh -R 1080 server
11
Elad Tsur

私はこれを探していて、 スタックオーバーフロー で同じ(または同様の)質問に出くわしました。

クライアントAでssh -R \*:24680:localhost:12345 serverS、次に(まだクライアントAで)ssh -D 12345 localhost [1]

あなたは need\*ビットに追加し、localhostだけでなくサーバーSのパブリックIPアドレスにバインドするようにします。

次に、クライアントBでserverS:24680にあるsocksサーバーに接続します。


[1]編集:クライアントAがSSHサーバーを持っていない場合、それ自体はsshできないため、これは機能しないことに気づきました。クライアントAにSSHサーバーがあり、サーバーSからはアクセスできないセットアップを考えていました。しかし、クライアントAに socks server をインストールしてポートで開くことができれば、同様のセットアップが引き続き機能します。 12345。

6
Hybrid

これが誰かに役立つかどうかわからない、これは私が構築することができた私のセットアップの図です...

SSH reverse tunnel with SOCKS proxying

MACHINE_Bに2つのプロセスが表示されます。

MACHINE_A(オリーブ)へのSSHクライアント接続:

ssh -R 127.0.0.1:22344:127.0.0.1:4444 -i privkey.sshkey -N user_a@machine_a

ポート4444(濃い緑色)でSOCKSサーバーとして機能するSSHクライアント:

ssh -D localhost:4444 -N user_c@localhost

1つはMACHINE_Aで処理し、もう1つはポート22344(オリーブ)でリッスンしている再生サーバーです。

MACHINE_Aのライトグリーンプロセスが接続を要求すると、MACHINE_Bのライトグリーンプロセスが表示されます...

1
David Tonhofer

この目的のためにsshと呼ばれるssfに代わるものがあり、-Fフラグを使用して逆動的ソックスを作成できます。

SSFクライアントの-F portオプションは、SSFターゲットサーバーマシン上の指定されたポートを開き、SOCKS要求をSSFクライアントに転送します。 SSFクライアントはSOCKSサーバーとして機能します。

https://securesocketfunneling.github.io/ssf/#how-to-use-socks

リモートにssfdがインストールされ、ローカルにssfがインストールされている場合、sshを使用してこれを設定できます。

ssh -o"LocalCommand=ssf -F 1234 -p 10000 server" -f user@server ssfd -p 10000

これにより、リモートサーバーのポート1234でSOCKSを使用して、クライアントマシン経由でインターネットにアクセスできます。

0
NeoVance