2026年6月12日

2026年6月12日

MXレコードのTTLの不一致と重複を解消する方法|同じ名前のMXを1組にそろえる手順

同じドメインのMXレコードが何行も並び、行ごとにTTLが違ったり、同じメールサーバーが二重に登録されていたりする場合は、MXを「1つの名前に対する1組の情報」として整理し直すことで解消できます。手順は、権威ネームサーバーで今の状態を正確に見る、残す行と消す行を決める、TTLを1つの値にそろえる、反映を確かめる、の4段階です。この記事では、重複や不一致がなぜ起きるのか、どれが問題でどれが問題でないのかを見分けたうえで、安全に整理する方法を説明します。

MXの「重複」と「TTLの不一致」は何が問題なのか

DNSでは、同じ名前・同じ種類のレコードの集まりを1つのまとまり(RRset)として扱います。example.com のMXが2行あれば、それは2件のMXを含む1つのRRsetです。

このまとまりについて、DNSの仕様(RFC 2181)は「同じRRsetに含まれるレコードのTTLは同じ値にする」と定めています。行ごとにTTLが違う状態は仕様に合っておらず、受け取った側は最も短いTTLにそろえて扱うことが求められています。つまり、片方の行だけTTLを長くしても、その長さは期待どおりには効きません。DNSサーバーのソフトウェアによっては、読み込み時に警告を出して1つの値にそろえるものもあります。

重複については、次の3つを区別すると整理しやすくなります。

  • まったく同じ行が2つある(優先度もホスト名も同じ): DNSの仕組みでは同じレコードは1件として扱われるため意味がなく、管理画面上の混乱のもとになるだけです。
  • 同じホスト名が別の優先度で2回登録されている(例: 10 mail.example.com と 20 mail.example.com): 1台目が応答しないとき、同じサーバーに再送するだけなので冗長化になっていません。
  • 別のホスト名が同じ優先度で並んでいる: 送信側が両方に振り分けるための設定で、意図したものなら問題ありません。

3つ目は重複ではなく正しい構成の場合があります。消す前に、それぞれの行が何のためにあるのかを確かめることが大切です。

権威ネームサーバーで今の状態を正確に見る

TTLの確認では、普段使っているキャッシュDNSの答えをそのまま信じないことが大事です。キャッシュDNSが返すTTLは「残り時間」なので、問い合わせるたびに減っていき、設定値とは一致しません。設定値を見るには、権威ネームサーバーに直接問い合わせます。

# ドメインの権威ネームサーバーを調べる
dig example.com NS +short

# 権威ネームサーバーに直接MXを問い合わせる(設定どおりのTTLが返る)
dig @ns1.example-dns.jp example.com MX +norecurse +noall +answer

# 比較用:キャッシュDNSの答え(TTLは残り時間)
dig example.com MX +noall +answer

出力の2列目がTTLです。権威ネームサーバーの答えで行ごとにTTLが違っていれば、不一致が設定に残っています。

NSが複数ある場合は、すべてのネームサーバーに同じ問い合わせをして結果を並べます。

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

ネームサーバーによってMXの行数や値が違う場合、重複の原因は「同じDNSサービスの中に余分な行がある」のではなく、「NSに別々のDNSサービスが混ざっていて、それぞれに違うMXが入っている」ことかもしれません。この場合はどちらか一方の管理画面を直しても解消しないので、NSの構成から見直します。

重複と不一致が生まれやすい場面

原因が分かると、直したあとに再発させない手当てもできます。よくあるのは次の場面です。

  1. メールサービスの乗り換え時に古いMXを消し忘れた: 新旧のMXが並び、優先度の低い旧サーバーに一部のメールが届き続けることがあります。
  2. 行ごとにTTLを入力するDNS管理画面で、追加した行だけTTLを変えた: レコードを1行ずつ登録する画面では、同じ名前のMXでも別々のTTLを入力できてしまいます。
  3. メールサービスの案内どおりに追加したら、既存の行と同じ内容だった: 画面の入力欄の違い(末尾のドットの有無、ホスト名欄の @ と空欄の違い)で、別の行に見えて実は同じという例もあります。
  4. ゾーンファイルを手で編集した: 行ごとにTTLを書く書き方と、$TTL の既定値に任せる書き方が混ざると、同じ名前のMXでTTLがずれます。

なお、Amazon Route 53 のようにTTLを「レコードの組」に対して1つだけ設定するDNSサービスでは、同じ組の中でTTLが食い違うことは起こりません。また同じ値を同じ組に二重に入れようとすると、登録時にエラーになるのが一般的です。不一致や重複が起きやすいのは、主に1行ずつ登録する管理画面と、手書きのゾーンファイルです。

残す行と消す行を決める

整理を始める前に、現在のMXの一覧(優先度・ホスト名・TTL)を控えておきます。DNSサービスによってはゾーンのエクスポート機能があるので、使える場合は書き出しておくと元に戻すときに役立ちます。

そのうえで、次の基準で残す行を決めます。

  • 今メールを受けているサービスの案内にあるMXだけを残す(Google Workspace や Microsoft 365 などは、それぞれの管理画面やヘルプに現在のMX値が載っています)
  • 同じホスト名が複数の優先度で並んでいたら、案内にある優先度の1行だけにする
  • 旧サービスのMXは、旧サービス側で受信を止める時期と合わせて消す。すぐ消せない場合は、優先度を新サービスより低くして、いつ消すかを決めておく
  • メールを受け取らないドメインで「MXが無い」ことを明示したい場合は、RFC 7505 のNull MX(0 .)を1行だけ置きます。Null MXは他のMXと並べてはいけないので、併用している行があれば整理します

MXの宛先にはホスト名を書き、IPアドレスやCNAMEの名前は書きません。宛先のホスト名にA(IPv6も使うならAAAA)があることも、このとき合わせて確かめておきます。

TTLを1つの値にそろえる

TTLの値は、変更の予定に合わせて決めます。

  • 当面変更の予定がない: 3600秒(1時間)前後が扱いやすい値です。DNSサービスの既定値に任せてもかまいません。
  • 近いうちにメールサービスを移す: 移行の1〜2日前までに300秒程度へ下げ、移行後に落ち着いたら元に戻します。

大切なのは値の大小よりも、同じ名前のMXすべてに同じTTLを付けることです。管理画面で1行ずつTTLを入力する方式なら、すべての行を同じ値に書き換えます。TTLを下げる場合、新しいTTLが効き始めるのは、古いTTLの分の時間が過ぎてからです。今のTTLが86400秒(1日)なら、下げた設定が各地のキャッシュに行き渡るまで最大1日かかります。

BINDなどでゾーンファイルを管理している場合は、MXの行にTTLを明記してそろえ、SOAのシリアル番号を上げてから読み込み直します。

; 修正前:TTLがばらばらで、同じホストが二重に登録されている
example.com.   3600  IN  MX  10 mx1.example.net.
example.com.   300   IN  MX  20 mx2.example.net.
example.com.   3600  IN  MX  30 mx1.example.net.

; 修正後:TTLを3600にそろえ、重複した行を削除した
example.com.   3600  IN  MX  10 mx1.example.net.
example.com.   3600  IN  MX  20 mx2.example.net.
# 書式を確認してから読み込み直す(パスは環境に合わせて変更)
named-checkzone example.com /etc/bind/zones/example.com.zone
sudo rndc reload example.com

named-checkzone でエラーや警告が出たら、読み込む前に内容を直します。ゾーンファイルを編集する前には、元のファイルをコピーしてバックアップを取っておきます。

反映を確かめる

修正後は、まず権威ネームサーバーの答えが意図どおりかを、すべてのNSについて確かめます。先ほどの for ループをもう一度実行し、行数・優先度・ホスト名・TTLがすべてのネームサーバーで同じになっていれば、設定側の作業は完了です。

キャッシュDNSの答えが新しくなるのは、古い答えのTTLが切れてからです。Google Public DNS(8.8.8.8)やCloudflareの1.1.1.1など、複数の公開DNSに問い合わせて変化を見ます。

dig @8.8.8.8 example.com MX +noall +answer
dig @1.1.1.1 example.com MX +noall +answer

最後に、外部のメールアドレスから実際にメールを送り、受信できるかを確かめます。受信したメールのヘッダーにある Received の行を見ると、どのサーバーを経由して届いたかが分かるので、消したはずの旧サーバーを通っていないかも確認できます。

整理したあとに再発させないために

MXの変更は、受信の停止につながりやすい作業です。次の点を運用のルールにしておくと、同じ状態に戻りにくくなります。

  • MXを触るときは、作業前の一覧を残し、作業後に権威ネームサーバーで一覧を取り直して見比べる
  • メールサービスを乗り換えたら、旧MXを消す日を決めて記録しておく
  • 1行ずつTTLを入力する管理画面では、同じ名前のMXを追加・変更するたびに、他の行のTTLも同じかを見る
  • MXと一緒に、SPF(TXT)やDKIMの設定も新しいメールサービスのものに切り替わっているかを確かめる

DNSサービスの画面構成や入力欄の名前はサービスごとに違い、更新で変わることもあります(2026年10月現在)。この記事の手順は、画面の表記ではなく「権威ネームサーバーで何が返っているか」を基準に進めると、どのサービスでも同じ考え方で使えます。

まとめ

  • 同じ名前のMXは1つのRRsetとして扱われ、TTLは全行で同じ値にするのが仕様です。行ごとに違うと、短い方にそろえて扱われます。
  • まったく同じ行や、同じホストを別の優先度で重ねた行は削除の対象です。別のホストを同じ優先度で並べた行は、意図した構成なら残します。
  • 確認は権威ネームサーバーに直接問い合わせ、NSが複数あればすべてで同じ結果になるかを見ます。
  • 残すMXは、今使っているメールサービスの案内に合わせて決め、旧サービスのMXは受信を止める時期と合わせて消します。
  • 修正後は公開DNSと実際のメール送信で反映を確かめます。

お気軽にご相談ください

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