2026年6月7日

2026年6月7日

AAAAレコードを変更する方法|管理画面・ゾーンファイル・nsupdate・APIでの書き換え方とIPv6アドレスの書き間違い

AAAAレコードの変更は、IPv6アドレスの値を書き換えるだけの作業ですが、IPv6の表記は長く、1文字の打ち間違いや「インターネットから届かない種類のアドレス」を入れてしまう失敗が起きやすい作業です。この記事では、変更前に新しいアドレスが正しいかを確かめる方法と、管理画面・BINDのゾーンファイル・nsupdate・Route 53 や Cloudflare のAPIそれぞれでの書き換え方、変更後の確かめ方を説明します。TTLを下げて待つといった移転全体の段取りよりも、「値を正しく入れ替える」ことに焦点を当てます。

変更前に、新しいIPv6アドレスが正しいか確かめる

サーバーに実際に付いているアドレスか

新しいアドレスは、サーバーの管理画面に表示された値をそのまま写すより、サーバー上で確かめたほうが安全です。

# グローバルなIPv6アドレスだけを表示する
ip -6 addr show scope global

VPSによっては、割り当てられた範囲(例: /64)の中から自分で1つ選んでネットワーク設定に書く方式もあります。その場合は、DNSに入れるアドレスがサーバーのネットワーク設定に実際に書かれているかを確かめます。

DNSに入れてはいけない種類のアドレス

次のアドレスは、公開サイトのAAAAレコードには使いません。

  • **fe80:: で始まるアドレス**: リンクローカルアドレスです。同じネットワークの中だけで使われ、インターネットからは届きません。scope global を付けずに ip -6 addr を実行すると、グローバルアドレスと並んで表示されることが多いので、取り違えに注意します
  • **fd または fc で始まるアドレス**: ユニークローカルアドレス(ULA)で、組織の内部ネットワーク用です
  • **::ffff: で始まるアドレス**: IPv4アドレスをIPv6の形で表したもので、AAAAに入れる値ではありません
  • **2001:db8: で始まるアドレス**: 説明用に予約された範囲(RFC 3849)です。この記事の例でも使っていますが、手順書を写したときに残っていないか確かめます

表記の揺れは気にしなくてよいが、桁は確かめる

IPv6は、先頭の0の省略や、0が続く区間を :: でまとめる書き方ができます。2001:0db8:0000:0000:0000:0000:0000:0020 と 2001:db8::20 は同じアドレスです。DNSサーバーは内部で数値として保存するため、どちらの書き方で入れても結果は同じです。推奨される書き方(RFC 5952)は小文字・省略形なので、記録やドキュメントもその形にそろえると比較しやすくなります。

注意したいのは :: を1つのアドレスに2回使う書き方で、これは規格上無効です。また、区切りの数が足りない、区間に5桁以上ある、といった打ち間違いは、管理画面では入力エラーになりますが、ゾーンファイルでは読み込み時のエラーになります。

方式ごとの変更方法

作業の前に、現在のAAAAレコードの値とTTLを控えます。問題が出たときに同じ値で戻すためです。

dig example.com NS +short
dig @ns1.example-dns.net www.example.com AAAA +noall +answer

DNSサービスの管理画面で変更する

レコード一覧から種類が AAAA の行を探し、値を新しいアドレスに書き換えて保存します。同じ名前にAAAAが複数登録されている場合、その全部が利用者に返されます。古いアドレスの行を消し忘れると、一部の利用者だけ旧サーバーにつながる状態になるため、行の数も確かめます。画面の項目名や配置はサービスによって違い、変わることもあります(2026年10月現在)。

BINDのゾーンファイルで変更する

値を書き換え、SOAのシリアル番号を上げてから構文を確かめて再読み込みします。

; 変更前
www    300    IN    AAAA    2001:db8::10
; 変更後
www    300    IN    AAAA    2001:db8::20
named-checkzone example.com /etc/bind/zones/example.com.zone
rndc reload example.com

シリアル番号を上げ忘れると、セカンダリDNSが変更を取り込まず、ネームサーバーによって答えが違う状態になります。

nsupdate で変更する

動的更新を許可しているゾーンでは、nsupdate で古い値を消して新しい値を追加します。TSIG鍵で認証するのが一般的です。

nsupdate -k /etc/bind/keys/update.key <<'EOF'
server ns1.example.com
zone example.com
update delete www.example.com. AAAA 2001:db8::10
update add www.example.com. 300 AAAA 2001:db8::20
send
EOF

update delete に値まで書くと、その値の行だけが消えます。値を省くと、その名前のAAAAがすべて消えます。動的更新しているゾーンのファイルを手で編集すると変更が失われることがあるため、手で触るときは rndc freeze と rndc thaw で挟みます。

Route 53 で変更する

AWS CLI では、UPSERT を使うと既存の値を置き換えられます。

{
  "Comment": "change AAAA for www",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "www.example.com.",
        "Type": "AAAA",
        "TTL": 300,
        "ResourceRecords": [{ "Value": "2001:db8::20" }]
      }
    }
  ]
}
aws route53 change-resource-record-sets \
  --hosted-zone-id ZXXXXXXXXXXXXX \
  --change-batch file://change-aaaa.json

ResourceRecords に書いた値でレコード全体が置き換わるので、複数のアドレスを返したい場合は全部を並べます。実行結果に表示される変更IDを aws route53 get-change --id に渡すと、反映状況を確かめられます。

Cloudflare のAPIで変更する

レコードIDを調べてから、値だけを書き換えます。APIトークンはDNSの編集に必要な権限だけに絞り、環境変数などから読み込みます。

curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=AAAA&name=www.example.com" \
  -H "Authorization: Bearer $CF_API_TOKEN"

curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
  -H "Authorization: Bearer $CF_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"content":"2001:db8::20"}'

プロキシを有効にしたレコードでは、利用者に返るのはCloudflareのアドレスで、書き換えた値は表には出ません。その場合の確認はCloudflareの画面かAPIの応答で行います。APIの仕様は改訂されることがあるため、公式ドキュメントで確かめてから使ってください。

変更後の確かめ方

権威DNSのすべてに問い合わせ、新しい値だけが返ることを確かめます。

for ns in $(dig example.com NS +short); do
  dig @"$ns" www.example.com AAAA +norecurse +noall +answer
done

次に、IPv6で新しいサーバーに接続できるかを確かめます。手元にIPv6の回線が無い場合は、IPv6が使えるサーバーから実行します。

curl -6 -I https://www.example.com/

公開DNSでは、変更前のTTLが切れるまで古い値が返ることがあります。古いサーバーはその間も応答できるように残しておきます。Webサーバーが新しいアドレスで待ち受けているか、ファイアウォールでIPv6の80番と443番が開いているかも、つながらないときに確かめる点です。

まとめ

  • 新しいアドレスはサーバー上で確かめ、fe80::・fd・::ffff:・2001:db8: で始まる値を入れない
  • 表記の省略は結果に影響しないが、:: の重複や桁の誤りは入力・読み込みエラーになる
  • ゾーンファイルはシリアル番号を上げ、nsupdate は古い値を指定して消してから追加する
  • Route 53 の UPSERT は値の一覧ごと置き換わるので、残したいアドレスも並べる
  • 変更後はすべての権威DNSと curl -6 で確かめ、旧サーバーはTTLが切れるまで残す

お気軽にご相談ください

お見積りへ お問い合わせへ
▲