2026年7月17日
2026年7月17日
Carrier-grade NAT(CGNAT)の越え方|自宅や拠点のサーバーを外から使うための判定と回避策
キャリアグレード NAT(CGNAT)の配下では、ルーターでポート開放をしても外からの接続は届きません。越えるには、グローバル IPv4 アドレスを得る、IPv6 で直接つなぐ、外部に中継点(VPS やトンネルサービス、メッシュ VPN)を置く、のいずれかを選びます。この記事では、まず自分の回線が本当に CGNAT 配下かを判定する方法を示し、そのうえで回避策を手軽さと用途の順に、設定例と注意点つきで解説します。
CGNAT とは何か、なぜポート開放が効かないのか
CGNAT は、通信事業者が1つのグローバル IPv4 アドレスを複数の契約者で共有するための NAT です。IPv4 アドレスの不足に対応するため、モバイル回線や一部の固定回線、IPv4 over IPv6 方式の接続サービスで使われています。
家庭のルーターの NAT に加えて、事業者側でもう一段 NAT がかかるため、外から見えるグローバルアドレスとポートは事業者の装置のものです。自宅ルーターでポート開放をしても、その手前の事業者の装置が外からの接続を誰に渡すか知らないため、通信が届きません。
日本の IPoE 接続で広く使われている IPv4 over IPv6 方式(MAP-E や DS-Lite など)でも、IPv4 は事業者側で共有されます。MAP-E 系の方式では、契約者ごとに使えるポートの範囲が割り当てられ、その範囲内に限ってポート開放ができる場合がありますが、使えるポート番号は自由に選べず、対応はルーターと事業者のサービスによって異なります(2026年10月現在)。
手順1:CGNAT 配下かどうかを判定する
ルーターの WAN 側アドレスと外から見えるアドレスを比べる
- ルーターの管理画面で、インターネット側(WAN 側)の IPv4 アドレスを確認します。
- 同じ回線につないだ端末から、外部のサービスで自分のグローバルアドレスを調べます。
curl -4 https://ifconfig.me
# または
curl -4 https://api.ipify.org
この2つが一致すれば、CGNAT は使われていません。一致しない場合は、間にもう1段の NAT があります。
WAN 側のアドレスで、次のように判断できます。
- 100.64.0.0〜100.127.255.255(100.64.0.0/10): CGNAT 用に予約された共有アドレス(RFC 6598)です。CGNAT 配下とみてよいでしょう。
- 10.x.x.x、172.16〜31.x.x、192.168.x.x: プライベートアドレスです。事業者の CGNAT の場合もあれば、自宅にルーターが2台あって二重に NAT している場合もあります。上流に自分の機器がないかを先に確認します。
- IPv4 アドレスが表示されない、または IPv6 のみ: IPv4 over IPv6 方式で接続している可能性があります。契約しているサービスの方式を事業者の案内で確認します。
経路からも確かめる
traceroute -n 8.8.8.8 # Linux/macOS
tracert -d 8.8.8.8 # Windows
自宅ルーターの次の数ホップに 100.64.0.0/10 のアドレスが現れる場合も、事業者側の NAT を通っている手がかりになります。ただし、経路上の機器が応答しないこともあるため、判定の決め手は前述のアドレス比較です。
手順2:回避策を選ぶ
用途と手間で選び方が変わります。公開したいのが Web サイトなのか、自分だけが使う SSH や NAS なのかを先に決めておくと、選択肢が絞れます。
方法1:事業者にグローバル IPv4 アドレスを依頼する
最も素直な方法です。事業者によっては、固定 IP のオプションや、CGNAT を使わない接続方式への切り替えを用意しています。条件や提供の有無は事業者とプランで異なるため、契約先の案内を確認してください。サーバーを長期にわたって公開する予定なら、まず検討する価値があります。
方法2:IPv6 で直接つなぐ
回線が IPv6 に対応していれば、IPv6 アドレスは端末ごとにグローバルなので、NAT を越える必要がありません。ただし、接続する側も IPv6 を使える必要があります。また、多くのルーターは外から IPv6 で入ってくる通信を既定で遮断しているため、必要なポートだけを許可する設定が要ります。許可した範囲は外部に公開されるので、サーバー側のファイアウォールと認証も合わせて設定します。
方法3:メッシュ VPN を使う(自分や社内だけで使う場合)
Tailscale や ZeroTier のようなメッシュ VPN は、NAT の内側同士で直接つながる経路を探し、つながらない場合は事業者の中継サーバー経由で通信します。双方にクライアントを入れるだけで、CGNAT 配下の端末に SSH や管理画面でアクセスできるようになります。
CGNAT の方式によっては直接の経路が確立できず、中継経由になって速度が落ちることがあります。また、外部の不特定の人に Web サイトを公開する用途には基本的に向きません。Tailscale には特定のサービスをインターネットに公開する機能(Funnel)もありますが、提供条件や対応プロトコルは変わることがあるため、公式ドキュメントで確認してください。
方法4:トンネルサービスで Web を公開する
Cloudflare Tunnel(cloudflared)のように、内側から外部のサービスへ接続を張り、その接続を通して外からのリクエストを受け取る方式もあります。内側から外へ出る通信だけで済むため、CGNAT 配下でも Web サイトや管理画面を公開できます。
手軽な反面、通信はサービス事業者を経由します。利用規約、対応しているプロトコル、ドメインの管理方法を確認し、管理画面を公開する場合はサービス側のアクセス制限も合わせて設定します。
方法5:VPS を中継点にする
グローバル IPv4 アドレスを持つ VPS を1台用意し、自宅側から VPS へ接続を張っておく方法です。自分で構成を管理でき、Web 以外のプロトコルも通せます。
WireGuard で自宅と VPS をつなぐ場合、自宅側の設定で PersistentKeepalive を指定するのがポイントです。CGNAT は通信がしばらく無いと対応表から接続を消してしまうため、定期的にパケットを送って経路を保ちます。
# 自宅側 /etc/wireguard/wg0.conf の例(鍵とアドレスは置き換える)
[Interface]
PrivateKey = your-home-private-key
Address = 10.99.0.2/24
[Peer]
PublicKey = your-vps-public-key
Endpoint = vps.example.com:51820
AllowedIPs = 10.99.0.1/32
PersistentKeepalive = 25
VPS 側では、Nginx などのリバースプロキシで受けたリクエストを 10.99.0.2 へ転送します。一時的な用途なら、SSH のリモートフォワードでも代用できます。
# 自宅のサーバーから実行: VPS の 8080 番を自宅の 80 番につなぐ
ssh -N -R 8080:localhost:80 user@vps.example.com
VPS 側で転送されたポートは、既定では VPS 自身の localhost だけで待ち受けます。外部に開くには sshd の GatewayPorts の設定が関係しますが、むやみに開かず、VPS のリバースプロキシ経由で公開するほうが管理しやすくなります。いずれの方法でも、VPS の OS 更新、ファイアウォール、SSH の鍵認証は欠かせません。
つまずきやすい点
- 二重ルーターを CGNAT と取り違える: ONU 一体型ルーターと市販ルーターを両方ルーターとして動かしていると、同じ症状になります。上流の機器をブリッジ(アクセスポイント)モードにすると解決することがあります。
- ポート開放の確認方法: 同じ回線の内側から自分のグローバルアドレスに接続して確かめると、ルーターの機能によって結果が変わるため、モバイル回線など外部から試します。
- 接続が時間とともに切れる: NAT の対応表の保持時間を超えている可能性があります。キープアライブを設定します。
- 公開範囲の広げすぎ: 越えられるようになった時点で、そのサービスはインターネットに露出します。管理画面には認証とアクセス元の制限をかけます。
WordPress サイトの運営者が知っておきたいこと
CGNAT は、サイトを訪れる側にも影響します。モバイル回線などでは、多数の利用者が同じ IPv4 アドレスからアクセスしてくるため、IP アドレス単位でログイン試行を制限したり、コメントを遮断したりすると、無関係の利用者まで巻き込むことがあります。IP だけに頼らず、レート制限の閾値を調整したり、CAPTCHA や二要素認証などほかの手段と組み合わせたりするのが現実的です。アクセスログを調べる際も、同じ IP からのアクセスが同一人物とは限らない点を念頭に置いてください。
まとめ
- CGNAT 配下では、自宅ルーターのポート開放だけでは外からの接続は届かない
- ルーターの WAN 側アドレスと外から見えるアドレスを比べ、100.64.0.0/10 なら CGNAT と判断できる
- 回避策は、グローバル IPv4 の依頼、IPv6 での直接接続、メッシュ VPN、トンネルサービス、VPS 中継の5つが代表的
- 自分だけが使うならメッシュ VPN、Web 公開ならトンネルサービスや VPS 中継が向く
- 越えた後は公開範囲を最小にし、認証とアクセス制限を設定する