【DNS入門 第6回】リソースレコード後編 ― MX・SPF・DKIM・DMARC、SRV、PTR、CAA、HTTPSレコード

DNS サーバー
スポンサーリンク
スポンサーリンク

「通知メールが、Gmail宛てだけ届かなくなりました」
「証明書の自動更新が、急に失敗するようになりました」

最近増えているこうした相談も、原因をたどるとDNSのレコードに行き着くことが少なくありません。メールや証明書は、今やDNSの設定と切り離せない関係にあります。

第5回(前編)では、ゾーンの骨格になるSOA・NS・A/AAAA・CNAMEを見ました。後編の今回は、メールの配送と認証(MX・SPF・DKIM・DMARC)、Active Directoryで使うSRV、逆引きのPTR、証明書のCAA、そして比較的新しいHTTPS/SVCBレコードを扱います。


MXとNull MX

MX(Mail eXchange)は、そのドメイン宛てのメールの配送先です。送信側のメールサーバーは、宛先ドメインのMXを引いて接続します。

example.jp.         3600 IN MX 10 mail1.example.jp.
example.jp.         3600 IN MX 20 mail2.example.jp.
; メールを受け取らないドメインであることを明示する(Null MX)
noreply.example.jp. 3600 IN MX 0 .
  • 優先度(プリファレンス)は小さいほど優先。同じ値を複数置いた場合の振り分けは送信側の実装しだい
  • 値はA/AAAAで引けるホスト名。IPアドレスやCNAMEの名前は書かない(第5回)
  • MXはサブドメイン(sub.example.jp)にも個別に置ける

見落としがちなのが、MXが無い場合の動きです。MXが無いと、送信側は名前のA/AAAAを配送先とみなして送ろうとします(RFC 5321)。Webサーバーしかないドメインでも、メールを受け取ろうとする通信が来てしまうのです。

受け取らないドメインは、Null MX(MX 0 .、RFC 7505)で明示しましょう。無駄な配送と誤配送を防げます。


TXTとSPF

TXTは任意の文字列を入れるレコードです。1つの文字列は255バイトまでですが、複数の文字列に分けて入れれば、それ以上を格納できます(DKIMの長い公開鍵など)。

主な用途は2つです。

  • メール送信ドメインの認証(SPF・DKIM・DMARC)
  • ドメインの所有確認(Microsoft 365、Google、各種SaaS、証明書の発行などで「指定の文字列をTXTに登録してください」と求められるもの)
example.jp. 3600 IN TXT "v=spf1 ip4:192.0.2.25 include:_spf.example.net -all"
example.jp. 3600 IN TXT "MS=ms12345678"

SPF(RFC 7208)は、そのドメインのメールを送ってよいサーバーを宣言します。

  • -all:列挙以外は失敗
  • ~all:列挙以外は疑わしい

SPFには、ハマりやすい制約があります。

  • SPFのレコードは1つの名前に1つだけ。2つ書くとどちらも無効扱いになり得る
  • includeなどで引くDNSの問い合わせは10回までの制限がある。SaaSを足し続けると超えやすい
  • SPF専用のタイプ(タイプ99)は廃止。TXTで書く

「メール配信サービスを追加するたびにincludeを足していたら、いつの間にか10回を超えていた」というのは、本当によくある話です。


DKIMとDMARC

SPFとあわせて、メールの送信ドメイン認証にはDKIMとDMARCを使います。3つの関係を整理しましょう。

送信サーバーからメールを受け取った受信サーバーが、SPF(example.jpのTXT)、DKIM(セレクター._domainkeyのTXT)、DMARC(_dmarcのTXT)、逆引き(PTR)をDNSで確認することを示す図
仕組みレコードの場所内容規格
SPFドメイン名(example.jp)のTXT送信を許可するサーバーRFC 7208
DKIMセレクター._domainkey.example.jp のTXT(CNAMEで事業者に向ける場合も)署名を検証する公開鍵RFC 6376
DMARC_dmarc.example.jp のTXTSPF・DKIMの結果とFromの一致を見て、失敗時の扱いとレポート先を示すRFC 7489 → RFC 9989(2026年5月)
s1._domainkey.example.jp. 3600 IN TXT ( "v=DKIM1; k=rsa; "
    "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..." )
_dmarc.example.jp. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:dmarc-rua@example.jp"

(DKIMの公開鍵は省略しています)

DMARCは、いきなり厳しくしないのがコツです。p=none(監視のみ)でレポートを集め、正規のメールが通ることを確かめてから、quarantine、rejectへ段階的に強めます。いきなりrejectにすると、把握していなかった送信元(古いシステムの通知メールなど)が全部止まります。

なお、DMARCは2026年5月にRFC 9989へ改訂されました。Microsoft 365ではDKIMをselector1._domainkeyなどのCNAMEで向けます。


送信者ガイドラインとDNS

冒頭の「Gmail宛てだけ届かない」の背景にあるのが、大手メール事業者の送信者ガイドラインです。

受信側開始すべての送信者大量送信者(1日5,000通以上)
Gmail2024年2月SPFまたはDKIM、正引き・逆引きの設定、TLS、迷惑メール率0.3%未満SPFとDKIMの両方、DMARC(p=none 可)、Fromとの一致、ワンクリック登録解除
Yahoo2024年2月SPFまたはDKIM、正引き・逆引きの設定、迷惑メール率0.3%未満SPFとDKIMの両方、DMARC(p=none 以上)、Fromとの一致、ワンクリック登録解除
Microsoft(Outlook.com・Hotmail 等の個人向け)2025年5月5日(推奨事項のみ)SPFとDKIMの成功、DMARC(p=none 以上)でFromと一致。不適合は 550 5.7.515 で拒否

DNSの担当者に関係するのは、SPF・DKIM・DMARCのTXTと、送信サーバーのIPアドレスの逆引き(PTR)と正引きの一致です。Gmailは2025年11月から、要件を満たさないメールの一時的・恒久的な拒否を強めています。

社内のシステムからの通知メールも対象になり得ます。複合機のスキャン送信、監視システムのアラート、業務システムの通知など、送信元をすべて洗い出してSPF・DKIMに含めましょう。


SRV:サービスの場所を示す

SRV(RFC 2782)は、「このサービスは、どのサーバーの何番ポートにあるか」を示すレコードです。名前は_サービス._プロトコル.ドメインの形になります。

; _サービス._プロトコル.名前           TTL      SRV 優先度 重み ポート ターゲット
_ldap._tcp.corp.example.jp.            600 IN SRV 0 100 389 dc01.corp.example.jp.
_kerberos._tcp.corp.example.jp.        600 IN SRV 0 100 88  dc01.corp.example.jp.
_ldap._tcp.dc._msdcs.corp.example.jp.  600 IN SRV 0 100 389 dc01.corp.example.jp.
  • 優先度は小さいほど優先、同じ優先度の中では重みの比率で振り分ける
  • ターゲットにCNAMEの名前は書かない

SRVの最大の利用例は、Active Directoryです。

ドメイン参加PCが社内DNSに_ldap._tcp.dc._msdcsのSRVを問い合わせ、返ってきたdc01のアドレスを引いて、LDAPとKerberosでDCに接続する流れを示す図

クライアントはSRVを引いてドメインコントローラーを見つけます。そのため、「ドメインに参加できない」「ログオンが遅い」は、まずSRVの欠落を疑います(第10回)。

$ dig _ldap._tcp.dc._msdcs.corp.example.jp SRV +short
0 100 389 dc01.corp.example.jp.

PS> Resolve-DnsName _ldap._tcp.dc._msdcs.corp.example.jp -Type SRV

PTRと逆引きゾーン

PTRは、IPアドレスから名前を引く逆引きのレコードです。IPv4はin-addr.arpa、IPv6はip6.arpa(RFC 3596)の下に、アドレスを逆順にした名前で置きます。

IPv4アドレス192.0.2.10の各オクテットを逆順に並べて10.2.0.192.in-addr.arpa.とし、そこにPTRを置くことを示す図
; IPv4:192.0.2.10 → 10.2.0.192.in-addr.arpa.
$ORIGIN 2.0.192.in-addr.arpa.
10      IN PTR  www.example.jp.

; IPv6:2001:db8::10 → 32桁の16進数を1桁(nibble)ずつ逆順に並べる
0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. IN PTR www.example.jp.

なぜ逆順なのかというと、DNSの名前は右ほど大きい単位だからです(第2回)。IPアドレスは左ほど大きい単位なので、逆にすればDNSの木構造にそのまま乗せられます。

$ dig -x 192.0.2.10 +short
www.example.jp.

PS> Resolve-DnsName 192.0.2.10        # IPアドレスを渡すと PTR を引く

逆引きで押さえておきたいのは次の3点です。

  • 逆引きゾーンの委任は、ドメインのレジストラではなく、IPアドレスの割り当て元(ISP、JPNIC・APNIC等)から受ける。/24より小さい割り当ては、CNAMEを使うクラスレス委任(RFC 2317)で委任されることがある
  • 逆引きが無いと、接続元を逆引きするサーバー(SSH等)でタイムアウト待ちの遅延が起きる
  • メール送信サーバーやvSphereでは、正引きと逆引きの一致が求められる(第10回)

CAA:証明書を発行してよい認証局

CAA(RFC 8659)は、そのドメインの証明書を発行してよい認証局(CA)を宣言するレコードです。

example.jp. 3600 IN CAA 0 issue "letsencrypt.org"
example.jp. 3600 IN CAA 0 issue "amazon.com"
example.jp. 3600 IN CAA 0 issuewild ";"
example.jp. 3600 IN CAA 0 iodef "mailto:security@example.jp"

上の例は、Let’s EncryptとAmazon(ACM)だけを許可し、ワイルドカード証明書は発行させない設定です。

証明書の申請を受けたCAが、www.example.jpにCAAが無いので親のexample.jpへさかのぼってCAAを確認し、列挙されたCAなら発行、列挙されていないCAなら拒否することを示す図
  • 2017年9月8日から、CAは発行前にCAAを確認する義務がある(CA/Browserフォーラム Ballot 187)。CAAがあれば、列挙されていないCAは発行を拒否する
  • CAAが無い名前は、親の名前へさかのぼって確認される(www.example.jp → example.jp)。どこにも無ければ、どのCAでも発行できる
  • iodefは違反の通知先。accounturi(RFC 8657)でCAのアカウントまで限定でき、issuemail(RFC 9495)はS/MIME証明書用

冒頭の「証明書の自動更新が急に失敗する」の原因がこれ、というケースがあります。CAを変えるときや、ACMなど新しいCAを使い始めるときにCAAの追加を忘れると、発行や自動更新が失敗します。


HTTPS/SVCBレコード

最後に、比較的新しいレコードです。SVCBとHTTPSレコード(RFC 9460、2023年11月)は、接続する前に「どう接続すればよいか」をDNSで伝えるレコードです。

ブラウザーがA/AAAAと一緒にHTTPSレコードを問い合わせ、alpn="h3,h2"やECHの鍵を受け取って、最初からHTTP/3とECHで接続することと、HTTPSレコードが無い場合はHTTP/2で接続してAlt-Svcを受け取り次回からHTTP/3になることを示す図

HTTPSレコードはWeb用の形で、次のような情報を載せられます。

  • 対応するプロトコル(alpn="h3,h2"ならHTTP/3にも対応)
  • IPアドレスの候補(ipv4hint・ipv6hint)
  • TLSのECH(接続先の名前を暗号化する仕組み、RFC 9849、2026年3月)の鍵

ブラウザーは最初からHTTP/3を選んだり、ECHで名前を隠したりできます。HTTPSレコードが無い場合は、まずHTTP/2で接続してAlt-Svcヘッダーを受け取り、次回からHTTP/3になるので、つなぐ前につなぎ方まで分かるのが利点です。

また、優先度0のAliasModeを使うと、頂点から別の名前へ、標準の仕組みで向けられます(第5回)。

書き方と対応状況

; ServiceMode:HTTP/3 と HTTP/2 に対応していることを伝える
example.jp.      3600 IN HTTPS 1 . alpn="h3,h2" ipv4hint=192.0.2.10 ipv6hint=2001:db8::10
; AliasMode:頂点から CDN の名前へ向ける(優先度 0)
example.com.     3600 IN HTTPS 0 cdn.example.net.
$ dig example.jp HTTPS +short
1 . alpn="h3,h2" ipv4hint=192.0.2.10 ipv6hint=2001:db8::10

値の.は「この名前自身」を表します。

クライアントHTTPSレコードの利用(2026年9月時点)
Safari(iOS 14/macOS 11以降)OSのAPIが接続時に問い合わせる
Chrome(117以降)内蔵のリゾルバーまたはDoHで取得し、ECHに使う(既定で有効)
FirefoxDoH使用時に取得。129以降はOSのリゾルバー経由でも取得(macOSを除く)

対応していないクライアントは無視するため、追加しても既存の接続は壊れません。一部のCDNは自動で公開しています。

注意点として、Windows標準のResolve-DnsNameはHTTPS型を指定できないため、確認にはLinuxなどのdigを使います。また、ipv4hintなどはあくまで候補で、A/AAAAレコードの代わりにはなりません。A/AAAAを変えたらヒントも合わせて直しましょう。


その他のレコード

ここまでで扱わなかったレコードも、名前だけ押さえておきましょう。

タイプ用途補足規格
TLSAサーバー証明書(公開鍵)のハッシュをDNSで示す(DANE)_25._tcp.mail.example.jp のように置く。メールサーバー間のTLSで利用。DNSSECが前提RFC 6698
SSHFPSSHのホスト鍵の指紋OpenSSHの VerifyHostKeyDNS で照合。DNSSECが前提RFC 4255
NAPTR文字列の書き換え規則ENUM(電話番号→URI)やSIPで利用RFC 3403
DS/DNSKEY/RRSIG/NSEC・NSEC3DNSSECの鍵・署名・不在証明第9回で扱うRFC 4034 等
HINFOホストの情報ANY問い合わせへの最小限の応答に使われるRFC 8482
SPF(タイプ99)SPF専用廃止。TXTで書くRFC 7208

DNSのタイプはIANAの一覧で約90種類が定義されていますが、日常の運用で使うのは第5回・第6回で扱ったもので大半です。見慣れないタイプに出会ったら、IANAの「Resource Record (RR) TYPEs」で番号と規格を確認しましょう。


考えてみよう

  1. 自社ドメインのSPF・DKIM・DMARC・CAAを、digで確認してみてください。システムからの通知メールの送信元は、すべてSPFに含まれていますか。
  2. メールを送らない・受け取らないドメイン(Web専用のドメインなど)に、Null MXやSPFの-allは設定されていますか。
  3. 社内のサーバーやメール送信サーバーのIPアドレスに、正しい逆引き(PTR)は設定されていますか。

ヒント:dig example.jp TXT、dig _dmarc.example.jp TXT、dig example.jp CAAの3つで、メールと証明書に関わる設定のほとんどが見えます。PowerShellではResolve-DnsName _dmarc.example.jp -Type TXT(CAAは指定できないためdigで確認)。


まとめ

  • MXが無いとAに配送しようとする。受け取らないドメインはNull MXで明示
  • SPFは1つの名前に1つ、DNSの問い合わせは10回まで
  • DMARCはp=noneで監視してから段階的に強める
  • Gmail・Yahoo・Microsoftの送信者ガイドラインで、SPF・DKIM・DMARC・逆引きは実質必須に
  • ADはSRVでDCを探す。逆引きは割り当て元から委任を受ける
  • CAを変えるときはCAAも忘れずに。HTTPSレコードは追加しても壊れない

次回は、これらのレコードを置く権威DNSサーバーを、どう運用するかを見ていきます。


連載「DNS入門」全12回

  1. DNSとは?名前解決の全体像と3つの登場人物
  2. ドメイン名の階層と委任
  3. 名前解決の流れ
  4. DNSメッセージとトランスポート
  5. リソースレコード 前編
  6. リソースレコード 後編(この記事)
  7. 権威DNSサーバーの運用
  8. コマンドで調べる
  9. DNSのセキュリティ
  10. クラウド・社内環境のDNS
  11. DNSトラブルシュート
  12. DNS設計演習

コメント

タイトルとURLをコピーしました