サーバーを公開できないときのトラブルシューティング

Webサーバーやゲームサーバーを公開するときに、「自分は接続できてもほかの人が接続できない」「そもそも自分が接続できない」っていうことが多々あります。
そんな時に原因を突き止めようとしてもなかなかわかりません。
そこで今回はサーバーの問題からネットワークの問題まで順々に確認し、原因を突き止め解決できるようにトラブルシューティングの手順を書いていきたいと思います。
今回はWebサーバー(Apache)とゲームサーバー(マインクラフトJava版 以降「Java版」は省略します)を例にして進めますが、ほかのサーバーソフトウェアにも応用できると思います。
サーバー機器での確認
サーバーソフトウェアは正常に動いているか?
そもそもソフトが正常に動いていなければ、ほかの人どころか自分も接続できません。
サーバーを起動できているように見えても、正常に動いていないことがあります。
よく遭遇するのが「Address already in use」といったエラーです。
これは他のプロセスがポートをすでに使用してる場合に起こります。
「Address already in use」の解決方法
ポートを占拠してしまっているプロセスを終了するか、使用するポート番号を変更すれば治ります。
どのプロセスが占拠しているかわからない場合は、(多重起動などの場合)PCを再起動すれば解決できます。
サーバーと同じPCから接続できるか?
サーバーソフトウェア自体が正常に動いているかどうかは、サーバーと同じPCから接続してみればわかります。
Apacheの場合は「http://localhost/」、マイクラの場合は「アドレス: localhost ポート番号: 25565」で接続できるかどうか試します。
接続できない場合は、サーバーソフトが正常に動いているかもう一度確認します。
LANからの接続
サーバーと同じ機器からの接続を試したら、次は同じLAN(家など一つの建物の中のネットワーク)からの接続を試してみます
サーバーと同じネットワークに接続した、別の機器を用意します(スマホや別のPCを用意して、同じWi-Fiのアクセスポイントに接続するか有線LANで同じルーターに繋ぎます)
その機器から、Apacheの場合は「http://ローカルIPアドレス/」、マイクラの場合は「アドレス: ローカルIPアドレス ポート番号: 25565」で接続できるかどうか試します
グローバルIPアドレスではありません(ほとんどの場合、LANの機器にグローバルIPアドレスで接続できません)
ポート開放に成功した場合でも、LANから接続する場合はローカルIPアドレスを使って接続してください
マイクラなどのゲームを別端末で起動して接続チェックできない場合でも、ポート疎通確認ツールを使えば確認できます。
Androidの場合「Port Tester」、Windowsの場合PowerShellの「Test-NetConnection」コマンドがおすすめです(これらのツールはTCPに対してしか使えません)


接続できない場合の解決方法
接続する際のローカルIPアドレスが間違えていないか確認する
ローカルIPアドレスを固定していない場合、何かの拍子でローカルIPアドレスが変わることがあります。
サーバーを運営する場合はローカルIPアドレスを固定したほうが都合がいいので、固定してください。
「ローカルIPアドレス 固定 (ルーター名)」で調べると出てくると思います。
筆者の場合、ルーター(HGW/ONU)はPR-500MIでそのIPアドレスは192.168.1.1なので、次のように設定してます

ローカルIPアドレスは、Windowsの場合「ipconfig」コマンドで確認できます

その場合はファイアウォールを一旦無効にするか、設定を変更してICMPエコー要求の通信を許可してください
ファイアウォールやアンチウイルスソフトでブロックされていないか確認する
一度ファイアウォールを無効にしてみて接続できるようになればファイアウォールが邪魔している可能性が高いです。
さすがに無効にしたままにするのはリスクが高いと思うので、目的のソフトウェアが通信できるようにファイアウォールで許可しましょう
(以下の写真はOpenJDKでマイクラサーバーを起動している場合の一例です)

LAN外からの接続
LANからの接続を確認できたら、次はLAN外(WAN)からの接続を試してみましょう。
ポート開放できるISP(プロバイダ)か?
プロバイダがわからない場合はFQDNからわかる場合があります(ラッコツールズ等で確認できます)
Aさんの場合、以下のような情報が出てきたので、eonet.ne.jpからeo光であることがわかります

筆者の場合以下のような情報が出てきたので、プロバイダはわかりませんがJPNEが提供しているv6プラスを利用していることがわかります。

確かeo光はポート開放できて、v6プラスも一部のポートは開放できます(v6プラスのポート開放の仕方)
ポート開放できるかわからない場合はプロバイダに直接聞いてみるといいと思います。
ルーターの設定画面を表示・ポート開放の設定ができるか?
ルーターの設定画面は、ほとんどの場合「http://192.168.x.1/」で表示できます。
(表示できない場合は、「(ルーターの型番) ポート開放」で調べると開き方がわかります)
筆者の場合(PR-500MI)「http://192.168.1.1/」で開けました
(筆者はv6プラスなので、ポート開放は「http://192.168.1.1:8888/t/」から行っています)
ポート開放できる場合は、ルーターの設定画面からポート開放できるはずです。
(一部のルーターでは初期設定でUPnPがオフになっています)
外部からの接続
ポート開放設定まで出来たと仮定して話を進めていきます(ポート開放チェックに失敗してても大丈夫です)
まだポート疎通チェックを行っていない場合はこちらのサイト等でチェックを行ってください
(このサイトでチェックできるのはTCPだけです。)
UDPの場合、友人に頼んで接続できるか試してもらいましょう
グローバルIPはこちらのサイト等でチェックできます
もう一度言います、LAN内から接続する場合はローカルIPアドレス、LAN外から接続する場合はグローバルIPアドレスです
ポート開放チェックに成功すれば、これでサーバーの公開は完了です!!
二重ルーターではないか?
二重ルーターの場合、一つのルーターを設定しても、もう一つのルーターで通信が破棄されます。
二重ルーターであるメリットはないので、片方のルーターはブリッジモードに切り替えましょう。
二重ルーターであるかどうかは「tracert」コマンドで確認できます。
筆者の場合、ローカルIPアドレス(これがルーターのアドレス)が一つだけなので、二重ルーターでないことがわかります。

これでもできない場合
筆者が考えるあらゆる可能性を書いてみましたが、これでもサーバー公開できない場合…
もう一度次の項目をしっかり確認してください
- ポート開放できるプロバイダか?
- ルーターの設定画面から直接設定してみたか?
この二つはよく確認を疎かにしがちです。
「確認したけどまだできない!」っていう場合は、誰かに聞いてみましょう(もちろん筆者でもいいです)
誰かに聞くときに示す情報
何も情報なしで「できません!」と言うと相手が困ってしまいます。
質問するときは次の項目を書いておくといいと思います
- 使っているルーター
- 契約しているISPや契約プラン
- サーバー機のOS
- ネットワーク構成(図で書くとわかりやすい)
- 試したこと
代替手段
サーバーを公開できなかった場合、次の代替手段があります
(すべてマインクラフト向けに書きましたが、webサーバー等にも応用できます)
- ngrok : 【ポート開放もhamachiも必要なし】マイクラ自宅鯖の立て方
- serveo : 【Hamachi・ポート開放必要なし!】マイクラ自宅鯖の立て方(serveo版)
- playit.gg(現在は一部ゲームのみ対応) : 【ポート開放なし】最速でクロスプレイ鯖を作る
まとめ
今回は、サーバーが公開できないときに原因を見つけ、解決できるようにトラブルシューティングの手順を書きました。
また新しい気づきがあれば更新します。
コメントを書く