2.

ポートフォワーディングの仕組みと SSH トンネル | ネットワーク入門

編集
この記事の要点
  • ポートフォワーディングは、あるホスト/ポートに届いた通信を別のホスト/ポートへ転送する仕組みの総称
  • ルータ/NAT 環境では「外部から来た特定ポートを内部の特定ホストへ転送」する DNAT (ポート開放) として使われる
  • SSH ポートフォワードにはローカル転送 (-L)、リモート転送 (-R)、ダイナミック転送 (-D, SOCKS プロキシ) の 3 種類がある
  • ファイアウォール越しに内部サービスへ安全にアクセスしたり、踏み台 (bastion) 経由で DB へ接続したりする用途が定番
  • 転送は強力ゆえに、社内ネットワークの境界を実質的に貫通させる。意図しない経路を開けないよう運用ルールが重要

概要

ポートフォワーディング (ポート転送) とは、ある地点に届いたネットワーク通信を、あらかじめ決めた別の地点へ中継・転送する仕組みの総称です。文脈によって 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 でバックグラウンド化したトンネルは存在を忘れがち。不要になったらプロセスを止める。

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ウェルノウンポート一覧
  2. ポートフォワーディング
  3. ポートの確認方法
  4. nmapによるポートスキャン

最近更新/作成されたページ