2026年5月24日
2026年5月24日
NAT 越えができない場合の原因と対処法|CGNAT・対称型NAT・UDP遮断の見分け方
P2P 通信、WebRTC のビデオ通話、自宅サーバーへの接続、VPN の直接接続などがつながらない原因の多くは、「NAT の外側から内側へ通信を届けられない」ことにあります。この記事では、NAT 越えが失敗する仕組みを簡単に押さえたうえで、原因を起こりやすい順に挙げ、それぞれの確認方法と対処を説明します。結論を先に言うと、回線がキャリアグレード NAT(CGNAT)や IPv4 over IPv6 方式の配下にある場合や、相手が対称型 NAT の場合は、ポート開放や STUN だけでは解決できないことが多く、中継サーバー(TURN や VPN の中継)を使うのが現実的な解決策になります。
NAT 越えが難しい理由
家庭や会社のルーターは、内側のプライベート IP(192.168.x.x など)を1つのグローバル IP に変換して外へ出す NAT を行っています。内側から外へ出た通信には変換表(マッピング)ができるので返事は戻ってきますが、外側から突然来た通信には対応する変換表がないため、ルーターはどの機器に渡せばよいか分からず捨ててしまいます。
NAT 越えの技術は、この壁を次のような方法で乗り越えます。
- ポート開放(ポートフォワーディング):ルーターに「このポートに来た通信はこの機器へ」と固定の変換を設定する
- UPnP / NAT-PMP / PCP:アプリがルーターに自動でポート開放を依頼する
- STUN とホールパンチング:双方が外から見た自分のアドレスとポートを調べて交換し、同時に送り合うことで変換表を作る
- TURN などの中継:直接つながらない場合に、両者がグローバルに到達できるサーバーを経由する
WebRTC の ICE はこれらを組み合わせ、直接接続を試してから、だめなら中継に切り替えます。どの方法が使えるかは、回線と NAT の種類で決まります。
まず自分の回線の状態を確かめる
ルーターの WAN 側 IP と、外から見た IP を比べる
ルーターの管理画面で WAN 側(インターネット側)の IP アドレスを確認し、外部サービスから見た自分のグローバル IP と比べます。
# 外部から見た自分の IPv4 アドレスを表示する例(外部サービスを利用)
curl -4 https://ifconfig.me
結果は次のように読みます。
- 両方が同じ:ルーターがグローバル IP を直接持っています。ポート開放が使える状態です。
- WAN 側が 100.64.0.0〜100.127.255.255:CGNAT 用に予約された範囲(100.64.0.0/10)です。プロバイダー側でもう一段 NAT がかかっています。
- WAN 側が 10.x、172.16〜31.x、192.168.x などのプライベート IP:上位にもう1台ルーターがある(二重 NAT)か、プロバイダーの NAT 配下です。
経路の最初の数ホップを見る
traceroute -n 1.1.1.1
1ホップ目、2ホップ目と続けてプライベート IP が出てくる場合は、宅内で二重ルーターになっている可能性が高いです。
接続方式を確かめる
日本の光回線では、IPv6 の上で IPv4 を運ぶ方式(MAP-E 方式や DS-Lite 方式など)が広く使われています。これらは複数の利用者で1つの IPv4 アドレスを共有する仕組みで、方式によっては使えるポートが限られていたり、IPv4 のポート開放ができなかったりします。具体的な制限はプロバイダーやルーターの機種によって異なるため(2026年10月現在)、契約しているプロバイダーの案内で、自分の回線がどの方式か、ポート開放の可否を確かめてください。
原因と対処(起こりやすい順)
1. CGNAT・IPv4 共有方式の配下にある
症状:ルーターでポート開放を設定しても外から届かない。UPnP を有効にしても変わらない。
確認:前の節の WAN 側 IP の確認で、100.64.0.0/10 やプライベート IP だった場合、または IPv4 共有方式を使っている場合です。
対処:自分のルーターより上流で NAT がかかっているため、宅内の設定だけでは解決できません。選択肢は次のとおりです。
- プロバイダーの固定 IP オプションなど、グローバル IP を直接割り当てるサービスを検討する
- IPv6 で直接接続する(相手側も IPv6 を使え、ルーターの IPv6 ファイアウォールで受信を許可できる場合)
- グローバル IP を持つ VPS を中継点にして、VPN やトンネルで自宅とつなぐ
2. 二重 NAT になっている
症状:プロバイダー支給のルーター(ONU 一体型など)の下に、自分で買った無線ルーターをルーターモードでつないでいる。
確認:traceroute で宅内にプライベート IP のホップが2つ並ぶ、無線ルーターの WAN 側 IP がプライベート IP になっている。
対処:どちらか一方をブリッジモード(アクセスポイントモード)にして NAT を1段にします。それができない場合は、両方のルーターに順番にポート開放を設定する方法もありますが、管理が複雑になります。
3. ポート開放・ファイアウォールの設定ミス
症状:グローバル IP があり、ポート開放も設定したのにつながらない。
確認:次の点を一つずつ見ます。
- 転送先の内部 IP が、現在の機器の IP と一致しているか(DHCP でアドレスが変わっていないか)
- TCP と UDP の指定が、アプリの使うプロトコルと合っているか
- 転送先の機器の OS ファイアウォール(Windows Defender ファイアウォール、ufw など)がそのポートの受信を許可しているか
- アプリがそのポートで待ち受けているか(Linux なら
ss -tulpn、Windows ならnetstat -ano)
対処:転送先の機器は固定 IP か DHCP の予約にし、プロトコルとポートをアプリの仕様に合わせます。開放するポートは必要最小限にとどめてください。
4. 内側から自分のグローバル IP で試している(ヘアピン NAT)
症状:外出先のスマートフォンからはつながるのに、同じ LAN 内から自分のグローバル IP やドメイン名で接続するとつながらない。
確認:モバイル回線など、LAN の外から試して結果が変わるか。
対処:ルーターが NAT ループバック(ヘアピン NAT)に対応していないと、内側から自分のグローバル IP 宛てに出た通信は折り返されません。LAN 内からは内部 IP で接続する、LAN 内用の DNS で内部 IP を返す、などで対応します。故障ではないので、テストは外から行ってください。
5. 相手または自分が対称型 NAT
症状:STUN を使った P2P 接続や WebRTC の直接接続が、特定の組み合わせでだけ失敗する。
確認:WebRTC なら、Chrome の chrome://webrtc-internals で ICE の候補(candidate)を見ます。host は内部アドレス、srflx は STUN で分かった外から見たアドレス、relay は TURN 経由のアドレスです。srflx は得られているのに直接接続が成立しない場合、どちらかが宛先ごとに別のポートを割り当てる対称型 NAT である可能性があります。
対処:対称型 NAT 同士ではホールパンチングが成立しにくいため、TURN サーバーを用意して中継させます。オープンソースの coturn がよく使われます。TURN は通信をすべて中継するので、サーバーの帯域と、認証付きで運用することに注意してください。
# coturn の設定例(/etc/turnserver.conf の一部。値は環境に合わせる)
listening-port=3478
tls-listening-port=5349
min-port=49152
max-port=65535
realm=turn.example.com
use-auth-secret
static-auth-secret=your-shared-secret
6. UDP が遮断されている
症状:会社や公衆 Wi-Fi など、特定のネットワークからだけつながらない。
確認:同じ端末をモバイル回線につなぎ替えると成功するかを見ます。多くの P2P 技術や VPN(WireGuard など)は UDP を使うため、UDP を止めるネットワークではつながりません。
対処:TURN を TCP や TLS(443番ポートなど)でも待ち受けさせて、UDP が使えないときの逃げ道を作ります。社内ネットワークの場合は、規程に従い管理者に相談してください。
7. NAT の変換表がタイムアウトで消える
症状:一度はつながるが、しばらく無通信が続くと切れる。
確認:無通信の時間と切断の関係を見ます。NAT の変換表は、特に UDP では一定時間通信がないと消えます。
対処:アプリ側で定期的に小さなパケットを送るキープアライブを設定します。WireGuard なら、NAT の内側にある側の [Peer] に次のように書きます。
[Peer]
PublicKey = your-peer-public-key
Endpoint = vpn.example.com:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
直接接続にこだわらない選択肢
CGNAT の配下や対称型 NAT の組み合わせでは、どれだけ設定を工夫しても直接接続できないことがあります。その場合は、グローバル IP を持つ VPS を中継点として WireGuard のハブにする、SSH のリモートポートフォワーディングで自宅のサービスを VPS 側に公開する、といった構成が現実的です。中継サーバーを置く場合は、OS とソフトウェアの更新、認証、不要なポートの遮断を忘れずに行ってください。
メッシュ型 VPN のサービスの中には、直接接続できないときに事業者の中継サーバーへ自動で切り替えるものもあります。仕組みや利用条件はサービスごとに異なるので、公式ドキュメントで確認してください。
まとめ
- NAT 越えの失敗は、外から来た通信に対応する変換表がないことが根本の原因
- まずルーターの WAN 側 IP と外から見た IP を比べ、CGNAT(100.64.0.0/10)、二重 NAT、IPv4 共有方式かどうかを確かめる
- 原因は CGNAT、二重 NAT、ポート開放とファイアウォールの設定ミス、ヘアピン NAT、対称型 NAT、UDP 遮断、変換表のタイムアウトの順に確認する
- 上流の NAT や対称型 NAT は宅内の設定では解決できないので、TURN や VPS を使った中継、IPv6 での直接接続を検討する
- 開放するポートは最小限にし、中継サーバーは認証と更新を前提に運用する