DNS はドメイン名から IP アドレスを割り出します。
ドメインから IP アドレスを割り出すことを名前解決と呼びます。

DNS はアプリケーション層のプロトコルです。

DNS は階層構造をしており親から子に管理が委譲されていきます。
委譲された管理範囲をゾーンと呼びます。

DNSサーバの種類

ドメインに対応する IPアドレス を返します。

DNSサーバーの種類 役割
権威サーバ(コンテンツサーバ、オーソリティサーバ、ゾーンサーバ) ドメイン名・ゾーンを管理する
フルサービスリゾルバ(キャッシュサーバ) 外部の問い合わせに対応
一度解決したアドレスをキャッシュする
スタブリゾルバ OS の中にあり host ファイルで名前解決したり、フルサービスリゾルバに問い合わをする

※ フルサービスリゾルバから権威サーバへの問い合わせは反復問い合わせです。
スタブリゾルバからフルサービスリゾルバへの問い合わせは再帰問い合わせです。

  • ドメインはルートドメインから順に問い合わせされる
  • コンテンツサーバを権威サーバ・オーソリティ( Authority )サーバと呼ぶことがある
  • 1台の DNS でコンテンツ機能とキャッシュ機能を提供する場合もある

ref. https://www.nic.ad.jp/ja/newsletter/No40/0800.html

以下の分類も参照。

AWS Route53

ネームサーバ

ネームサーバは文脈により色々な意味で使用されますが、以下の説明が分かりやすいです。

ネームサーバー(DNSサーバー) 「ネームサーバー」は、文脈により二つの意味で使われます。 一つはNSリソースレコードにより指定されるサーバーで、権威サーバー(権威DNSサーバー)を指します(下図1)。もう一つはDNSのサービスを提供するサーバーで、権威サーバーに加え、フルサービスリゾルバー(キャッシュDNSサーバー)も含みます(下図2)。

また、後者の意味では「DNSサーバー」という呼称もあります。

https://jprs.jp/glossary/index.php?ID=0157

サンプル問題)

DNS はスタブリゾルバフルサービスリゾルバ権威サーバで構成されています。 EC2 で dig コマンドを使って example.org の IP アドレスを調べました. (インスタンスのプライベート IP アドレスは 10.0.0.50/16 と仮定します。)

$ dig +short example.org
93.184.216.34

このとき以下の通信が発生していました。

$ sudo tcpdump -tnl -i eth0 udp port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

IP 10.0.0.50.44632 > 10.0.0.2.53: 51545+ [1au] A? example.org. (40)
IP 10.0.0.2.53 > 10.0.0.50.44632: 51545 1/0/1 A 93.184.216.34 (56)

フルサービスリゾルバの IP アドレスを選択してください。

  1. 10.0.0.50
  2. 10.0.0.2

正解 2

Amazon VPC のフルサービスリゾルバ はネットワークアドレス部に 2 を追加したアドレスが振られる。

ドメインとサーバ

ドメインを A 社で管理して、サイトを B 社サーバーで運用する場合を考えます。

  • A 社 NS を使用: NS がゾーンを管理しているので、A 社 NS のリソースレコードにゾーン情報(リソースレコード)を設定
  • B 社 NS を使用: NS がゾーンを管理しているので、B 社 NS のリソースレコードにゾーン情報(リソースレコード)を設定

リソースレコード

代表的なリソースレコードに、A, AAAA, MX, NS, TXT, CNAMEなどがあります。

タイプ 内容
A ドメインの IPv4 のアドレス
AAAA ドメインの IPv6 のアドレス
MX ドメイン名宛のメールの配送先
NS ゾーンを管理する NS サーバ名
TXT テキスト情報
CNAME 「別名に対する正式名を指定するためのリソースレコードです。」
(出典: https://jprs.jp/glossary/index.php?ID=0212 )
SOA 「ゾーンの起点を示し、ゾーンの管理情報を指定するためのリソースレコードです。SOAリソースレコードは、一つのゾーンに一つだけ記述されます。」 ref. https://jprs.jp/glossary/index.php?ID=0194

※ TXT リソースレコードは、 SPF ( Sender Policy Framework )から Google サイト認証まで幅広く使用されています。

MXレコード

ref. https://baremail.jp/blog/2022/05/31/2502/

優先度

  • 数値が小さいほと優先的が高い
  • 優先度が高いサーバが配信
  • ↑が障害などで配信できない場合に優先度の低いサーバが配信

CNAMEレコード(Canonical Name record:正式名レコード)

指し示す先は自らの管理下にない他ドメインのホスト名でも構わないため、「remote.example.jp. IN CNAME gateway.example.com.」のように自ドメイン内のあるホスト名を別のドメインへの転送アドレスのように設定することもできる。

https://e-words.jp/w/CNAME%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89.html

TXTレコード

TXT レコードは同一レコード名に対して複数指定できます。

dig +noedns example.org txt

; <<>> DiG 9.10.6 <<>> +noedns example.org txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30626
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 4

;; QUESTION SECTION:
;example.org.                   IN      TXT

;; ANSWER SECTION:
example.org.            86400   IN      TXT     "v=spf1 -all"                        <=== 複数設定
example.org.            86400   IN      TXT     "6r4wtj10lt2hw0zhyhk7cgzzffhjp7fl"   <=== 複数設定

;; AUTHORITY SECTION:
example.org.            2879    IN      NS      b.iana-servers.net.
example.org.            2879    IN      NS      a.iana-servers.net.

;; ADDITIONAL SECTION:
a.iana-servers.net.     615     IN      A       199.43.135.53
b.iana-servers.net.     702     IN      A       199.43.133.53
a.iana-servers.net.     615     IN      AAAA    2001:500:8f::53
b.iana-servers.net.     327     IN      AAAA    2001:500:8d::53

;; Query time: 130 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: Tue Feb 07 17:18:48 JST 2023
;; MSG SIZE  rcvd: 234

ただ Route 53 のように改行して 1 レコードで設定する必要があるサービスもあります。 ref. Route 53のTXTレコードに複数値を登録できますか?への対処法

SPF(Sender Policy Framework)

【重要】 SPFについてはmail.mdも参照。

エンベロープ From  もヘッダ From も簡単に偽装できます。SPF はエンベロープ From の偽装に対応する技術です。具体的には送信元ドメイン(エンベロープ From のドメインと HELO ドメイン)の DNS から SPF レコードを取得して、送信元 IP が含まれているかをチェックします(送信元 IP の偽造は難しいことを前提にしています)。

ref. https://www.nic.ad.jp/ja/basics/terms/spf.html

foo.example.com TXT v=spf1 +ip4:xxx.xxx.xxx.xxx/24 +a:foo.example.com +mx ~all

上記は ip アドレスが xxx.xxx.xxx または A レコードの IP アドレスまたは MX サーバの IP アドレスと等しい場合は許可、それ以外は拒否されます。 SPFはSMTPセッション中、エンベロープFromを用いてメール本文(ペイロード)が送信される前の段階でチェックされるため、スパム判定を早期に行うことができます(送信元IPの偽装がTCPの仕組み上困難であることを前提としています)。

+-~?の意味。

・「+」⇒正常なメールとして処理

・「⁻」⇒不正メールとして処理され、配信拒否の可能性あり

・「~」⇒不正メールとして処理されるが、配信される

・「?」⇒SPF指定なしとして処理される

省略した場合は+として処理されます。

省略した場合は全て「+」(正常なメール)として処理されます。

ref. https://baremail.jp/blog/2020/02/28/579/

ref.

  • https://sendgrid.kke.co.jp/blog/?p=3509&utm_source=google&utm_medium=cpc&utm_content=text&utm_campaign=dsa&gclid=Cj0KCQiAxoiQBhCRARIsAPsvo-y6P1r8PAGf-h18Q_Rq2yHUSeaI7SJiiqeZY6YsnlotbRBgCS7heroaAoMYEALw_wcB
  • https://help.salesforce.com/s/articleView?id=000313465&type=1

ゾーンの委任

DNSはゾーンを委任できます。
example.com ゾーンの委任は NS レコードに委任先の NS を指定します。

ゾーンの委任は、ゾーン管理を委任するので、各種リソースレコードは委任先で管理します。

例)

ドメインを example.com をお名前.comでを取得して other-server で管理します。
example.com のゾーンを委任するので、 example.com の NS レコードに委任先ネームサーバー other-dns1.comother-dns2.com を指定します。

example.com NS other-dns1.com  
example.com NS other-dns2.com

example.com の MX レコードや SPF などのリソースレコードは other-dns1.comother-dns2.com に設定します。

example.com A xxx.xxx.xxx.xxx
example.com MX 10 mg.mailgun.org
example.com TXT v=spf1 +ip4:xxx.xxx.xxx.xxx/24 +a:example.com +mx ~all

user@example.com宛のメールを配送するには、MXレコードはexample.com自体に設定する必要があります(サブドメインmail.example.comに設定してもexample.com宛メールの配送には使われません)。

上記は ip アドレスが xxx.xxx.xxx.xxx または A レコードの IP アドレスと等しい場合は許可、それ以外は不正メールとして配信されます。
SPFはSMTPセッションの早い段階(エンベロープFromの受信時点)でチェックされるため、実際のペイロードが送信される前に判定できます。

具体例

お名前.comのNSを使用

お名前.comでドメインを取得して、さくらのレンタルサーバーでサイトを運用する場合を考える。

お名前.comのNSを使用する場合は、お名前.comのNSにリソースレコードを設定する。

設定すべき代表的なリソースレコードとしてA, MX, (SPFを使用する場合)TXTレコードがある。
※ SPFはさくらのドメイン設定で使用の有無を設定できる。

  • IP:さくらのレンタルサーバー情報で確認
  • MX:さくらのレンタルサーバーの初期ドメイン 優先度10
  • SPF:v=spf1 a:www.sakura.ne.jp mx ~all (www.sakura.ne.jpはさくらのレンタルサーバーホスト名)

SPFの設定は以下を参照。

  • https://help.sakura.ad.jp/206206521/ (さくら)
  • https://www.xserver.ne.jp/manual/man_domain_dns_setting.php (Xserver)

DNSレコード設定(お名前、AWS)

お名前.comでドメインを取得してRoute 53に委譲する。

  • レジストラ:お名前.com
  • 運用:AWS Route 53

お名前.comのNSレコードにRoute 53のNSを設定する。

ドメイン・DNS・レコード設定

localhost

localhostはループバックアドレス127.0.0.1のドメイン名。

dig

基本的にdigコマンドが便利。

ref.
https://dev.classmethod.jp/articles/dig-route53-begginer/?utm_source=pocket_mylist

$ dig example.com
//  レコードタイプを省略した場合はAレコード

Aレコードを知りたい

$ dig example.com -t A

NSを知りたい

$ dig example.com -t NS

各種サービス

ドメイン・DNS・レコード設定(お名前、AWS)

ドメイン・DNS・レコード設定(お名前、AWS)

さくらのレンタルサーバ

さくらのレンタルサーバ

お名前.comからAWSにゾーン委譲

お名前.comからAWSにゾーン委譲

Pardot

PardotのDNS

Tools

関連ドキュメント