#
ドキュメント

Document

自分のための備忘録です。

DNS(Domain Name System)の仕組み

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

IPアドレスは、それぞれ以下のようになります。

  • スタブリゾルバ:digを実行している10.0.0.50
  • フルサービスリゾルバ:AWSではVPC作成時にフルサービスリゾルバが自動で提供されます。フルサービスリゾルバのIPアドレスはVPCのネットワークアドレス + 2なので、 例では10.0.0.2/16になります。
  • オーソリティサーバ199.43.135.53199.43.133.53
$ dig +short example.org NS
a.iana-servers.net.
b.iana-servers.net.

$ dig +short a.iana-servers.net
199.43.135.53

$ dig +short b.iana-servers.net.
199.43.133.53

ドメインとサーバ

ドメインを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については https://github.com/s-hiroshi/note/blob/master/network/network-mail.html も参照。

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

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はTCP層で処理されるので実際のペイロードが送信される前にスパム判定ができる.

+-~?の意味。

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

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

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

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

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

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

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

ref.

ゾーンの委譲

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

ゾーンの委譲は、ゾーンの管理を委譲することなので、各種リソースレコードは委譲先で管理する。

例)

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

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

上記を設定した場合、example.comのMXレコードやSPFはother-dns1.com, other-dns2.comに設定する.

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

上記はipアドレスがxxx.xxx.xxx.xxxまたはAレコードのIPアドレスと等しい場合は許可、それ以外は拒否となる。 SPFはTCPで行われるので実際のペイロードが送信されるまま前に判定できる。

具体例

お名前.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の設定は以下を参照。

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

関連ドキュメント