2019.08.29 · 技術と道具

SSHトンネルについて調べたこと

SSHトンネル(ポートフォワード)について少し調べてみました。
いままでも何度となく使っていたのだけど、きちんと調べたことはなかったので。

ローカル→リモート

BASH
ssh foo@bar.com -L 15901:localhost:5901

これは、ローカル→リモートのポートフォワードで、手元のマシンのlocalhost:15901にアクセスすると、bar.com:5901(VNC)に接続されます。
bar.comが5901ポートを外部に公開していない(ファイアウォールがかかっている)場合でも、SSHが可能ならばVNC接続できるということになります。
これは最も単純なSSHトンネルで、私がいままで使ってきたのは、ほとんどこれ。

BASH
ssh foo@bar.com -L 15901:192.168.10.10:5901

これもOKです。手元のマシンでlocalhost:15901にアクセスすると、bar.comを経由して192.168.10.10の5901ポートに接続します。192.168.10.10はプライベートIPアドレスなので、外部のネットワークからは接続できないけど、bar.comと同じネットワークにある(もしくはVPNがつながっている)ような場合に有効。

リモート→ローカル

上記の例は外部の方から踏み台とするサーバを使って内部のサーバに接続できるようなポートフォワードを設定していたのですが、逆に内部のサーバ側から接続可能な状態を作ることもできます。

192.168.10.10のサーバにログインして、

BASH
ssh foo@bar.com -R 15901:localhost:5901

こうすると、bar.com:15901にアクセスすれば自分(192.168.10.10)の5901ポートに接続されることになります。
この場合、bar.comの15901はファイアウォールで遮断されていることが多いでしょうから、手元のマシンからは、

BASH
ssh foo@bar.com -L 15901:localhost:15901

というポートフォワードを行い、localhost(手元のマシン):15901へのアクセスが、bar.comの15901ポートへの接続になるようにします。で、bar.com:15901は、192.168.10.10:5901へのポートフォワードになっているので、結局は192.168.10.10のVNCが開くことになります。

基本的には-Lだけ使っておけば中継もできるので問題なさそうですが、bar.comも192.168.10.10にアクセスできないような場合は(その逆はできるなら)、192.168.10.10側から-Rでポートフォワードするという必要もあるというわけですね。

2019/08/29 16:43
← 朝の北九州から東京へ
エッジAIに関する現状整理 →
井上 研一
経済産業省推進資格ITコーディネータとして中小企業のDX・AI活用の現場で伴走支援を行う。「ITCプロセスガイドライン4.0」および「中小企業向けAI活用ガイド」執筆メンバー。著書・講演多数。ITエンジニアとして25年以上の実務経験。AI導入の実務に10年以上携わる。自ら開発したAIサービス「Gen2Go」が北九州発!新商品創出事業の認定を受ける。2026年4月より北九州市立大学大学院マネジメント研究科の学生としての顔も持つ。

本サイトおよびブログに掲載している内容は、特に明記のない限り、井上研一個人の見解に基づくものです。所属・関与する組織、団体、企業、研究会等の公式見解を示すものではありません。