
私はMacbook A
、パブリックサーバーB(public IP: 1.2.3.4, internal IP: 10.0.0.2)
、社内サーバーを持っていますC(internal IP: 10.0.0.3)
A
B
BのパブリックIPで接続でき、 CのプライベートIPB
で接続できますが、直接接続することはできません。C
A
C
C:2345
今、からに接続したいのですA
が、 でポート転送を行うことができると思いますかB:1234=>C:2345
?
どのコマンドをどのサーバーで実行すればよいですか?
私は試した:
ssh -NfR 1234:localhost:2345 10.0.0.3
ssh -L 1234:0.0.0.0:2345 10.0.0.3
どちらも機能しません。
答え1
やることその通りあなたがリクエストしたもの ( B:1234=>C:2345
) は以下で実行されますB
:
# Not recommended. Read along.
ssh -NgL 1.2.3.4:1234:localhost:2345 10.0.0.3
また、ファイアウォール1234
のポートを開く必要もありますB
。次に、1.2.3.4:1234
外部からに接続すると、 自体10.0.0.3:2345
から接続しているかのようにC
(ループバック インターフェイス経由で) アクセスできます。誰でも接続できるため、(どのサーバーであっても) 上のサーバーがパスワードで保護されていない場合などに注意してくださいC
。
A
からへアクセスするより簡単で安全な方法はC
次のとおりです。 正確には要求どおりではありませんが、おそらく必要なことです。 についてA
:
ssh -NL 1234:10.0.0.3:2345 1.2.3.4
次に、127.0.0.1:1234
のに接続してA
のポートにアクセスします。2345
から入ってくるトラフィックを確認できます。この接続は のみが使用できるため、この方法は前の方法よりもはるかに安全です。C
C
B
A
他のコンピュータ(たとえば、LAN からA
)が接続できるようにするには、-g
オプションを使用してバインド アドレスを指定する必要があります。例:
ssh -NgL A_LAN_address_here:1234:10.0.0.3:2345 1.2.3.4
この場合は、 のファイアウォールをA
適切に再設定してから に接続しますA_LAN_address_here:1234
。
答え2
Macではまず
ssh -L2345:10.0.0.3:2345 10.0.0.2
これにより、Mac のローカル ポート 2345 が開き、10.0.0.3 の :2345 に直接接続されます。
その後、127.0.0.1:2345
Mac で にアクセスするだけです。このポートに送信されるすべての内容は ssh 経由でトンネルされ、 に送信されます10.0.0.3:2345
。そのサーバーには、 から送信されたように見えます10.0.0.2
。