DNSのMXレコードのpreference(優先度値)に「0」を設定しても良いのでしょうか?
preferenceの値によるメール動作の確認とともに勉強してみました。
レジュメ
結論、preference 0を設定しても良い。最優先値
RFC 974 に「メールルーティングとドメインシステム」について定義されている。
この文章を、ざっくり翻訳すると
- preference(優先度値)は符号なしの16ビット整数
とあります。つまり、preferenceは0を含みます。
参考、RFC 974 - Mail routing and the domain system
さらに、RFC 974 にpreferenceによるメーラーの動作について定義されています。
- preference(優先度値)は、メーラーがMXホストにどのような順序で配信を試みるかを示すために使用され、番号の小さいMXホストが最初に試行されます。
- 同じpreference(優先度値)を持つ複数MXホストの設定が出来、同じ優先順位を持ちます。
前提条件・環境
以下の環境でテストしました。
Server-A
- CentOS Linux 7.3.1611
- bind 9.94-37
- postfix 2.10.1-6
- resolver:Server-A
- IPアドレス:10.127.0.100, 10.127.0.101, 10.127.0.102,
Server-B
- CentOS Linux 7.3.1611
- postfix 2.10.1-6
- resolver: Server-A
Server-Aのtest.localゾーンのMXレコードをいろいろ変更させてテストしました。
MXレコード preference 0 と10で検証
メールを10通投げてみました。
結果、全部preference 0 のmail01へメールされました。
MXレコード preference 10 と10で検証。優先度値を同じ値に設定
メールを10通投げてみました。
結果、微妙にmail01とmail02で分散されました。
特殊なpreference 0 の設定。メールサーバーなし(Null MX)
メールサーバーが無いという特殊なDNS MX設定がRFC 7505にあります。
どういう意味なのかメール動作で確認してみます。
参考、RFC 7505 - A "Null MX" No Service Resource Record for Domains That Accept No Mail
MXレコードがない場合
MXレコードがない場合、メールをするとServer-Bから以下のようなDNSクエリが発生します。
- test.localのMXレコードを引いて、無いとわかると
- test.localのAレコードを引いて、
- test.localのAAAAレコードを引きます
今回のテスト環境の場合、10.127.0.100にメールが飛びます。
このホスト名Aレコードにもメールを飛ばさせたくない設定は以下のようになります。
Null MXレコードの設定
メールをするとServer-Bから以下のようなDNSクエリが発生します。
- test.localのMXレコードを引いて、無いとわかると終了
Aレコードにメールを飛ばそうとしない動きがわかります。
Server-Bのメールログに、
- dsn=5.4.4 status=bounced (Name service error for name=test.local type=MX: Malformed or unexpected name server replay)
というエラーが記載されました。メールの挙動が明らかに変わりましたね。
Null MXレコードの設定はpreference 0でないとダメなのか?
おまけの検証です。
Null MXレコードをpreference 10で設定してみました。
結果的に、Null MXの設定はpreference 0である必要はなさそうでした。
なるほど。