一言で言うと、ポートフォワーディングとはそういうものだからです。
- ネットワーク上にホストA(PC)、ホストB(踏み台サーバー)、ホストC(目的のサーバー)がある。
- AからB上のSSHサービス(ポートb)に接続できる。
- 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
でアクセスできます。