| この記事の要点 |
|
概要
ポートフォワーディング (ポート転送) とは、ある地点に届いたネットワーク通信を、あらかじめ決めた別の地点へ中継・転送する仕組みの総称です。文脈によって 2 つの意味で使われます。1 つは家庭用ルータや NAT 機器における「ポート開放」、もう 1 つは SSH トンネルによる「SSH ポートフォワード」です。いずれも「本来直接は届かない宛先へ、中継点を経由して通信を届ける」点が共通しています。基礎となる ポート番号 の概念を前提とします。
仕組み
NAT/ルータでのポートフォワーディングは、グローバル IP を 1 つしか持たない家庭/オフィスで、外部から来た特定ポート宛のパケットを、内部 LAN の特定ホスト・ポートへ書き換えて転送する処理です。NAT の一種である DNAT (宛先 NAT) として実装され、「外部の :外部ポート → 内部の 192.168.x.y:内部ポート」というマッピングをルータに登録します。これにより、グローバルからプライベートアドレスのサービスへ到達できるようになります。
SSH ポートフォワーディングは、暗号化された SSH コネクションの中にもう 1 本の TCP 経路をトンネルとして通す機能です。3 種類あります。
- ローカル転送 (-L): 手元の localhost:ポート へのアクセスを、SSH 先サーバから見た宛先へ転送する。例: 手元の 5433 を踏み台経由で社内 DB の 5432 へ。
- リモート転送 (-R): SSH 先サーバのポートへのアクセスを、手元のマシンから見た宛先へ転送する。NAT 内のサービスを外部に公開する用途。
- ダイナミック転送 (-D): 手元に SOCKS プロキシを立て、ブラウザ等のトラフィックを SSH 先から出ていくようにする。簡易 VPN 的に使える。
実用例
# ローカル転送: 手元の 5433 を踏み台 bastion 経由で社内 DB(db.internal:5432) へ
ssh -L 5433:db.internal:5432 user@bastion.example.com
# 別端末から
psql -h 127.0.0.1 -p 5433 -U appuser appdb
# リモート転送: 手元の Web(127.0.0.1:3000) をリモートの 8000 で公開
ssh -R 8000:127.0.0.1:3000 user@public.example.com
# ダイナミック転送: 手元 1080 に SOCKS プロキシを立てる
ssh -D 1080 user@gateway.example.com
# curl をそのプロキシ経由で
curl --socks5-hostname 127.0.0.1:1080 https://internal.example.com/
# 転送だけ行いシェルを起動しない (-N) + バックグラウンド (-f)
ssh -fNL 5433:db.internal:5432 user@bastion.example.com
NAT ルータ側のポート開放は機器の管理画面 (UPnP もしくは手動の仮想サーバ設定) で行うのが一般的で、Linux ルータでは ss で listen を確認しつつ iptables/nftables の DNAT ルールで実現します。
主な用途
- 踏み台 (bastion) 経由の DB アクセス: 直接公開できない社内 DB へ、SSH トンネル越しに安全に接続する。
- ファイアウォール越しの開発: クラウド上の内部サービスを手元のブラウザ/ツールから触る。
- NAT 内サービスの公開: 自宅サーバや IoT 機器を外部からアクセス可能にする (リモート転送やルータのポート開放)。
- 簡易プロキシ: -D による SOCKS で、出口 IP を SSH 先に固定する。
方式の比較
| 方式 | 暗号化 | 主な向き | 典型用途 |
|---|---|---|---|
| NAT/ルータ転送 (DNAT) | 無し (素通し) | 外→内 | 自宅サーバ公開、ポート開放 |
| SSH ローカル転送 (-L) | あり | 手元→リモート先 | 踏み台経由の DB/管理画面アクセス |
| SSH リモート転送 (-R) | あり | リモート→手元先 | NAT 内サービスの一時公開 |
| SSH ダイナミック (-D) | あり | 手元→任意 (SOCKS) | 簡易 VPN、出口 IP 固定 |
注意点
- 境界を貫通させる行為: ポートフォワードは事実上ファイアウォールに穴を開ける。社内ポリシーで禁止/許可制になっていることが多く、無断使用は重大なセキュリティ違反になりうる。
- リモート転送の公開範囲:
-Rはデフォルトで sshd_config のGatewayPorts設定次第で待受アドレスが変わる。意図せず 0.0.0.0 で公開しないよう確認する。 - NAT ポート開放の最小化: 不要な開放は攻撃面を広げる。開けるなら接続元 IP 制限や認証必須を徹底する。
- 転送先の取り違え:
-L ローカル:転送先ホスト:転送先ポートの「転送先ホスト」は SSH サーバから見た名前。手元視点と混同しやすい。 - トンネルの常時稼働:
-fNでバックグラウンド化したトンネルは存在を忘れがち。不要になったらプロセスを止める。
関連リンク
子ページ
子ページはありません
同階層のページ
- ウェルノウンポート一覧
- ポートフォワーディング
- ポートの確認方法
- nmapによるポートスキャン
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15