SSHで「ポートフォワーディングが動作しない」場合の原因と対処法

  • URLをコピーしました!
目次

エラーの概要

SSH には「ポートフォワーディング(ポート転送)」機能があり、ローカルやリモートのポートを経由して安全に接続することが可能です。
しかし、設定をしても ポートフォワーディングが動作しない というトラブルが発生することがあります。

本記事では、その代表的な原因と解決方法を解説します。

主な原因と解決方法

1. コマンドの指定ミス

ssh -L または ssh -R の書式を誤ると、転送が機能しません。
特に localhost0.0.0.0 の指定を間違えるケースが多いです。

対処方法

# ローカルフォワード(例: localhost:8080 → remote:80)
ssh -L 8080:localhost:80 user@remote

# リモートフォワード(外部アクセスも許可する場合)
ssh -R 0.0.0.0:9090:localhost:22 user@remote

2. サーバ側の設定 (sshd_config)

サーバの /etc/ssh/sshd_config にて以下の設定が無効だと、ポートフォワーディングは利用できません。

AllowTcpForwarding yes
GatewayPorts yes
  • AllowTcpForwarding no → ポートフォワーディング禁止
  • GatewayPorts no → リモートフォワードがローカル接続のみ許可

対処方法

設定を有効にし、sshd を再起動します。

sudo systemctl restart sshd

3. ファイアウォールやセキュリティグループ

  • サーバのファイアウォール(iptables, firewalld)や、クラウド環境(AWS/GCP/Azure)のセキュリティグループで、該当ポートがブロックされている場合があります。

対処方法

対象ポートを開放してください。

# firewalld の例
sudo firewall-cmd --add-port=9090/tcp --permanent
sudo firewall-cmd --reload

4. SELinux / AppArmor の制限

セキュリティ機構により TCP フォワーディングが制限されることがあります。

対処方法

一時的に無効化して挙動を確認します。

# SELinuxの状態確認
getenforce

# 一時的に無効化
sudo setenforce 0

まとめ

SSH のポートフォワーディングが動作しない場合は、次の順で確認しましょう。

  1. ssh -L / ssh -R の書式ミスがないか
  2. サーバ側 sshd_configAllowTcpForwarding / GatewayPorts が有効か
  3. ファイアウォールやクラウドのセキュリティ設定
  4. SELinux / AppArmor の制限

これらを順に見直せば、ほとんどのケースで解決できます。

よくあるエラーと解決方法まとめ
目次