PTRレコードは同じIPアドレスに2つ登録していい?逆引きDNSで複数PTRを設定する問題点

DNSの逆引きを設定するとき、

「1つのIPアドレスに複数のPTRレコードを登録してもいいの?」

という疑問が出ることがあります。

例えば、1台のサーバーを複数の用途で使用していて、

203.0.113.10

というIPアドレスに対して、

mail.example.jp
smtp.example.jp

の2つのホスト名を使いたい場合です。

DNS上は複数のPTRレコードを登録できる場合があります。

しかし、特にメールサーバーの逆引きDNSでは、1つのIPアドレスに複数PTRを設定するのはおすすめしません。

この記事では、その理由と、正引き・逆引きの関係について説明します。


PTRレコードとは

通常のDNSでは、ホスト名からIPアドレスを調べます。

例えば、

mail.example.jp
        ↓
       DNS
        ↓
203.0.113.10

です。

これが正引きです。

Aレコードなら、

mail.example.jp. IN A 203.0.113.10

のように設定します。

一方PTRレコードは逆です。

203.0.113.10
        ↓
       DNS
        ↓
mail.example.jp

のように、IPアドレスからホスト名を調べます。

これが逆引きです。


同じIPアドレスにPTRを2つ登録できる?

DNSの仕組み上、1つのIPアドレスに対して複数のPTRレコードが返る構成は可能です。

例えば、

203.0.113.10
      ↓
      ├─ mail.example.jp
      └─ smtp.example.jp

という状態です。

逆引きゾーンではイメージとして、

10 IN PTR mail.example.jp.
10 IN PTR smtp.example.jp.

のようになります。

そのため、

複数PTRはDNSの構文として絶対に禁止されている

というわけではありません。

しかし、

「設定できる」ことと「設定した方がよい」ことは別です。


メールサーバーでは1つのPTRを推奨

特にインターネットへメールを送信するサーバーでは、基本的に、

1つの送信元IP
       ↓
1つのPTR

という構成にした方が分かりやすく、トラブルも少なくなります。

例えば、

203.0.113.10
       ↓ PTR
mail.example.jp

です。

そして正引きも、

mail.example.jp
       ↓ A
203.0.113.10

になるようにします。

つまり、

203.0.113.10
      │
      │ PTR
      ▼
mail.example.jp
      │
      │ A
      ▼
203.0.113.10

と戻ってくる状態です。

このような関係は、一般に**Forward-confirmed reverse DNS(FCrDNS)**と呼ばれます。


なぜメールサーバーでは逆引きが重要なのか

メールを受信する側では、送信元IPアドレスについて逆引きDNSを確認することがあります。

例えば、

送信元IP
203.0.113.10
      ↓
PTR
      ↓
mail.example.jp
      ↓
A
      ↓
203.0.113.10

という関係を確認できます。

これは送信元の信頼性を評価する材料の一つになります。

逆に、

203.0.113.10
      ↓ PTR
mail.example.jp
      ↓ A
192.0.2.50

のように、元のIPアドレスへ戻らなければ不自然です。

メール配送ではSPF・DKIM・DMARCだけでなく、送信元IPの逆引きDNSやホスト名の整合性なども確認されることがあるため、PTRは適切に設定しておいた方がよいでしょう。


複数PTRだと何が問題なのか

例えば、

203.0.113.10
       ↓
 ┌─────┴─────┐
 ▼           ▼
mail.example.jp
smtp.example.jp

という2つのPTRが設定されていたとします。

問い合わせ側から見ると、逆引き結果として複数の名前が返ります。

DNSとして成立していても、

「このIPアドレスの正式なホスト名は結局どちらなのか?」

が分かりにくくなります。

さらにメールでは、

PTR
SMTP HELO/EHLO
Aレコード
送信ドメイン

など複数の情報が関係します。

例えばSMTPサーバーが、

EHLO mail.example.jp

と名乗っているのであれば、

203.0.113.10
      ↓ PTR
mail.example.jp

としておく方がシンプルです。


SMTPのEHLO名との関係

メールサーバーが相手サーバーへ接続すると、SMTP通信の最初に、

EHLO mail.example.jp

のように自身の名前を通知します。

例えばPostfixなら、設定によっては、

myhostname = mail.example.jp

などがEHLO名に関係します。

理想的には、

送信元IP
203.0.113.10
      │
      │ PTR
      ▼
mail.example.jp
      ▲
      │ EHLO
      │
メールサーバー

となり、さらに、

mail.example.jp
      ↓ A
203.0.113.10

と正引きも一致する状態にします。

つまり、

送信元IP:203.0.113.10
PTR      :mail.example.jp
EHLO     :mail.example.jp
A        :203.0.113.10

という構成です。

これなら非常に分かりやすくなります。


1台のサーバーに複数の名前を持たせたい場合は?

例えば、

mail.example.jp
smtp.example.jp

の両方を同じサーバーで使いたいこともあります。

この場合、PTRまで2つにする必要はありません。

正引き側では、

mail.example.jp. IN A 203.0.113.10
smtp.example.jp. IN A 203.0.113.10

として、

mail.example.jp ──┐
                  ├→ 203.0.113.10
smtp.example.jp ──┘

のように複数の名前を同じIPへ向けることができます。

一方、逆引きは代表となる名前を一つ決めます。

203.0.113.10
      ↓ PTR
mail.example.jp

です。

つまり、

正引き

mail.example.jp ──┐
                  ├──→ 203.0.113.10
smtp.example.jp ──┘


逆引き

203.0.113.10
      │
      └──→ mail.example.jp

という構成です。


CNAMEを使う方法もある

用途によっては別名をCNAMEにする方法もあります。

例えば、

mail.example.jp. IN A     203.0.113.10
smtp.example.jp. IN CNAME mail.example.jp.

とします。

すると、

smtp.example.jp
       ↓ CNAME
mail.example.jp
       ↓ A
203.0.113.10

となります。

ただしCNAMEにはDNS上の制約もあるため、単純に「同じIPなら全部CNAMEにすればよい」というわけではありません。

メール関連ではMXレコードなどとの関係も考えて設計する必要があります。


実際にPTRを確認する方法

Linuxならdigで確認できます。

dig -x 203.0.113.10

例えば、

10.113.0.203.in-addr.arpa. 3600 IN PTR mail.example.jp.

と返れば、PTRが確認できます。

hostを使える環境なら、

host 203.0.113.10

でも確認できます。

Windowsなら、

nslookup 203.0.113.10

です。


正引きも必ず確認する

逆引きだけで終わらず、PTRで返ってきた名前をもう一度正引きします。

例えば、

dig mail.example.jp A

です。

結果が、

mail.example.jp. 3600 IN A 203.0.113.10

なら、

203.0.113.10
      ↓ PTR
mail.example.jp
      ↓ A
203.0.113.10

と往復できます。

メールサーバーのDNS設定を確認するときは、

PTRだけではなく、PTR → Aまで確認する

のがおすすめです。


複数PTRが設定されていないか確認する

dig -xの結果に、

10.113.0.203.in-addr.arpa.
    IN PTR mail.example.jp.

10.113.0.203.in-addr.arpa.
    IN PTR smtp.example.jp.

のように複数行返ってきた場合は、複数PTRが登録されています。

すぐに障害になるとは限りませんが、メール送信用IPなら、

どのホスト名を正式名にするか
        ↓
PTRを1つにする
        ↓
EHLO名を合わせる
        ↓
Aレコードを確認

という整理を検討した方がよいでしょう。


SPF・DKIM・DMARCがPASSならPTRは不要?

ここも混同しやすいところです。

SPF・DKIM・DMARCとPTRは別の仕組みです。

例えば、

SPF    PASS
DKIM   PASS
DMARC  PASS

だからといって、

PTRなしでも問題ない

とは言い切れません。

メール受信側はメール認証だけでなく、

送信元IP
IPレピュテーション
PTR
EHLO
SPF
DKIM
DMARC
メール本文
送信履歴

など、さまざまな情報を利用してメールを評価する場合があります。

そのため、インターネットへメールを送信するサーバーなら、SPF/DKIM/DMARCだけでなく逆引きDNSも適切に設定しておくことが重要です。


PTRを変更するときの確認項目

メールサーバーのPTRを変更した場合、私は最低でも次を確認します。

① 送信元グローバルIPを確認
        ↓
② dig -x でPTR確認
        ↓
③ PTRで返った名前を正引き
        ↓
④ 元のIPへ戻ることを確認
        ↓
⑤ SMTP EHLO名を確認
        ↓
⑥ SPFを確認
        ↓
⑦ DKIMを確認
        ↓
⑧ DMARCを確認
        ↓
⑨ 外部へテストメール送信

特にメール到達性のトラブルを調査している場合は、DNSだけ直して終わらず、実際に外部へ送信して確認することが重要です。


まとめ

1つのIPアドレスに複数のPTRレコードを持たせること自体は可能ですが、特にメール送信用サーバーでは、基本的に、

1 IP
 ↓
1 PTR
 ↓
代表ホスト名

というシンプルな構成がおすすめです。

そして、

203.0.113.10
      ↓ PTR
mail.example.jp
      ↓ A
203.0.113.10

と正引き・逆引きが対応していることを確認します。

さらにSMTPサーバーなら、

IP
PTR
A
EHLO

の関係も確認しておくとよいでしょう。

重要なのは、

DNSとして設定できるかどうかと、メールサーバーとして望ましい設定かどうかは別

という点です。

複数PTRがすぐにメール配送障害を起こすとは限りませんが、メールサーバーでは不要な曖昧さを作らず、代表となるFQDNを1つ決めてPTR・正引き・EHLOの整合性を取るのが分かりやすい構成です。


コメント

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