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
IPアドレスは、それぞれ以下のようになります。
スタブリゾルバ
:digを実行している10.0.0.50
フルサービスリゾルバ
:AWSではVPC作成時にフルサービスリゾルバ
が自動で提供されます。フルサービスリゾルバ
のIPアドレスはVPCのネットワークアドレス + 2なので、 例では10.0.0.2/16
になります。オーソリティサーバ
:199.43.135.53
、199.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
, 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は偽造が難しいことを前提にしている)。
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