DNSレコードタイプは、ドメイン名とIPアドレスなどの情報を関連付けするためのDNSの設定項目です。

レコードタイプは100種類以上存在します。(廃止・新規追加も行われている)
IANA(Internet Assigned Numbers Authority)が管理されていて、こちらでレコードタイプの一覧を確認することもできます。

今まで業務の中で触ったことのある代表的なレコードタイプについて書いていきます。

Aレコード

AレコードのAはAddressの略になります。

ドメイン名(例: example.com)に対応するIPv4アドレス(例: 192.0.2.0)を指定するレコードになります。

上記の例でいうと、ブラウザ等でexample.comにアクセスすると、DNSの問い合わせを経て192.0.2.0に接続されることになります。

sequenceDiagram
    participant User as ユーザーのブラウザ
    participant DNS as DNSサーバ
    User->>DNS: example.comの名前解決を問い合わせ
    DNS-->>User: Aレコード(192.0.2.0)を応答
    User->>192.0.2.0: 接続

AAAAレコード

AAAAレコードのAはAddressの略で、IPv4アドレスの長さが32ビットであるのに対して、Ipv6アドレスの長さは128ビットでIPv4アドレスの4倍なことからAAAAと4つのAが使われています。

AレコードがIPv4アドレスとドメインを紐づけるのに対して、AAAAレコードはIPv6アドレスとドメインを紐づけるレコードになります。

ちなみに、IPv6は2001:0db8:0000:0000:0000:0000:0000:0000のような形式で表されます。

CNAMEレコード

CNAMEレコードのCNAMEはCanonical Nameの略になります。

ある特定のドメイン名(エイリアス)を別のドメイン名(正引き先)に紐づけるレコードになります。

例えば、www.example.comをexample.comに紐づける場合、www.example.comのCNAMEレコードをexample.comに設定します。

すると、ブラウザ等でwww.example.comにアクセスすると、DNSの問い合わせを経てexample.comのAレコードが参照され、最終的にexample.comのIPアドレスに接続されることになります。

sequenceDiagram
    participant User as ユーザーのブラウザ
    participant DNS as DNSサーバ
    participant Origin as example.comのサーバ
    User->>DNS: www.example.comの名前解決を問い合わせ
    DNS-->>User: CNAMEレコード(example.com)を応答
    User->>DNS: example.comの名前解決を問い合わせ
    DNS-->>User: Aレコード(192.0.2.0)を応答
    User->>Origin: 接続

GitHub Pagesのカスタムドメイン設定でもCNAMEレコードを使用して、独自ドメインをGitHub Pagesのサイトに紐づけています。

ホスト名: my-knowledge.st-man.com TYPE: CNAME 値: st-man-hori.github.io

VercelやNetlifyなどのホスティングサービスでも、独自ドメインをサービスに紐づける際にはCNAMEレコードを使用します。

MXレコード

MXレコードのMXはMail eXchangerの略になります。

指定のドメイン宛てのメールをどのメールサーバで受信するかを指定するレコードになります。

例えばmail.example.com宛てのメールを受信するメールサーバを指定する場合、example.comのMXレコードをmail.example.comに設定します。

sequenceDiagram
    participant User as ユーザーのメールクライアント
    participant DNS as DNSサーバ
    participant Mail as mail.example.comのメールサーバ
    User->>DNS: example.comのMXレコードを問い合わせ
    DNS-->>User: MXレコード(mail.example.com)を応答
    User->>Mail: メール送信

MXレコードは優先度を指定することができます。(数値が小さいほど優先度が高くなります)

例えば、example.comのMXレコードを以下のように設定した場合、mail1.example.comが優先的に使用され、mail1.example.comが利用できない場合にmail2.example.comが使用されます。

example.com.  IN  MX  10 mail1.example.com.
example.com.  IN  MX  20 mail2.example.com.

TXTレコード

TXTレコードのTXTはTextの略になります。

ドメインに任意のテキスト情報を紐づけることができるものになります。

もともとは「人間が読むためのメモ」を残すためのものとして策定されたものですが、現在はドメインの所有者確認やSPFなどのメール認証情報の設定にも使用されるようになっています。

メモ用途→セキュリティ認証用途に変化したようなイメージです。

認証用途は、主に下記の4つに分類されます。

認証技術説明例
SPF送信元メールサーバーの認証v=spf1 include:_spf.example.com ~all
DKIMメール本文の改ざん検知v=DKIM1; k=rsa; p=公開鍵
DMARCSPFやDKIMの結果に基づく受信ポリシーv=DMARC1; p=none; rua=mailto:dmarc@example.com
所有権の証明サーチコンソールやSSL証明書発行時のドメイン所有者確認google-site-verification=xxxxxxxxxxxxxxxx

TODO: SPF,DKIM,DMARCは別途記事にする予定。

NSレコード

NSレコードのNSはName Serverの略になります。

指定のドメインのDNS情報を管理しているDNSサーバを示すレコードになります。

例えば、example.comのDNS情報を管理しているDNSサーバがhoge.ns.cloudflare.comの場合、example.comのNSレコードをhoge.ns.cloudflare.comに設定します。 そうすることで、example.comに対するDNSの問い合わせはhoge.ns.cloudflare.comに転送され、正しいDNS情報が取得されるようになります。

sequenceDiagram
    participant User as ユーザーのブラウザ
    participant DNS as DNSサーバ
    participant NS as hoge.ns.cloudflare.comのDNSサーバ
    User->>DNS: example.comの名前解決を問い合わせ
    DNS-->>User: NSレコード(hoge.ns.cloudflare.com)を応答
    User->>NS: example.comの名前解決を問い合わせ
    NS-->>User: Aレコード(192.0.2.0)を応答
    User->>Origin: 接続

PTRレコード

PTRレコードのPTRはPointer Recordの略になります。

PTRレコードは、IPアドレスから対応するホスト名を逆引きするためのレコードになります。Aレコードの逆の役割を果たすものと考えるとわかりやすいです。

例えば、192.0.2.0に対応するホスト名がexample.comの場合、192.0.2.0のPTRレコードをexample.comに設定します。

0.2.0.192.in-addr.arpa.  IN  PTR  example.com.

in-addr.arpaは、IPv4アドレスの逆引き専用のドメインになります。IPv6の場合はip6.arpaが逆引き専用のドメインになります。

用途はいくつかあるようですが、主にメールサーバーの逆引きに使用されます。これにより、送信元のIPアドレスから正しいホスト名を確認することができ、スパム対策やセキュリティ強化に役立ちます。

sequenceDiagram
    participant Sender as 送信側メールサーバー
    participant Receiver as 受信側メールサーバー
    participant DNS as DNSサーバー
    Sender->>Receiver: メール送信 (送信元IP: 192.0.2.1)
    Receiver->>DNS: 192.0.2.1 のPTRレコードを問い合わせ
    DNS-->>Receiver: PTRレコード (mail.example.com) を応答
    Note over Receiver: PTRレコードと送信元情報の一致を検証
    alt 一致
        Receiver-->>Sender: メール受信
    else 不一致
        Receiver-->>Sender: メール拒否
    end

理解度チェック(AI生成)

以下の4択問題で、DNSレコードタイプの理解度をチェックしてみましょう。答えは折りたたまれているので、クリックして確認してください。

Q1. AAAAレコードの名前の由来として正しいものはどれか?

  1. Aレコードの4世代後継バージョンだから
  2. IPv6アドレスの長さがIPv4アドレスの4倍(128ビット)だから
  3. 4つのDNSサーバーで冗長化されているから
  4. 特に意味はなく、慣習的にAAAAと呼ばれている

Q2. CNAMEレコードの説明として正しいものはどれか?

  1. ドメインをIPv4アドレスに直接紐づけるレコード
  2. あるドメイン名(エイリアス)を別のドメイン名に紐づけるレコード
  3. メールの送信元サーバーを認証するためのレコード
  4. IPアドレスからホスト名を逆引きするためのレコード

Q3. MXレコードにおいて、優先度の数値と優先順位の関係として正しいものはどれか?

  1. 数値が大きいほど優先度が高い
  2. 数値が小さいほど優先度が高い
  3. 優先度はすべて同一で数値に意味はない
  4. 優先度はアルファベット順で決まる

Q4. TXTレコードの用途として誤っているものはどれか?

  1. SPFによる送信元メールサーバーの認証情報の設定
  2. サーチコンソールなどでのドメイン所有者確認
  3. ドメインに対応するホスト名の逆引き
  4. DKIMによるメール本文の改ざん検知情報の設定

Q5. NSレコードの役割として正しいものはどれか?

  1. ドメインに対応するIPv4アドレスを指定する
  2. 指定のドメインのDNS情報を管理しているDNSサーバーを示す
  3. メールの受信サーバーを指定する
  4. IPアドレスからホスト名を逆引きする