2026年6月14日

2026年6月14日

SRVレコードとAAAAレコードを併用する設定|SRVの向け先をIPv6でも接続できるようにする手順

SRVレコードをIPv6に対応させるときは、SRVそのものにIPv6アドレスを書くのではなく、SRVの「向け先(ターゲット)」に指定したホスト名にAAAAレコードを追加します。SRVはサービスの置き場所をホスト名とポート番号で示すだけで、IPアドレスは向け先のA・AAAAレコードから引かれるためです。この記事では、SRVとAAAAの関係、ゾーンの書き方、よくある誤り、IPv6で実際に接続できるかの確かめ方を説明します。

SRVとAAAAの関係

SRVレコードは、メールクライアントの自動設定(RFC 6186)、CalDAV・CardDAV(RFC 6764)、XMPP、SIPなど、「このドメインの○○サービスはどのサーバーの何番ポートか」をクライアントに教えるために使われます。クライアントは次の順で名前を解決します。

  1. _サービス名._プロトコル.ドメイン のSRVレコードを引き、向け先のホスト名とポート番号を得る
  2. 向け先のホスト名のA(IPv4)とAAAA(IPv6)を引く
  3. 得られたアドレスに、SRVで指定されたポート番号で接続する

つまり、SRVとAAAAを「併用する」というのは、同じ名前に2つのレコードを並べることではなく、SRVの向け先となるホスト名にAAAAを持たせることを指します。AAAAを置く場所を間違えると、IPv6では接続されません。

ゾーンの書き方

IMAPS(993番ポート)とメール送信(587番ポート)のサーバーを mail.example.com に置き、IPv4とIPv6の両方で受け付ける例です。

; SRV: 優先度 重み ポート 向け先
_imaps._tcp.example.com.       3600 IN SRV  0 1 993 mail.example.com.
_submission._tcp.example.com.  3600 IN SRV  0 1 587 mail.example.com.

; 向け先のホスト名にAとAAAAを置く
mail.example.com.              3600 IN A    203.0.113.25
mail.example.com.              3600 IN AAAA 2001:db8::25

SRVの4つの値は、左から優先度(小さいほど優先)、重み(同じ優先度の中での振り分け比率)、ポート番号、向け先です。向け先が1台なら、優先度0・重み1のように単純な値で問題ありません。

マネージドDNSの管理画面では、サービス名・プロトコル・優先度・重み・ポート・向け先を別々の欄に入力する形式が多く、欄の名前や並び順はサービスによって異なります(2026年10月現在)。ゾーンファイルの1行をそのまま貼り付ける形式ではないことが多いので、各欄に何を入れるかをサービスの資料で確かめてから入力します。

よくある誤り

1. AAAAをSRVの名前の側に置いている

_imaps._tcp.example.com にAAAAを追加しても、クライアントはこの名前ではSRVしか引かないため、意味がありません。AAAAは向け先のホスト名(上の例では mail.example.com)に置きます。

2. 向け先がCNAMEになっている

SRVの向け先は、AやAAAAを直接持つホスト名でなければならないと決められています(RFC 2782)。mail.example.com が別名(CNAME)になっていると、クライアントによって解決できたりできなかったりします。向け先にはCNAMEではないホスト名を指定し、そこにAとAAAAを置きます。

3. 向け先にIPアドレスを書いている

SRVの向け先にはホスト名しか書けません。2001:db8::25 のようなアドレスを直接書くことはできないので、AAAAを持つホスト名を用意して指定します。なお、向け先に .(ドット1文字)を書くと「このサービスは提供していない」という意味になります。

4. 末尾のドットが無い

BINDのゾーンファイルでは、末尾にドットの無い名前にはゾーン名が付け足されます。向け先を mail.example.com と書くと mail.example.com.example.com. として扱われるため、末尾にドットを付けるか、ゾーン内の名前なら mail とだけ書きます。

5. DNSは正しいがサーバーがIPv6で待ち受けていない

いちばん気付きにくいのがこれです。AAAAを追加すると、IPv6を使える環境のクライアントはIPv6のアドレスに接続しようとします。サーバーのプロセスがIPv6で待ち受けていない、ファイアウォールやクラウドのセキュリティグループでIPv6の通信を許可していない、といった状態だと、接続に失敗したり、IPv4に切り替わるまで待たされたりします。

最近のクライアントの多くは、IPv6とIPv4を並行して試し、早くつながった方を使う仕組み(Happy Eyeballs、RFC 8305)を持っていますが、すべてのクライアントが実装しているわけではありません。AAAAを追加する前に、サーバー側のIPv6の受け付けを整えておきます。

IPv6で接続できるかの確かめ方

DNSの確認とサーバーへの接続確認を分けて行います。まず、SRVと向け先のAAAAが権威サーバーから正しく返るかを確かめます。

# SRVを引く
dig +short _imaps._tcp.example.com SRV

# 向け先のホスト名のAとAAAAを引く
dig +short mail.example.com A
dig +short mail.example.com AAAA

次に、IPv6のアドレスを指定してポートに接続できるかを試します。手元の回線がIPv6に対応していない場合は、IPv6を使えるサーバーなど別の環境から実行します。

# IPv6でポートが開いているかを確認
nc -6 -vz mail.example.com 993

# IPv6のアドレスでTLS接続し、証明書の内容を確認
openssl s_client -connect '[2001:db8::25]:993' -servername mail.example.com

openssl s_client では、証明書のエラーが出ないことと、証明書に記載された名前を確かめます。SRVを使うサービスでは、クライアントが証明書の名前を「元のドメイン(example.com)」と「向け先のホスト名(mail.example.com)」のどちらで照合するかがサービスやクライアントによって異なります。使っているサービスの仕様に合わせて、必要な名前が証明書に含まれているかを確認します。

サーバー側で待ち受けの状態を見るには、ss -tlnp で該当ポートが [::] やIPv6のアドレスで待ち受けているかを確かめます。

段階的に切り替える手順

すでにIPv4だけで運用しているSRVをIPv6にも対応させる場合は、次の順で進めると影響を抑えられます。DNSを変更する前に、現在のレコードをエクスポートなどで控えておきます。

  1. サーバーのIPv6アドレスを決め、OSのネットワーク設定とサービスの待ち受けをIPv6に対応させる
  2. ファイアウォールとセキュリティグループで、IPv6の該当ポートを許可する
  3. 上の nc -6 と openssl s_client で、アドレスを直接指定して接続を確かめる
  4. 向け先のホスト名にAAAAを追加する。最初はTTLを短め(300秒程度)にしておく
  5. 実際のクライアントでの接続と、サーバーのログにIPv6からの接続が記録されることを確かめ、問題がなければTTLを元に戻す

問題が出た場合は、AAAAを削除すればIPv4だけの状態に戻せます。ただし、削除してもAAAAのTTLの間は古い答えがキャッシュに残る点に注意します。

WordPressサイトとの関係

WordPress自体はSRVレコードを使いませんが、同じドメインでメールやカレンダーなどのサービスを運用していると、SRVと一緒にWebサイト用のAAAAを追加することがあります。ドメインの頂点や www にAAAAを追加すると、WordPressサイトにもIPv6で接続されるようになるため、Webサーバー(Nginxなら listen [::]:443 ssl; のような設定)がIPv6で待ち受けているか、証明書がIPv6側でも同じものを返すかもあわせて確かめます。

まとめ

  • SRVはIPアドレスを持たず、向け先のホスト名のA・AAAAからアドレスが引かれる
  • AAAAはSRVの名前ではなく、SRVの向け先のホスト名に置く
  • 向け先はCNAMEやIPアドレスにせず、AとAAAAを直接持つホスト名にする
  • AAAAを追加する前に、サーバーの待ち受けとファイアウォールをIPv6に対応させる
  • dig でDNSを、nc -6 と openssl s_client で実際の接続を分けて確かめる

お気軽にご相談ください

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