saru1439s7
@saru1439s7

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SSH ポートフォワーディングでなぜプライベートIPが使えるのか教えてください

解決したいこと

SSH ポートフォワーディングでなぜプライベートIPが使えるのかがよくわからないです。

例)
ローカルのポート:任意で設定
リッスン:192.168.x.x(自分のPC、wifiのプライベートIPアドレス)

リモート側のホスト:192.168.x.x(テラタームのプライベートIPアドレス)
リッスン:指定したいポート

でなぜ
自身のpcのブラウザで

http://192.168.x.x:55577

のように
設定したプライベートIPアドレスとポートを入力すれば指定先と通信できるのか教えて下さい。

最初はグローバルIPアドレスを入力するのかと思っていました。
自身のwifiのプライベートIPと仮想PCテラタームのプライベートIPで通信できる理由が理解できていないのでアドバイスいただければ幸いです

0

1Answer

一言で言うと、ポートフォワーディングとはそういうものだからです。

  1. ネットワーク上にホストA(PC)、ホストB(踏み台サーバー)、ホストC(目的のサーバー)がある。
  2. AからB上のSSHサービス(ポートb)に接続できる。
  3. BからC上の目的のサービス(ポートc)にアクセスできる。

※ AからC上のサービスには直接アクセスできるとは限らない。
(たいていは、それができないからわざわざフォワードする。)

以上が満たされているときに、BとのSSH接続を介して、AからCへのアクセスを可能とする技術がポートフォワーディングです。
Cがグローバルアドレスに結びついていなくとも、BとCが属するLANのファイアウォールがそのサービスへの外部アクセスを嫌っていても、上記の条件さえ揃っていれば、AとCの間で通信を実現することができます。
このときに使われるA-B間のSSH接続をトンネルと言います。

以下のことは、ぜひ図を書いて理解してください:
トンネルのこちら(ホストA)では、Cに届けたいパケットをSSHに包んでB(のb)に流し、
トンネルの向こう(ホストB)では、受け取った中身をそのままC(のc)に仲介します。(復路も同様)
Aから見ると、Bのbポートが、Cのcポートの代わりになるイメージです。

なお、対応アプリケーションであればこれでも十分ですが、設定を施していないブラウザのような、A上の普通のアプリケーションがそのままBのb宛にリクエストを送っても、通信は実現しません。
bに構えているのはSSHサービスなので、パケットをSSHに包む必要があるからです。

なので、同時にトンネルのA側の端を、A自身のポートaに結びつけます。
aに構えているサービス(SSHのクライアント)は、他のアプリケーションから受け取ったパケットをSSHに包んでbに流します。
あとは同様です。
こうすることで、ブラウザから見ればローカルのaにアクセスすることで、目的のcにアクセスしたことになります


抽象的だったので最後に具体例でまとめたいところですが、こちらの質問文は(用語の不適切な使用とxの使いすぎが相まって)私ではいくら読んでも投稿者様の状況が再現できませんでした。
なので、その作業はご自身でやっていただくか(整合的かは判断します)、上記を踏まえて詳しい状況をください。
a=55577だと思いますが、「テラタームのIP」が何を意味するのか、深く考えるのを断念しました。
(「wifiのIP」と対になるということは、Tera Termが仮想アダプタになるのか? etc.)

ちなみに「リッスン」はaにアクセスするときのホスト部で、空欄でいいはずです。
そしたらプライベートアドレスどころかlocalhostでアクセスできます。

2Like

Your answer might help someone💌