2026年6月24日
2026年6月24日
PAT と DNS64 の違い|IPv4 の共有と IPv6 からの IPv4 接続、役割と組み合わせ方
PAT はポート番号まで書き換えて1つの IPv4 アドレスを多数の端末で共有する「アドレス変換」の仕組みで、DNS64 は IPv4 しか持たない名前に対して IPv6 のアドレス(AAAA レコード)を合成して返す「DNS」の仕組みです。働く層も目的も違い、DNS64 は単独ではパケットを1つも変換しません。この記事では、両者の役割の違い、混同されやすい理由、DNS64 が NAT64(IPv6 と IPv4 の間の PAT 型の変換)と組み合わさって動く流れ、そしてそれぞれが効いているかをコマンドで確かめる方法を説明します。
PAT とは:ポート番号で1つの IPv4 アドレスを共有する
PAT(Port Address Translation)は Cisco などのネットワーク機器でよく使われる呼び方で、一般的な用語では NAPT(Network Address and Port Translation)、Linux では IP マスカレード、Cisco の設定では NAT overload と呼ばれるものとほぼ同じです。家庭用ルーターが「NAT」と表示している機能の多くも、実際にはこの PAT です。
社内の 192.168.1.10 と 192.168.1.11 が同時に外のサーバーへ接続すると、ルーターは送信元をどちらもグローバル IP(例: 203.0.113.5)に書き換えます。そのままでは戻りのパケットをどちらに返すか区別できないため、送信元ポートも別々の番号に付け替え、「203.0.113.5:40001 は 192.168.1.10:51515 のこと」という対応を変換表に記録します。戻りのパケットはこの表を引いて元の宛先に戻されます。
ここから PAT の性質が見えてきます。
- 変換表は内側からの通信で作られるため、外から始まる接続は、ポート転送(静的な対応)を設定しない限り内側へ届かない
- 1つのグローバル IP で同時に使えるポートには上限があり、大量の同時接続をする環境ではポートが不足する
- 変換の対象は IPv4 から IPv4 で、アドレスの種類(IPv4/IPv6)は変わらない
Cisco IOS では、たとえば次のような設定が PAT です(インターフェース名やアクセスリストは環境に合わせて読み替えてください)。
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat inside source list 1 interface GigabitEthernet0/0 overload
末尾の overload が、ポート番号を使って1つのアドレスを共有する指定です。
DNS64 とは:IPv6 だけの端末のために AAAA を合成する
DNS64 は、IPv6 しか使えない端末(IPv6 シングルスタック)が、IPv4 しか持たないサーバーへ接続できるようにするための DNS サーバーの機能です。
IPv6 だけの端末が example.net の AAAA レコードを問い合わせたとき、本物の AAAA が無く A レコード(例: 198.51.100.7)だけがあれば、DNS64 サーバーはその IPv4 アドレスを決まった IPv6 プレフィックスに埋め込んだ AAAA を作って返します。標準的に使われる Well-Known Prefix は 64:ff9b::/96 で、198.51.100.7 なら 64:ff9b::c633:6407 になります。本物の AAAA がある名前については、通常は合成せずにそのまま返します。
端末はこの合成アドレスへ IPv6 で接続します。しかし DNS64 がしたのは「宛先を教えた」ことだけで、IPv6 のパケットを IPv4 に変換しているわけではありません。その変換を受け持つのが NAT64 です。
両者が混同されやすい理由と、本当の関係
PAT と DNS64 が並べて語られるのは、どちらも IPv4 アドレス不足への対策として登場し、名前に「変換」の印象があるためです。ただし実際に比べるべき組み合わせは次の関係です。
- PAT:IPv4 → IPv4 の変換(アドレス+ポート)。DNS は関係しない
- NAT64:IPv6 → IPv4 の変換(アドレス+ポート)。多くの実装は複数の端末で1つの IPv4 アドレスを共有するので、PAT と同じくポートで区別する
- DNS64:DNS の応答を作り替えるだけ。NAT64 とセットで使う前提
つまり DNS64 と組んで動くのは NAT64 であり、その NAT64 の中身が「アドレスの種類をまたぐ PAT」のようなもの、と整理すると分かりやすくなります。
| 項目 | PAT(NAPT) | DNS64 |
|---|---|---|
| 働く場所 | ルーター・ゲートウェイ | DNS リゾルバー |
| 書き換えるもの | パケットの送信元 IP とポート | DNS の応答(AAAA を合成) |
| 対象の通信 | IPv4 → IPv4 | IPv6 だけの端末 → IPv4 だけのサーバー |
| 単独で通信できるか | できる | できない(NAT64 が必要) |
| 主な副作用 | 外からの接続が届かない、ポート枯渇 | IPv4 リテラル指定が使えない、DNSSEC 検証との衝突 |
IPv6 だけの環境から IPv4 サイトへ接続する流れ
DNS64 と NAT64 を組み合わせた通信は、次の順で進みます。
- IPv6 だけの端末が DNS64 サーバーへ AAAA を問い合わせる
- 本物の AAAA が無いので、DNS64 が
64:ff9b::に IPv4 アドレスを埋め込んだ AAAA を返す - 端末はその IPv6 アドレス宛てに接続する。経路は NAT64 ゲートウェイへ向いている
- NAT64 が宛先から IPv4 アドレスを取り出し、送信元を自分の IPv4 アドレスとポートに付け替えて送り出す
- 戻りのパケットは NAT64 の変換表を引いて IPv6 に戻され、端末へ届く
4 と 5 の動きは、IPv4 の PAT とほぼ同じです。そのため NAT64 の配下でも、外から始まる接続が届かない、ポートが足りなくなるといった PAT と同種の制約が起こります。
クラウドでも、IPv6 専用のサブネットから IPv4 サービスへ出るために DNS64 と NAT64 を組み合わせる構成が用意されています。たとえば AWS ではサブネットの DNS64 設定と NAT ゲートウェイの NAT64 を組み合わせる方式があります。設定画面の表記や対応範囲は変わることがあるため、各クラウドの公式ドキュメントで確認してください(2026年10月現在)。
DNS64 環境で起きやすい問題
DNS64 は名前解決を通る通信にしか効きません。そのため次のようなケースでつまずきます。
- IPv4 アドレスを直接書いた接続:設定ファイルやアプリに
198.51.100.7のように書いてあると DNS を通らず、IPv6 だけの端末からは届きません。端末側で IPv4 を扱えるようにする 464XLAT(端末側の CLAT と NAT64 の組み合わせ)が使われるのはこのためです - DNSSEC を端末側で検証している場合:合成した AAAA は署名と一致しないため、検証する端末では失敗します
- 社内 DNS とクラウド DNS の混在:DNS64 を有効にしたリゾルバーと、そうでないリゾルバーを端末が使い分けていると、同じ名前で結果が変わります
WordPress のサーバーを IPv6 だけの環境に置いた場合も、外部 API、更新サーバー、SMTP などの接続先が IPv4 しか持たないと、DNS64 と NAT64 が無ければ接続に失敗します。プラグイン更新や外部連携だけが失敗する場合は、まず接続先の AAAA の有無を確認すると原因に近づけます。
それぞれが効いているかを確かめる
PAT の変換を確認する
Linux のルーターでは、変換表(conntrack)を見ると、内側のアドレスとポートが外側のどのポートに対応しているかが分かります。conntrack コマンドは conntrack-tools パッケージに含まれます。
# NAT のルール(MASQUERADE / SNAT)の確認
sudo iptables -t nat -L POSTROUTING -n -v
# 変換中の接続の一覧(内側 192.168.1.10 の分)
sudo conntrack -L -s 192.168.1.10
Cisco 機器なら show ip nat translations で、内側と外側のアドレス・ポートの対応を一覧できます。
DNS64 が合成しているかを確認する
DNS64 の動作確認には、IPv4 しか持たないことが決まっている ipv4only.arpa を使うのが定番です。AAAA を問い合わせて合成アドレスが返れば、DNS64 が効いています。
# 使っているリゾルバーに問い合わせる
dig AAAA ipv4only.arpa +short
# DNS64 が効いていれば、次のようなアドレスが返る
# 64:ff9b::c000:aa
# 64:ff9b::c000:ab
返ってきたアドレスの前半が、その環境で使われている NAT64 のプレフィックスです。何も返らなければ、使っているリゾルバーで DNS64 が有効になっていません。続けて curl -6 -I https://IPv4だけのサイト/ のように IPv6 で接続を試し、応答があれば NAT64 まで通っています。名前は解決できるのに接続できない場合は、合成プレフィックス宛ての経路が NAT64 に向いているかを確認します。
まとめ
- PAT(NAPT)は IPv4 のアドレスとポートを書き換えて1つのアドレスを共有する変換の仕組み
- DNS64 は IPv4 しか持たない名前に AAAA を合成して返す DNS の仕組みで、パケットは変換しない
- DNS64 は NAT64 と組み合わせて使い、NAT64 の動きは IPv6 から IPv4 へまたぐ PAT に近い
- DNS64 は IPv4 アドレスの直接指定や端末側の DNSSEC 検証と相性が悪い
- PAT は変換表(conntrack、
show ip nat translations)、DNS64 はdig AAAA ipv4only.arpaで確認できる