MXレコードにIPアドレスを設定したとき、dig の結果の最後の「.」（ドット）は付いて表示される

:::note warn
（2024年1月22日 22時追記）
MXにIPアドレスを設定することを推奨する記事ではありません。試した限りでは、多くのDNS権威サーバサービスで、MXにIPアドレスを設定しようとするとエラーになりました。RFCに則ったMXの設定方法については沢山の情報がありますので、そちらをご確認お願いいたします。
:::

「MXレコードのIPアドレスの最後の 「.」（ドット）」について、確認してみた。

# 元ネタ
下記記事で記述した「設定時はないが、digの結果には表示されている、MXレコードのIPアドレスの最後の 「.」（ドット）は、下記リンクなどから、MXレコードはFQDNが設定されることが想定されているためDNSの「ルート」を表す「.」と推測しています。」の確認

https://qiita.com/umeyon/items/7c9a8b772f598dd99e87

# DNSのパケット構造

https://atmarkit.itmedia.co.jp/ait/articles/1601/29/news014.html

実際に手元のnamed にデータを加え、上記を参考に解釈した。

:::note warn
パケットデータ上は上記itmediaの記事のように圧縮が行われることがありますが、今回は展開された形となるように元データを作成しています。
:::

# Aレコードのパケットデータ
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354637/6d75ad52-a14b-bb94-1cfb-d54f56eea1a6.png)

Aレコードのレスポンスパケットの該当部分のデータは以下
```
|A   |IN  |TTL(86400)|length(4)|192|168|0 |20|
|0001|0001|00015180  |0004     |c0 |a8 |00|14|
```
:::note
IPアドレスはバイナリ4バイト
:::

# MXレコードのパケットデータ
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354637/57f968f8-580b-9807-efe6-ee67d53dd61c.png)

MXレコードのレスポンスパケットの該当部分のデータは以下
```
|MX  |(snip)|preference|len|mail    |len|example       |len|com   |
|000f|(snip)|000a      |04 |6d61696c|07 |6578616d706c65|03 |636f6d|00
```

:::note
データのどこにも「.」はない
FQDNの部分は、「長さ+文字列」の繰り返し。最後が00
表記上は、区切り文字「.」を追加、最後にルートラベル「.」追加して表示し「mail.example.com.」となる。
:::


# IPアドレスが設定されたMXレコードのパケットデータ
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354637/b7ee78a5-142f-8262-1138-957117fd370e.png) [^1]

IPアドレスが設定されたMXレコードのレスポンスパケットの該当部分のデータは以下
```
|MX  |(snip)|preference|len|192   |len|168   |len|0 |len|20  |
|000f|(snip)|000a      |03 |313932|03 |313638|01 |30|02 |3230|00
```

::: note
Aレコードの時のIPアドレスとは違い、「長さ+文字列」の繰り返し。最後が00
MXレコードなので、FQDN と解釈し、表記上は、区切り文字「.」を追加、最後にルートラベル「.」追加して表示し「192.168.0.20.」となる。
:::

# dig の表示結果
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354637/3df7107c-b7ef-efb9-28d4-1267bb4637d8.png)

:::note warn
「192.168.0.20.」と最後に「.」（ドット）がついて表示されている
:::

# Windows 10 の nslookup では、最後の「.」（ドット）は付かない
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354637/a8038c74-5f24-548f-29ee-8386aa1d0d12.png)

:::note
「192.168.0.20」と最後に「.」（ドット）の表示はない
:::

# 結論
:::note
コマンドdigのMXレコードの結果表示の最後の「.」は、コマンドdigの表記上表示されるだけで、データ上はない。
:::

# 補足
実際のnamedの設定は以下です。
named の設定上は、下記のように、最後に「.」が必要です。

```
;
@       IN      SOA     ns.example.net. root.example.net.       (
        20240122        ;Serial No.
        10800   ;Refresh
        1800    ;Retry
        604800  ;Expire
        86400   ;Minimum
        )

        IN      NS      ns.example.net.
        IN      A       192.168.0.15                <- 試したAレコード
        IN      MX      10 mail.example.com.        <- 試したMXレコード

; Host Information
ns      IN      A       192.168.0.15
www     IN      A       192.168.0.15
mail    IN      MX      10 192.168.0.20.            <- IPアドレス設定したMXレコード
```

最後の「.」がないと、以下のように設定すると、MX = 192.168.0.20.(ドメイン) （今回の場合は、192.168.0.20.example.net.）が実際のデータとなります。
```
mail    IN      MX      10 192.168.0.20
```

これは、設定内容が、IPアドレスでなくても同様で、下記だと、mx.example.net ＋ (ドメイン)（今回の場合は mx.example.net.example.net.）が実際のデータとなります。（namedの設定の時によくやってしまう失敗）
```
mail    IN      MX      10 mx.example.net
```

#
ちなみに例の件は、権威サーバがAWS だったはずなので、補足のnamedの設定の話は関係ないはずです。
間違いのご指摘・コメント等ぜひよろしくお願い致します。

[^1]: 2024年1月23日 16時 画像間違い修正