自宅サーバを公開しようとしたときに、「ポート開放したはずなのに外部から接続できない」と困ったことはないでしょうか。
ポート開放は、自宅サーバ運用でつまずきやすいポイントの一つです。
Ubuntu側で設定して、ルータ側でもポート転送を設定して、それでも外からつながらない……ということもあります。
この記事では、ポート開放できない原因を、Ubuntu・ルータ・二重ルータ・CGNATまで含めて初心者向けに整理します。
ポート開放できないときのよくある症状
ポート開放がうまくいかない場合、以下のような症状が出ます。
- 自宅内からはアクセスできる
- 外出先やスマホ回線からはアクセスできない
- ポートチェックサイトで閉じていると表示される
- ルータで設定したのに反映されない
この場合、サーバ自体が壊れているとは限りません。
ポート開放は、サーバ側・ルータ側・回線側の条件が揃って初めて成功します。
ポート開放の仕組み
自宅サーバを外部に公開するには、基本的に以下の3つが必要です。
- Ubuntu側で対象ポートを許可する
- ルータ側でポート転送を設定する
- グローバルIPアドレスで外部から到達できる
どれか一つでも欠けていると、外部からサーバへ接続できません。
例えば、Webサーバを公開する場合は、Ubuntu側でApacheやNginxが起動していて、ルータ側で80番ポートや443番ポートをサーバへ転送する必要があります。
原因① Ubuntu側の設定ミス
まず確認したいのが、Ubuntu側のファイアウォール設定です。
ufwを使っている場合は、以下のコマンドで状態を確認できます。
sudo ufw status
Webサーバを公開する場合は、必要に応じてHTTPやHTTPSを許可します。
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
SSHの場合は22番ポートを許可します。
sudo ufw allow 22/tcp
また、そもそもサービスが起動していない場合も外部から接続できません。
sudo systemctl status apache2
Apacheが起動しない場合は、以下の記事で原因と対処法をまとめています。
原因② ルータのポート転送設定ミス
Ubuntu側でポートを開けても、ルータ側でポート転送を設定していないと、外部から自宅サーバへ通信は届きません。
ルータでは、外部から来た通信を自宅サーバのローカルIPアドレスへ転送する必要があります。
よくあるミスは以下の通りです。
- 転送先IPアドレスが間違っている
- ポート番号が間違っている
- TCP / UDPの指定が違う
- 設定後に保存・再起動していない
特に、転送先IPアドレスの間違いはよくあります。
自宅サーバのIPアドレスが 192.168.1.10 なのに、ルータ側で別のIPに転送していると、通信は届きません。
原因③ ローカルIPアドレスが変わっている
自宅サーバのローカルIPアドレスがDHCPで自動割り当てになっている場合、再起動などをきっかけにIPアドレスが変わることがあります。
その結果、ルータのポート転送設定が古いIPアドレスを向いたままになり、外部から接続できなくなります。
対策としては、以下のどちらかを行います。
- サーバ側で固定IPを設定する
- ルータ側でDHCP固定割り当てを設定する
自宅サーバを継続して運用するなら、サーバのローカルIPは固定しておくのがおすすめです。
原因④ 二重ルータになっている
ポート開放で意外と多いのが、二重ルータ構成です。
例えば、以下のような構成です。
インターネット
↓
ONU・ホームゲートウェイ
↓
Wi-Fiルータ
↓
自宅サーバ
この場合、ルータが2段になっているため、片方のルータだけでポート開放しても外部から接続できないことがあります。
二重ルータでは、上位ルータと下位ルータの両方で設定が必要になる場合があります。
対策としては、以下のような方法があります。
- 上位ルータでもポート転送する
- 下位ルータをブリッジモードにする
- ネットワーク構成を整理する
二重ルータは初心者には原因が分かりにくく、「設定したのにつながらない」状態になりやすいポイントです。
原因⑤ CGNAT環境になっている
ポート開放で最も厄介なのがCGNATです。
CGNAT環境では、自宅のルータにグローバルIPアドレスが割り当てられていないため、外部から自宅サーバへ直接アクセスできません。
この場合、Ubuntuやルータの設定をどれだけ見直しても、通常のポート開放では解決できません。
確認するには、以下を比較します。
- ルータのWAN側IPアドレス
- IP確認サイトに表示されるグローバルIPアドレス
この2つが違っている場合、CGNAT環境の可能性があります。
CGNATについては、以下の記事で詳しく解説しています。
解決できる問題とできない問題
ポート開放できない原因には、設定で解決できるものと、環境的に難しいものがあります。
| 原因 | 解決可否 | 対処法 |
|---|---|---|
| Ubuntu側の設定ミス | 解決可能 | ufwやサービス起動を確認 |
| ルータ設定ミス | 解決可能 | ポート転送を見直す |
| ローカルIP変更 | 解決可能 | 固定IPにする |
| 二重ルータ | 構成次第で解決可能 | ブリッジ化や二段転送 |
| CGNAT | 通常は困難 | VPSなど外部環境を使う |
特にCGNATの場合は、自宅側の設定ではどうにもならないケースがあります。
VPSならポート開放はどうなる?
自宅サーバでは、Ubuntu側の設定に加えて、ルータの管理画面でもポート開放を行う必要があります。
さらに、二重ルータやCGNATのようなネットワーク構成の問題も考える必要があります。
一方で、VPSでは基本的にグローバルIPアドレスが割り当てられているため、ルータのポート転送設定は不要です。
ConoHa VPSの場合も、テンプレートイメージや管理画面の設定を使うことで、必要なポートを比較的簡単に扱えます。
自宅サーバで何度もポート開放に悩んできた立場からすると、VPSでルータ設定を気にしなくてよいのはかなり大きな違いです。
VPSでサーバを公開する方法
VPSでサーバを公開する場合は、基本的に以下の流れになります。
- VPSを契約する
- サーバを作成する
- 必要なポートを許可する
- ApacheやWordPressを構築する
ConoHa VPSの始め方については、以下の記事でまとめています。
VPSでWordPressを構築する場合は、以下の記事も参考にしてください。
VPSを選ぶ場合の注意点
VPSを利用する場合も、サービスごとの料金や使いやすさ、管理画面の違いは確認しておくと安心です。
ConoHa VPS・さくらのVPS・Xserver VPSの違いについては、以下の記事で比較しています。
まとめ
ポート開放できない原因は、一つではありません。
- Ubuntu側のファイアウォール設定
- ルータのポート転送設定
- ローカルIPアドレスの変化
- 二重ルータ
- CGNAT
設定ミスであれば解決できますが、CGNATのように自宅側では対応が難しいケースもあります。
自宅サーバでポート開放に悩む場合は、VPSを使うことでルータ設定や回線制限の問題を避けられることがあります。