2重ルーターでもポート開放はできる|親機から子機、子機からPCへ通す設定と他の解決策

この記事について

自宅でサーバーを公開しようとすると、よく出てくるのが 2重ルーター問題 です。

例えば、こんな構成です。

インターネット
  ↓
ONU / ホームゲートウェイ / 親ルーター
  ↓
子ルーター
  ↓
PC / Mac / サーバー

この状態でPC上のMinecraftサーバー、Webサーバー、ゲームサーバーなどを外部に公開したい場合、子ルーターだけでポート開放しても外から届かないことがあります。

理由は、通信が 親ルーターと子ルーターの2段階で止まる からです。

結論から言うと、2重ルーターでもポート開放はできます。
基本は次の流れです。

親ルーター: 外部から来た通信を子ルーターへ送る
子ルーター: 親ルーターから来た通信をPCへ送る
PC: ファイアウォールで受け入れる

この記事では、親機から子機へ開放し、子機からPCへ通す方法を中心に、他の解決策もまとめます。

先に結論

2重ルーターでポート開放する方法は、大きく分けて4つあります。

  1. 親ルーターから子ルーターへ転送し、子ルーターからPCへ転送する
  2. 子ルーターをブリッジモード / APモードにして2重ルーターをやめる
  3. 親ルーターのDMZに子ルーターを指定する
  4. ポート開放を使わず、VPNやトンネルサービスを使う

一番きれいなのは、2の ブリッジモード / APモード です。
ただし、環境によっては親ルーターを触れなかったり、子ルーターの機能を使いたかったりするので、その場合は1の2段階ポート開放を使います。

2重ルーターとは何か

2重ルーターとは、ルーターが2台あり、両方でNATが動いている状態です。

NATとは、簡単に言うと「家の中の端末を、インターネットに出られるように変換する仕組み」です。

普通の家庭では、ルーターが1台だけならこうなります。

インターネット
  ↓
ルーター
  ↓
PC

この場合、外から来た通信はルーターで止まります。
だから、ルーターに「このポートに来た通信はPCへ送って」と設定します。

これがポート開放です。

2重ルーターでは、こうなります。

インターネット
  ↓
親ルーター
  ↓
子ルーター
  ↓
PC

外から来た通信は、まず親ルーターで止まります。
親ルーターを通っても、次に子ルーターでまた止まります。

そのため、子ルーターだけを設定してもダメです。
親ルーターにも、子ルーターへ転送する設定が必要になります。

まず確認すること

設定を始める前に、次の3つを確認します。

確認1:公開したいポート番号

どのサービスを公開するかで、使うポート番号が変わります。

例です。

Minecraft Java Edition: 25565/TCP
Webサーバー HTTP: 80/TCP
Webサーバー HTTPS: 443/TCP
SSH: 22/TCP
独自アプリ: アプリ側で指定したポート

Minecraft Java版なら、基本は 25565/TCP です。
ゲームやアプリによってはUDPが必要な場合もあるので、公式ドキュメントや設定画面を確認します。

確認2:PCのローカルIPアドレス

サーバーを動かすPCのIPアドレスを確認します。

WindowsならコマンドプロンプトやPowerShellで確認できます。

ipconfig

Macならターミナルで確認できます。

ifconfig

または、システム設定のネットワーク画面でも確認できます。

よくあるローカルIPはこんな形です。

192.168.1.23
192.168.10.50
192.168.11.20

このIPはあとで子ルーターの転送先に使います。

確認3:子ルーターのWAN側IPアドレス

2重ルーターで特に重要なのが、子ルーターの WAN側IPアドレス です。

子ルーターの管理画面に入り、インターネット側、WAN側、上位回線側などの項目を見ます。

例えば、子ルーターのWAN側IPが次のようになっているとします。

192.168.1.50

この場合、親ルーターから見た子ルーターは 192.168.1.50 です。
親ルーターのポート開放では、この 192.168.1.50 に転送します。

一方、PCのIPが次のようになっているとします。

192.168.10.20

この場合、子ルーターから見たPCは 192.168.10.20 です。
子ルーターのポート開放では、この 192.168.10.20 に転送します。

基本構成:親機から子機、子機からPCへ

2重ルーターでの基本的な流れはこうです。

外部ユーザー
  ↓ グローバルIP:25565
親ルーター
  ↓ 192.168.1.50:25565
子ルーター
  ↓ 192.168.10.20:25565
PC

ポイントは、親ルーターと子ルーターで転送先が違うことです。

親ルーターでは、PCへ直接送るのではありません。
親ルーターから見えるのは子ルーターまでなので、親ルーターでは子ルーターのWAN側IPへ送ります。

子ルーターでは、PCのローカルIPへ送ります。

手順1:PCのIPアドレスを固定する

まず、PCのローカルIPを固定します。

IPが変わると、ポート開放の転送先がズレます。
昨日まで動いていたのに急に外から入れなくなった、という原因になりやすいです。

固定方法は2つあります。

方法1: PC側で固定IPを設定する
方法2: ルーター側のDHCP固定割り当てを使う

おすすめは、ルーター側の DHCP固定割り当て です。

ルーターの管理画面で、PCのMACアドレスに対して、いつも同じIPを渡すようにします。

例です。

PCのMACアドレス: AA:BB:CC:DD:EE:FF
固定するIP: 192.168.10.20

これで、PCが再起動してもIPが変わりにくくなります。

手順2:子ルーターのWAN側IPを固定する

次に、親ルーターから見た子ルーターのIPも固定します。

ここが変わると、親ルーターの転送先がズレます。

親ルーターの管理画面で、子ルーターに対してDHCP固定割り当てをします。

例です。

子ルーターのWAN側MACアドレス: 11:22:33:44:55:66
固定するIP: 192.168.1.50

この設定により、子ルーターのWAN側IPが 192.168.1.50 で固定されます。

手順3:子ルーターでPCへポート開放する

次に、子ルーター側でポート開放します。

例として、Minecraft Javaサーバーの 25565/TCP をPCへ転送する場合です。

設定する機器: 子ルーター
外部ポート: 25565
内部ポート: 25565
プロトコル: TCP
転送先IP: 192.168.10.20

ルーターによって表記は違います。

例えば、次のような名前になっていることがあります。

  • ポート開放
  • ポートフォワーディング
  • 静的IPマスカレード
  • NAT設定
  • 仮想サーバー
  • ポート変換

名前は違っても、やることは同じです。

このポートに来た通信を、この端末へ送る

子ルーター側の画面は、使っているメーカーや機種によってかなり違います。
そのため、この記事だけで全機種の画面を説明することはできません。

子機の設定画面の開き方、ログイン情報、ポート開放の項目名は、基本的にルーターの説明書やメーカー公式サポートに書いてあります。
わからない場合は、ルーター本体の型番で次のように検索すると見つけやすいです。

型番 ポート開放
型番 ポートフォワーディング
型番 静的IPマスカレード
型番 仮想サーバー

手順4:親ルーターで子ルーターへポート開放する

次に、親ルーター側で同じポートを子ルーターへ転送します。

例です。

設定する機器: 親ルーター
外部ポート: 25565
内部ポート: 25565
プロトコル: TCP
転送先IP: 192.168.1.50

ここで指定するのはPCのIPではありません。
子ルーターのWAN側IPです。

この設定で、外から 25565 に来た通信が親ルーターから子ルーターへ渡されます。

手順5:PC側のファイアウォールを許可する

ルーター設定が正しくても、PCのファイアウォールで止まることがあります。

Windowsなら、Windows Defender ファイアウォールでアプリやポートを許可します。
Macなら、システム設定のファイアウォールやアプリ許可を確認します。

Minecraftサーバーなら、Javaを許可する必要がある場合があります。

確認ポイントです。

  • サーバーアプリが起動している
  • 指定ポートで待ち受けている
  • ファイアウォールでブロックされていない
  • セキュリティソフトが止めていない

手順6:外部回線から確認する

ポート開放の確認は、できれば外部回線から行います。

同じWi-Fi内からグローバルIPにアクセスしても、ルーターによってはうまく確認できないことがあります。
これは、NATループバックやヘアピンNATと呼ばれる機能が関係します。

確認方法の例です。

  • スマホをWi-Fiから切ってモバイル回線で確認する
  • 友達に外部から接続してもらう
  • 外部のポートチェックサイトを使う

ただし、ポートチェックサイトは、サーバーアプリが起動していないと閉じているように見えることがあります。

例えばMinecraftなら、Minecraftサーバーを起動した状態で確認します。

具体例:Minecraftサーバーを2重ルーターで開ける

例として、次の環境を考えます。

親ルーターのLAN: 192.168.1.1
子ルーターのWAN側IP: 192.168.1.50
子ルーターのLAN: 192.168.10.1
PCのIP: 192.168.10.20
開けたいポート: 25565/TCP

設定はこうです。

子ルーターの設定

外部ポート: 25565
内部ポート: 25565
プロトコル: TCP
転送先IP: 192.168.10.20

親ルーターの設定

外部ポート: 25565
内部ポート: 25565
プロトコル: TCP
転送先IP: 192.168.1.50

これで、外から来た通信は次のように流れます。

外部
  ↓ 25565
親ルーター
  ↓ 192.168.1.50:25565
子ルーター
  ↓ 192.168.10.20:25565
PCのMinecraftサーバー

方法2:子ルーターをブリッジモード / APモードにする

2重ルーターを根本的に解消するなら、子ルーターをブリッジモードやAPモードにします。

この場合、子ルーターはルーターとしてのNATをやめ、Wi-Fiアクセスポイントやスイッチのように動きます。

構成はこうなります。

インターネット
  ↓
親ルーター
  ↓
子ルーター(APモード)
  ↓
PC

この場合、実質的にルーターは親ルーターだけになります。
ポート開放も親ルーターだけで済みます。

メリットです。

  • 設定がシンプル
  • 2重NATによるトラブルが減る
  • ポート開放が1回で済む
  • 家庭内ネットワークがわかりやすくなる

デメリットです。

  • 子ルーター独自のルーター機能が使えなくなる場合がある
  • 機種によって設定名が違う
  • 親ルーター側の管理が必要になる

もし特別な理由がないなら、個人的にはこの方法が一番おすすめです。

方法3:親ルーターのDMZに子ルーターを指定する

親ルーター側で、子ルーターをDMZに指定する方法もあります。

DMZとは、ざっくり言うと「親ルーターに届いた未指定の通信を、まとめて特定の端末へ送る」設定です。

2重ルーターでは、親ルーターのDMZ先に子ルーターのWAN側IPを指定します。

例です。

親ルーターのDMZ転送先: 192.168.1.50

そのうえで、子ルーター側では必要なポートだけPCへ開放します。

子ルーター: 25565/TCP を 192.168.10.20 へ転送

この方法だと、親ルーターで毎回ポートごとに設定しなくても、子ルーター側で管理できます。

ただし、DMZは設定を間違えると不要な通信まで子ルーターへ流します。
安全のため、子ルーター側では必要なポートだけ開け、管理画面を外部公開しないようにします。

方法4:ポート番号を変換する

外側と内側でポート番号を変えることもできます。

例えば、外からは 25566 で受けて、PC側の 25565 へ流す設定です。

外部ポート: 25566
内部ポート: 25565
転送先IP: 192.168.10.20

この方法は、同じサービスを複数台で動かしたいときに使えます。

例です。

外部25565 → PC1の25565
外部25566 → PC2の25565

ただし、接続する側はポート番号も指定する必要があります。

Minecraftなら、次のように指定します。

example.com:25566

それでも開かないときに見るポイント

2重ルーターで設定しても開かない場合、次を確認します。

グローバルIPが本当に来ているか

親ルーターのWAN側IPを確認します。

もし親ルーターのWAN側IPが次のようなプライベートIPなら、さらに上流に別のNATがあります。

10.x.x.x
172.16.x.x ~ 172.31.x.x
192.168.x.x
100.64.x.x ~ 100.127.x.x

特に 100.64.x.x 付近は、CGNATの可能性があります。

CGNAT環境では、自宅ルーターでポート開放しても外部から直接届かないことがあります。

この場合の対策は次のようなものです。

  • プロバイダにグローバルIPv4を申し込む
  • 固定IPオプションを使う
  • IPv6で公開できる構成にする
  • VPNやトンネルサービスを使う
  • VPSを中継する

IPv6/IPoE環境ではIPv4ポート開放ができないことがある

最近の回線では、IPv6 IPoEやMAP-E、DS-Liteのような方式が使われることがあります。

この場合、IPv4のポート開放が自由にできないことがあります。

ルーターにポート開放設定があっても、実際には外部から届かないことがあります。
この場合は、契約している回線方式やプロバイダの仕様を確認します。

対策としては、次のようなものがあります。

  • IPv4 PPPoE接続を使う
  • 固定IPサービスを使う
  • IPv6で公開する
  • VPSやトンネルを使う

NTT系機器でMAP-E設定画面に入れることがある

NTT系のホームゲートウェイやONU一体型ルーターを使っている環境では、通常の管理画面とは別に、MAP-E関連の設定画面が用意されていることがあります。

環境によっては、同じLAN内のブラウザから次のURLを開くと、MAP-Eの設定画面に入れる場合があります。

http://192.168.1.1:8888/fj/com.ntt.mape/mape/index.html

ここでポート開放、ポートマッピング、利用可能ポートの確認などができる場合があります。

ログイン画面が出る場合、初期設定ではユーザー名とパスワードが次の組み合わせになっていることがあります。

ユーザー名: user
パスワード: 0000

ただし、これはすべての機器で共通ではありません。
機種、契約、プロバイダ、過去の設定変更によって違う場合があります。

ログインできない場合は、機器本体のラベル、契約書類、取扱説明書、プロバイダの案内を確認します。
また、この情報は自分が管理している自宅の機器に対してのみ使ってください。

実際の画面では、左メニューに 静的IPマスカレード設定 という項目が表示されることがあります。
この 静的IPマスカレード設定 が、一般的に言うポート開放やポートフォワーディングに相当する設定項目です。

MAP-E設定画面の静的IPマスカレード設定

この画面では、IPv4アドレスや利用可能ポートの範囲も確認できます。
MAP-E環境では使えるポート範囲が決まっていることがあるため、まず利用可能ポートを確認し、その範囲内で外部ポートを設定します。

ただし、これはすべての環境で使えるわけではありません。
ルーターのIPアドレスが 192.168.1.1 ではない場合もありますし、機種、ファームウェア、回線方式、プロバイダによって画面が存在しないこともあります。

開けない場合は、次を確認します。

  • 親ルーターのIPアドレスが本当に 192.168.1.1
  • NTT系ホームゲートウェイを使っているか
  • MAP-E方式のIPv4 over IPv6回線か
  • ルーターの通常管理画面にポートマッピング項目がないか
  • プロバイダ側でポート開放に制限がないか

また、MAP-Eでは自由にすべてのIPv4ポートを開けられるとは限りません。
利用できるポート番号の範囲が決まっている場合があります。

例えば、Minecraft Java版の標準ポート 25565 が使えない場合は、利用可能な別ポートを外部ポートにして、内部ではPCの 25565 へ転送する方法を検討します。

外部ポート: 利用可能なポート番号
内部ポート: 25565
転送先IP: PCのローカルIP

この場合、接続する側にはポート番号つきで伝えます。

example.com:外部ポート番号

実際の静的IPマスカレード設定では、次のような入力画面になります。

静的IPマスカレード設定でのポート開放例

この画面の項目は、一般的なポート開放の言葉に置き換えるとこうです。

対象プロトコル:
  TCP または UDP を選ぶ

公開対象ポート:
  外部から接続してくるポート
  MAP-Eの場合は利用可能ポートの範囲内から選ぶ

LAN側宛先IPアドレス:
  通信を届けたいPCや子ルーターのIPアドレス

LAN側宛先ポート:
  PC側、または子ルーター側で実際に待ち受けているポート

例えば、利用可能ポートの都合で外部に 25565 を使えない場合は、公開対象ポートを利用可能な番号にします。
画像のように 25565 を入れている場合でも、画面に表示されている利用可能ポートに含まれていないなら、別の番号に変えます。

Minecraft Java版で、外部ポートを 12784、PC側のMinecraftサーバーを 25565 にするなら、考え方はこうです。

対象プロトコル: TCP
公開対象ポート: 12784
LAN側宛先IPアドレス: PCのローカルIP
LAN側宛先ポート: 25565

この場合、友達に伝える接続先は次のようになります。

自分のグローバルIPまたはドメイン:12784

この画面はルーター設定に関わるため、自分が管理している回線・機器でのみ使ってください。
設定変更前には、現在の設定をスクリーンショットやメモで残しておくと安心です。

サーバーアプリが待ち受けているか

ポート開放の設定が正しくても、PC側でサーバーが起動していなければ外からは開いて見えません。

Windowsなら、PowerShellで確認できます。

netstat -ano | findstr :25565

Macなら、次のように確認できます。

lsof -i :25565

何も出ない場合、サーバーアプリがそのポートで待ち受けていない可能性があります。

TCPとUDPを間違えていないか

サービスによって、TCPだけ、UDPだけ、または両方が必要な場合があります。

Minecraft Java版は基本的にTCPです。
Minecraft Bedrock版はUDPを使います。

この違いを間違えると、設定しているのに接続できません。

外部から確認しているか

同じWi-Fi内から自分のグローバルIPに接続して確認すると、うまくいかないことがあります。

スマホのモバイル回線や、別の家の回線から確認するのが確実です。

セキュリティ面の注意

ポート開放は、外部から自宅のPCへ通信を通す設定です。

便利ですが、リスクもあります。

最低限、次は守ったほうがいいです。

  • 必要なポートだけ開ける
  • 使わないポートは閉じる
  • ルーター管理画面を外部公開しない
  • PCやサーバーソフトを更新する
  • SSHを開けるならパスワードログインを避ける
  • 管理用ポートを誰でも入れる状態にしない
  • サーバーのログを見る

特に、よくわからないままDMZでPCを直接指定するのはおすすめしません。

DMZを使うなら、親ルーターから子ルーターへ渡す目的にとどめ、子ルーター側で必要なポートだけ開けるほうが安全です。

ポート開放を使わない方法

環境によっては、ポート開放を頑張るより別の方法を使ったほうが楽です。

Cloudflare Tunnel

WebサイトやHTTPサービスなら、Cloudflare Tunnelが便利です。

自宅のWebサーバーを外部へ公開するとき、ルーターのポート開放なしで公開できます。

ただし、Minecraft Java版のような通常のTCPゲームサーバーを、普通のクライアントからそのまま接続させる用途では注意が必要です。
構成によっては接続側にも cloudflared が必要になります。

Webサイト公開にはかなり向いていますが、ゲームサーバー公開では用途に合うか確認が必要です。

Tailscale / ZeroTier

友達や自分の端末だけで使うなら、TailscaleやZeroTierのようなVPN型のサービスも便利です。

メリットです。

  • ポート開放がいらない
  • 身内だけで安全に接続しやすい
  • CGNAT環境でも使いやすい

デメリットです。

  • 参加者にもアプリの導入が必要
  • 不特定多数向けの公開サーバーには向きにくい

身内のMinecraftサーバーや自宅管理用なら、かなり現実的な選択肢です。

VPSを中継する

VPSを借りて、そこを中継地点にする方法もあります。

例えば、VPSにグローバルIPを持たせ、自宅PCとはVPNやリバーストンネルでつなぎます。

構成例です。

外部ユーザー
  ↓
VPS
  ↓ VPN / reverse tunnel
自宅PC

設定は少し難しくなりますが、自宅回線がCGNATでも公開しやすくなります。

どの方法を選ぶべきか

目的別に選ぶなら、こんな感じです。

普通に2重ルーターで開けたい:
  親ルーター → 子ルーター → PC の2段階ポート開放

できるだけシンプルにしたい:
  子ルーターをブリッジモード / APモードにする

親ルーター側の設定を減らしたい:
  親ルーターのDMZに子ルーターを指定

CGNATやIPv4制限で無理:
  グローバルIP契約、VPS、VPN、トンネルを検討

Webサイトを公開したい:
  Cloudflare Tunnelがかなり便利

身内だけで遊びたい:
  Tailscale / ZeroTier が楽

最終チェックリスト

2重ルーターでポート開放するときは、最後にこれを確認します。

  • 開けたいポート番号が合っている
  • TCP/UDPを間違えていない
  • PCのローカルIPを固定している
  • 子ルーターのWAN側IPを固定している
  • 子ルーターでPCへ転送している
  • 親ルーターで子ルーターへ転送している
  • PCのファイアウォールで許可している
  • サーバーアプリが起動している
  • 外部回線から確認している
  • 親ルーターのWAN側にグローバルIPが来ている
  • CGNATやIPv6 IPoEの制限に引っかかっていない

このチェックを上から潰していけば、かなり原因を絞れます。

まとめ

2重ルーターでもポート開放はできます。

基本は、親機から子機へ、子機からPCへ、通信を2段階で渡すことです。

親ルーター → 子ルーター → PC

ただし、必ずしも2段階ポート開放がベストとは限りません。

子ルーターをブリッジモードにできるなら、そのほうがシンプルです。
親ルーターを細かく触りたくないなら、DMZで子ルーターへまとめて渡す方法もあります。
そもそも回線がCGNATやIPv4制限に引っかかっているなら、ポート開放ではなくVPNやトンネル、VPSを考えたほうが早いです。

大事なのは、今どこで通信が止まっているのかを分けて考えることです。

外から親ルーターに届いているか
親ルーターから子ルーターに届いているか
子ルーターからPCに届いているか
PC側でサーバーが受けているか

この順番で確認すれば、2重ルーターのポート開放はかなり理解しやすくなります。