ポート開放自体非常にややこしく失敗する原因は多岐に渡るため、慣れていないと解決方法がわかりません。
そこで主な原因を挙げながら、失敗する原因を突き止め解消するための解説をしようと思います。
今回はWebサーバー(Apache)とゲームサーバー(Minecraft Java版 以降「Java版」は省略します)を例にして進めますが、ほかのサーバーソフトウェアについても参考になると思います。
事前にポート開放について解説している以下の記事を読むと作業の意味が理解しやすくなります
※当記事で紹介しているポート疎通チェックサービス等は主にCMAN様のサービスです。
サーバー機器での確認
まずはサーバー機から自分自身に接続できるか試してみましょう。
確認方法
サーバー機でクライアントソフト(ブラウザやMinecraftなど)を起動して確認します。
Apache(ブラウザ)の場合は「http://localhost/」
マイクラの場合は「サーバーアドレス: localhost」
接続できれば正常に機能しています。
GUIが無い等の理由でクライアントソフトを起動できない場合、「参考: ポート疎通チェック方法」で確認してください。(「サーバーの(ローカル)IPアドレス」は「localhost」)
原因1. サーバーソフトウェアが正常に機能していない
そもそもソフトが正常に動いていなければ、ほかの人どころか自分も接続できません。
サーバーを起動できているように見えても、正常に動いていないことがあります。
よく遭遇するのが「Address already in use」といったエラーです。
これは他のプロセスがポートをすでに使用してる場合や多重起動の場合に起こります。
「Address already in use」の解決方法
ポートを占拠してしまっているプロセスを終了するか、使用するポート番号を変更すれば治ります。
どのプロセスが占拠しているかわからない場合は、PCを再起動すれば解決できます。
二重ルーターでないか確認
次の作業に進む前に先に二重ルーターでないか確認してもらいます。
二重ルーターでもポート開放できないわけではありませんが、設定がややこしくなるだけで特にメリットはありませんので二重ルーターは解消してください。
確認方法
- コマンドプロンプトで「tracert -4 google.com」コマンドを実行
- ローカルIPアドレス(これはルーターのローカルIPアドレス)が何個あるか数える
- 一つだけなら二重ルーターでは無いが、二つあれば二重ルーター
解決方法
片方のルーターをブリッジモードに変更すれば解消されます。
LANからの接続
次は同じLAN(家など一つの建物の中のネットワーク)からの接続を試します。
確認方法
サーバーと同じネットワークに接続した、別の機器を用意します。(スマホや別のPCを用意して、同じWi-Fiのアクセスポイントに接続するか有線LANで同じルーターに繋ぎます)
ポート開放の成功・失敗に関わらずLAN内(家庭内)からは常にローカルIPアドレスで接続します。
グローバルIPアドレスではありません。
その機器から、Apacheの場合は「http://サーバー機のローカルIPアドレス/」、マイクラの場合は「サーバーアドレス: サーバー機のローカルIPアドレス」で接続できれば成功です。
同じく「参考: ポート疎通チェック方法」でも確認できます。
サーバー機のローカルIPアドレスは「参考: IPアドレスの確認方法」で調べてください。
原因1. 接続する際のサーバー機ローカルIPアドレスが間違えている
ローカルIPアドレスを固定していない場合、何かの拍子でローカルIPアドレスが変わることがあります。
サーバーを運営する場合はローカルIPアドレスを固定したほうが都合がいいので固定してください。
ローカルIPアドレスの固定方法はOSによって異なるので各自で検索してください。
筆者の場合、ルーターのローカルIPアドレスは192.168.1.1なので次のように設定してます。
基本的に「ipconfig」コマンドの実行結果をそのまま入力すれば良いです。
原因2. ファイアウォールやアンチウイルスソフトでブロックされている
一度ファイアウォールを無効にしてみて接続できるようになればファイアウォールが邪魔している可能性が高いです。
サーバーソフト初回起動時には画像のようにファイアウォールの警告画面が出るはずです。
無意識に「キャンセル」していませんか?キャンセルすると他のコンピュータから接続できません。
解決方法
キャンセルしてしまった場合はファイアウォールで許可しましょう。
以下の写真はOpenJDKでマイクラサーバーを起動している場合の一例です。
利用しているJRE・JDKによって名称は変わります。
LAN外からの接続
LANからの接続を確認できたら、次はLAN外(WAN)からの接続を試してみましょう。
確認方法
ポート開放設定をした後、「参考: ポート疎通チェック方法」の「外部から(Webサービス)」で外部から接続可能か確認します。
UDPの場合は友人に頼んで接続できるか試してもらいましょう。
もう一度言います、LAN内から接続する場合はローカルIPアドレス、LAN外から接続する場合はグローバルIPアドレスです
原因1. ポート開放できるISP(プロバイダ)でない
まずは自分が利用しているISPと契約内容を確認することを強くお勧めします。
同じISPでも契約内容によってはポート開放が不可能になります。
学生等の場合は契約者である保護者の方に確認して頂く必要がありますが、何とか説得してISPの情報を得ましょう。
以下の記事も説明材料にはなると思います。
PPPoE IPv4であれば従来の方法でポート開放可能ですが、IPv4 over IPv6の場合状況は複雑になります。
詳しくは以下の記事をご覧ください。
ポート開放できるかわからない場合はISPに直接聞くのが手っ取り早いです。
解決方法
IPv4 over IPv6を利用している場合、ISPに問い合わせるとPPPoE IPv4に無料で切り替えて貰える可能性があります。(ただし光コラボの場合は混雑時に速度低下する可能性があります)
原因2. ポート開放ソフトが上手く機能していない
ポート開放ソフトの多くはUPnP機能を用いています。
何度やってもポート開放が成功しない場合、そもそもルーターのUPnP機能が停止している場合があります。
解決方法
一番確実なのはルーターの設定画面からポート開放することです。
ルーターの設定画面は、「http://ルーターのローカルIPアドレス/」で表示できます。
(表示できない場合は、「(ルーターの型番) ポート開放」で調べると開き方がわかります)
筆者の場合(PR-500MI)「http://192.168.1.1/」で開けました
(筆者はv6プラスなので、ポート開放は「http://192.168.1.1:8888/t/」から行っています)
アクセス時にユーザー名とパスワードが求められますが、これは回線工事時に設定したログイン情報です。(契約者に聞いてください)
わからない場合はルーターのリセットで初期状態のパスワード(検索するとわかります)に戻ります。
これでもできない場合
筆者が考えるあらゆる可能性を書いてみましたが、これでもサーバー公開できない場合…
もう一度次の項目をしっかり確認してください
- ポート開放できるISPか?
- ルーターの設定画面から直接設定してみたか?
この二つはよく確認を疎かにしがちです。
「確認したけどまだできない!」っていう場合は、誰かに聞いてみましょう(もちろん筆者でもいいです)
誰かに聞くときに示す情報
何も情報なしで「できません!」と言うと相手が困ってしまいます。
質問するときは次の項目を書いておくといいと思います
- 使っているルーター(重要!)
- 契約しているISPや契約プラン(重要!)
- サーバー機のOS
- ネットワーク構成(図で書くとわかりやすい)
- 試したこと
代替手段
サーバーを公開できなかった場合、次の代替手段があります
(すべてマインクラフト向けに書きましたが、webサーバー等にも応用できます)
- ngrok : 【ポート開放もhamachiも必要なし】マイクラ自宅鯖の立て方
- serveo : 【Hamachi・ポート開放必要なし!】マイクラ自宅鯖の立て方(serveo版)
- playit.gg(現在は一部ゲームのみ対応) : 【ポート開放なし】最速でクロスプレイ鯖を作る
参考: IPアドレスの確認方法
一般家庭のネットワークの場合、ローカルIPアドレスは「192.168.x.x」です。
ローカルIPアドレスとグローバルIPアドレスの違いは「データの送信先を決める方法」をご覧ください。
サーバー機のローカルIPアドレス
Windows
- コマンドプロンプトで「ipconfig」コマンドを実行
- 「IPv4 アドレス」がサーバー機のローカルIPアドレスです
有線LANの場合「Wireless LAN adapter Wi-Fi」が「イーサネット アダプター」になります
Linux
- 「ip addr」コマンドを実行
- 「inet」がサーバー機のローカルIPアドレスです
「2: enp0s3」は環境によって異なります。
ルーターのローカルIPアドレス
Windows
「ipconfig」の実行結果の「デフォルト ゲートウェイ」がルーターのローカルIPアドレスです。
Linux
- 「route -n」コマンドを実行
- 一行目の「Gateway」がルーターのローカルIPアドレスです
グローバルIPアドレス
こちらのページで確認できます。
参考: ポート疎通チェック方法
接続可能かどうかを確認するのは、クライアントソフト(ブラウザやゲームソフト)で確認するのが一番正確ですが、OSの機能を用いて確認することもできます。
以下の方法はUDPでは利用できないため、UDPの場合はクライアントソフトから確認してください。
Windows
- PowerShellで「Test-NetConnection サーバーの(ローカル)IPアドレス -port ポート番号」コマンドを実行
- 「TcpTestSucceeded」が「True」なら成功
Linux
- 「nc -vz サーバーの(ローカル)IPアドレス ポート番号」コマンドを実行
- 「succeeded」と出れば成功
Android
いくつかのアプリがありますが、今回は「Port Tester (TCP)」を紹介します。
- 「IP」にサーバーの(ローカル)IPアドレスを入力
- 「Start Port」と「End Port」にポート番号を入力
- 「TEST」をタップ
- 「Port: ポート番号 Status: Open」なら成功
外部から(Webサービス)
- Portチェックテストページにアクセス
- 「現在のIPアドレス」をクリックしてグローバルIPアドレスを自動入力
- 「チェックポート番号」に確認するポート番号を入力
- 「ご注意・制約事項」を読んでチェックマーク
- 「Portチェック実行」をクリック
まとめ
今回は、サーバーが公開できないときに原因を見つけ、解決できるようにトラブルシューティングの手順を書きました。
また新しい気づきがあれば更新します。
コメント