DNS はドメイン名から IP アドレスを割り出します。
ドメインから IP アドレスを割り出すことを名前解決と呼びます。
DNS はアプリケーション層のプロトコルです。
DNS は階層構造をしており親から子に管理が委譲されていきます。
委譲された管理範囲をゾーンと呼びます。
ドメインに対応する IPアドレス を返します。
DNSサーバーの種類 | 役割 |
---|---|
権威サーバ(コンテンツサーバ、オーソリティサーバ、ゾーンサーバ) | ドメイン名・ゾーンを管理する |
フルサービスリゾルバ(キャッシュサーバ) | 外部の問い合わせに対応 一度解決したアドレスをキャッシュする |
スタブリゾルバ | OS の中にあり host ファイルで名前解決したり、フルサービスリゾルバに問い合わをする |
※ フルサービスリゾルバから権威サーバへの問い合わせは反復問い合わせ
です。
スタブリゾルバからフルサービスリゾルバへの問い合わせは再帰問い合わせ
です。
ref. https://www.nic.ad.jp/ja/newsletter/No40/0800.html
以下の分類も参照。
ネームサーバは文脈により色々な意味で使用されますが、以下の説明が分かりやすいです。
ネームサーバー(DNSサーバー) 「ネームサーバー」は、文脈により二つの意味で使われます。 一つはNSリソースレコードにより指定されるサーバーで、権威サーバー(権威DNSサーバー)を指します(下図1)。もう一つはDNSのサービスを提供するサーバーで、権威サーバーに加え、フルサービスリゾルバー(キャッシュDNSサーバー)も含みます(下図2)。
また、後者の意味では「DNSサーバー」という呼称もあります。
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 アドレスを選択してください。
正解 2
Anazon VPC のフルサービスリゾルバ
はネットワークアドレス部に 2 を追加したアドレスが振られる。
ドメインを A 社で管理して、サイトを B 社サーバーで運用する場合を考えます。
代表的なリソースレコードに、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 サイト認証まで幅広く使用されています。
ref. https://baremail.jp/blog/2022/05/31/2502/
指し示す先は自らの管理下にない他ドメインのホスト名でも構わないため、「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 レコードは同一レコード名に対して複数指定できます。
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 については https://github.com/s-hiroshi/note/blob/master/network/network-mail.html も参照。
エンベロープ 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 は 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
でドメインを取得して、さくらのレンタルサーバー
でサイトを運用する場合を考える。
お名前.comのNSを使用する場合は、お名前.comのNSにリソースレコードを設定する。
設定すべき代表的なリソースレコードとしてA, MX, (SPFを使用する場合)TXTレコードがある。
※ SPFはさくらのドメイン設定で使用の有無を設定できる。
SPFの設定は以下を参照。
お名前.comでドメインを取得してRoute 53に委譲する。
お名前.comのNSレコードにRoute 53のNSを設定する。
localhost
はループバックアドレス127.0.0.1
のドメイン名。
基本的に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