SSHポートフォワーディングとは?VPNとの違い
SSHポートフォワーディングは、SSH接続の中に別の通信を通す仕組みです。VPNと同じように「遠くのネットワークへ安全に届かせる」目的で使われることがありますが、得意なのはネットワーク全体の接続ではなく、特定のポートやアプリへの細い通り道を作ることです。
SSHポートフォワーディングの基本
SSHはもともと安全にサーバーへログインするための仕組みですが、その暗号化された接続の中へ別のTCP通信を流すこともできます。これをSSHポートフォワーディング、またはSSHトンネルと呼びます。
何ができる?
- 手元のPCから、外部公開されていない管理画面やデータベースへ一時的に接続する。
- 踏み台サーバーを経由して、社内やクラウド内の特定サービスへアクセスする。
- 通信内容をSSHの暗号化された経路に包んで、中間ネットワークから見えにくくする。
- VPNクライアントを入れずに、必要な接続だけを小さく開ける。
ローカル転送を開始する
OpenSSHでの例です。user@example.comを利用権限のあるSSHユーザーとサーバーに、db.internal:5432をそのサーバーから接続できるDBの名前とポートに置き換えます。DBクライアントの接続先は手元の127.0.0.1:15432にします。
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:15432:db.internal:5432 user@example.com
転送を終了する・失敗を見分ける
-Nはリモートコマンドを実行せず転送に使う指定です。端末を開いたまま利用し、終了時はCtrl+Cで止めます。ExitOnForwardFailure=yesは待ち受けの確保などに失敗すると終了しますが、DBへの接続成功を保証するものではありません。
3つの転送方式
SSHポートフォワーディングは、どちら側に入口を作るかで使い方が変わります。リモート転送も既定ではSSHサーバー自身からの接続に限定されます。他の端末からの接続可否は、サーバーのGatewayPorts設定やファイアウォールにも依存します。
方式の違い
| 方式 | よく使う形 | 向いている用途 |
|---|---|---|
| ローカル転送(-L) | 自分のPCのポートを、SSHサーバー側から見える宛先へつなぐ | 社内DB、管理画面、Redis、RDPなどへ一時的に接続する |
| リモート転送(-R) | SSHサーバー側のポートを、自分のPC側や手元ネットワークの宛先へつなぐ | NAT内の開発環境をSSHサーバー側から確認する、逆向きの接続を作る |
| 動的転送(-D) | 自分のPCにSOCKSプロキシを作り、接続先を都度切り替える | ブラウザや一部アプリの通信をSSH経由にする |
VPNとの違い
VPNとSSHポートフォワーディングはどちらも暗号化されたトンネルを作れます。ただし、扱う範囲と運用の前提がかなり違います。
比較表
| 観点 | SSHポートフォワーディング | VPN |
|---|---|---|
| 接続範囲 | 指定したTCPポートやSOCKS経由の通信が中心 | 端末全体、特定サブネット、アプリ単位など広く設計できる |
| 主な用途 | 管理者や開発者が特定サービスへ一時接続する | 在宅勤務、拠点間接続、常時接続、個人向けプライバシー補助 |
| 対応通信 | 基本はTCP。UDPやICMPはそのまま扱いにくい | 方式によってIPレベルでTCP/UDP/ICMPなどを扱える |
| 設定の重さ | SSHアカウントと鍵があれば小さく始めやすい | クライアント、ルーティング、DNS、認証、端末管理の設計が必要 |
| 権限管理 | SSHログイン権限とサーバー側設定に強く依存する | ユーザー、端末、ネットワーク、アプリ単位で設計しやすい製品が多い |
| 利用者層 | 技術者向けになりやすい | 一般利用者向けクライアントや企業管理に向く |
ざっくりした使い分け
- 「特定のDBや管理画面だけに入りたい」ならSSHポートフォワーディングが扱いやすい。
- 「社内ネットワークや複数アプリを普段どおり使いたい」ならVPNのほうが向いている。
- 「ブラウザだけSSH経由にしたい」なら動的転送(SOCKS)も選択肢になる。
- 「全社員に配るリモートアクセス基盤」なら、認証、ログ、端末管理を含めてVPNやZTNA系を検討する。
よくある利用例
SSHポートフォワーディングは、外部公開したくない管理系サービスへ、必要な人だけが一時的に入る用途でよく使われます。
ローカル転送の例
- 本番DBをインターネットへ公開せず、踏み台サーバー経由で管理ツールから接続する。
-
クラウド内の管理画面を
localhost経由で開く。 - リモートデスクトップやVNCなどを、公開ポートなしで一時的に使う。
動的転送を開始する
接続先を自分の環境に置き換えて実行し、利用するアプリのSOCKS5プロキシを127.0.0.1、ポートを1080に設定します。端末全体には適用されません。名前解決もSSH側へ送るには、アプリ側のSOCKS経由DNS設定を確認します。
ssh -N -o ExitOnForwardFailure=yes -D 127.0.0.1:1080 user@example.com
注意点
SSHが暗号化するのはSSHクライアントとSSHサーバーの間です。SSHサーバーからDBなどの宛先までの区間は、必要に応じてTLSなどで別に保護します。
安全に使うためのポイント
- 公開鍵認証の鍵を適切に管理し、接続先のホスト鍵の指紋も信頼できる経路で照合する。
-
サーバーの
AllowTcpForwardingで転送方式、PermitOpenでローカル転送の宛先、PermitListenでリモート転送の待ち受けを制限できる。シェル利用者は別の中継プログラムを動かせるため、転送設定だけではアクセスを完全には制限できない。 -
127.0.0.1で待ち受けても同じPCの別プロセスは利用できるため、DBなどの認証を省略しない。0.0.0.0で待ち受けると、到達可能な他端末にも入口を開く。 - SSHサーバーに入れる人は、内部サービスへの経路を作れる場合がある。踏み台サーバーのログと権限管理が重要。
- 長期・多数ユーザー・広範囲アクセスに使うなら、VPNやゼロトラスト系アクセス製品のほうが運用しやすいことがある。
まとめ
SSHポートフォワーディングは「特定の通信だけをSSHで通す」ための軽量な方法です。VPNは「端末やネットワークの通信経路を設計する」ための仕組みです。
覚え方
- SSHポートフォワーディングは、点と点をつなぐ細いトンネル。
- VPNは、端末やネットワークをまとめて扱う太いトンネル。
- 小さな管理用途ならSSH、大きなリモートアクセス基盤ならVPN、と考えると選びやすい。
- VPNの見え方や守れる範囲は、VPN利用時に誰から何が見える?やVPNで守れること・守れないことも合わせて確認する。
仕様・公式資料
OpenSSH ssh / ssh_config: ExitOnForwardFailure / sshd_config / RFC 4254: TCP/IP forwarding