DNSについて

日時:

昔DNSについて調べたときにまとめたもの.

手順書として読む場合,この章は「レジストリとレジストラおよびリセラ」の手前まで飛ばす.

ドメインとドメイン名とその構造

example.comやwww.example.co.jpのような文字列はドメイン名と呼ばれる.人間にとって比較的分かりやすいドメイン名にIPアドレスを紐づけることで,そのサーバをドメイン名で見つけられる.

TLD(Top Level Domain)とはドメイン名の一番最後につくcomとかnetなどで表される(ルードドメインのちょうど一つ下の)ドメインのこと.

TLDの子のドメイン(*.example.comだったらexampleのドメイン)は2LD(セカンドレベルドメイン)と呼ばれる.

ゾーンについて

そのドメイン名をネットワークで使えるようにするための仕組みとして,DNSがある.

DNSではドメインの木構造に合わせた管理・委任の仕組みを備えている.全てのドメインの情報を一元的に一か所で管理するわけではなく,各ドメインに対応させて情報を分散管理させる仕組みになっている.

権威サーバはそのゾーンの情報と委任したゾーンの委任情報をリソースレコード(各ドメインに関連付けられた情報)として保持する.

リソースレコードの概要

例えばcomドメインを含むゾーンの権威サーバでの

といった内容を含んだリソースレコードをテキスト形式で表すと以下のようになる.

example.com.     86400 IN NS   ns1.example.com.
example.com.     86400 IN NS   ns2.example.com.

ns1.example.com. 86400 IN A    192.0.2.59
ns2.example.com. 86400 IN A    192.0.2.60
ns1.example.com. 86400 IN AAAA 2001:db8:94d2::d12:2023
ns2.example.com. 86400 IN AAAA 2001:db8:94d2::d12:2024

一般に,リソースレコードをテキスト形式で表すと以下のようになる.

NAME TTL CLASS TYPE RDATA

名前解決

DNSの重要な役割の一つにドメイン名から対応するIPアドレスを見つけ出す名前解決がある.名前解決の流れは以下のとおり.

いくつか別の名称もある.

www.example.comというドメインを例にした,名前解決の手順とそれを表した図のは以下のようになる.

                  |        |--------->| .ドメイン(ルートドメイン)の
                  |        |<---------|        権威サーバ
                  |        | 
                  |        |--------->| .comドメイン(ルートドメイン)の                      
ブラウザ等 ⇌ スタブリゾルバ ⇌ | フルリゾルバ |<---------|        権威サーバ                 
                  |        |         
                  |        |--------->| .example.com(ルートドメイン)の                       
                  |        |<---------|        権威サーバ                      
  1. ブラウザ等のプログラムがwww.example.comの名前解決のためにスタブリゾルバを呼び出す.
  2. スタブリゾルバ自体は名前解決をせず,フルリゾルバに代わりに名前解決をするよう要求する(名前解決要求).
  3. フルリゾルバには過去に依頼されて得た応答結果を保持する仕組み(キャッシュ)がある.依頼されたフルリゾルバは,キャッシュを調べ,www.example.comに対応するIPアドレスの情報があるかを確認する.あればそれをスタブリゾルバに返す(この場合はここで名前解決終了).なければ次の4番へ.
  4. フルリゾルバはルートゾーンの権威サーバ(特にこれをルートサーバという)のIPアドレスなどの情報をあらかじめ持っている.これをもとに,ルートサーバにwww.example.comのIPアドレスを問い合わせる.
  5. ルートサーバはcomドメイン以下の情報はcomドメインのゾーンの権威サーバに委任していたため,その委任先の権威サーバのIPアドレスなどの情報を返す.
  6. フルリゾルバはその情報をキャッシュする.そして,その情報をもとに,comドメインのゾーンの権威サーバにwww.example.comのIPアドレスを問い合わせる.
  7. comドメインのゾーンの権威サーバはexample.comドメインに関する情報をexample.comドメインのゾーンの権威サーバに委任していたため,その委任先のサーバのIPアドレスなどの情報を返す.
  8. フルリゾルバはその情報をキャッシュする.そして,その情報をもとに,example.comドメインのゾーンの権威サーバにwww.example.comのIPアドレスを問い合わせる.
  9. example.comドメインのゾーンの権威サーバはwww.example.comドメインのIPアドレスの情報を保持していた(もしこれを別の権威サーバにさらに委任していたらまた今までのような手続きを繰り返す).その情報をフルリゾルバに返す.
  10. フルリゾルバはその情報をキャッシュする.結果が返ってきたため,それをスタブリゾルバに返す.その時間の間は再びwww.example.comの問い合わせが来たときはこのキャッシュした値を返す(上で述べた3番の手続き).
  11. スタブリゾルバはそのIPアドレスを呼び出し元のプログラム(ブラウザなど)に返す.
  12. そのIPアドレスを用いてwww.example.comにアクセスする.

このようにして,www.example.comのIPアドレスを得ることができる.

もしexample.comのドメイン名を登録申請し,サイトを立ち上げるためにwww.example.comというドメインを何かしらのウェブサーバに対応させるには以下の手続きをする.

  1. comを含むゾーンの権威サーバにexample.comの権威サーバの情報を登録する.
  2. www.example.comに関連付ける情報(ウェブサーバのIPアドレスなど)をexample.comを含むゾーンの権威サーバに登録する.

DNSは浸透しない

TTLの時間が経てばフルリゾルバのキャッシュは消える.そしたら再度権威サーバに問い合わせが行く.そのため,サイトをのっけてたサーバを移行してIPアドレスが変わったとしても,移行後も少なくともそのTTLの時間が経てばここの世にあるフルリゾルバは全て正しい値に更新されている.浸透するという表現に値するような手続きはない.

レジストリとレジストラおよびリセラ

ではexample.comといったドメインを登録申請する.その時対峙するのがレジストラ.

実際にドメイン名の登録申請をする.

ドメイン名を考えつつレジストラ選び

ドメイン名をどのレジストラから登録申請するか決める.

取るドメイン名を考える

自分の取りたい文字列を考える.そもそも,ドメイン名はどのようなものがいいのか.以下は個人的に得た結論.

レジストラと取るドメイン名を決める

数年前にCloudflareが始めたCloudflare Registrarから登録申請を行う(理由:安い).

どこを選んでもやることは基本変わらない.

基準としては

あたりで選ぶのがいいと思う.一般に,後で他のレジストラに移管することもできる.

登録手順(簡易版)

Cloudflareに登録する.その後,サイドバーのDomain Registration > Register Domainsの画面から登録したいドメイン名を入れて,以後本名等の入力を求められるのであとは流れに従って記入する

[f:id:cyberpastime:20230205155358j:plain:alt=Cloudflareのドメイン名入力画面]

完了したら以下の画面が出てくる.

[f:id:cyberpastime:20230205155422j:plain:alt=Cloudflareのドメイン名登録完了画面]

下のWHOIS informationが提出されたWhois情報.ほとんどの個人情報はDATA REDACTEDで見れなくなっているはず.ただし,

はICANNのポリシーに従い公開されるとのこと.詳細は以下のページに.

ドメイン名を登録しただけで何も設定していないと,アクセスしようとしても何も表示されない.レジストラによっては用意されたデフォルトのページが表示される(Cloudflare Registrarはそうではない).

このドメイン名をVPSに紐づける.そのために,そのドメインのゾーンを管理する権威サーバが必要だが,基本的には利用したレジストラが提供してくれる.

今回もCloudflareが提供するサービスを用いる.

もし,レジストラと用いる権威サーバのサービスが異なる場合は,通常レジストラを通じてその権威サーバの情報を上位のゾーン(TLD)の権威サーバに登録してもらえばいい(レジストラのドメイン管理のページに「ネームサーバを登録」のようなページがあるはず).今回そうではないので省略.

リソースレコードの設定

そのままCloudflareを使ってドメイン名をVPSに紐づけるリソースレコードを設定する.

Homeの下にある「ドメイン名 Active」からDNSをクリック.

そしたら,リソースレコードの登録画面が出てくる.

[f:id:cyberpastime:20230205155458j:plain:alt=Cloudflareのレコード入力画面]

「Add record」から以下の二つのリソースレコードを追加する.

Type Name 備考
A サブドメインを用いるならその文字列,使わないなら@ VPSのIPv4アドレスをいれ,Proxy StatusはOn(オレンジ色)にする.
AAAA サブドメインを用いるならその文字列,使わないなら@ VPSの(さっき設定した)IPv6アドレスをいれ,Proxy StatusはOn(オレンジ色)にする.

Cloudflareによってプロキシ化してもらうことで,サーバのIPアドレスを秘匿してくれたり,DDos攻撃の盾になってくれたりする.

多分上の文章で[name] points to [IPv4 address] and has its traffic proxied through Cloudflare.がリアルタイムで変わっていくため,それを見ながらやれば大丈夫だと思う.

例:ドメイン名example.comに対して,mastodon.example.comでサーバを建てるなら

Type Name IPv4 address or IPv6 address
A mastodon VPSのIPv4アドレス
AAAA mastodon VPSのIPv6アドレス

マストドンに使うドメインにサブドメインを使うかどうか

example.comを登録した場合,マストドンのサーバに使うのはexample.comか,あるいはsub.example.comのようにした方がいいかどうか.

諸々の設定

メールを使わないことを言うリソースレコードを設定する.

左のメニューの

DNS > Settings > Email Security > Prevent illegitimate email traffic on your domainのCreate records

をクリックすれば自動的に複数のTXTレコードが追加される.その具体的な内容についての説明は以下のCloudflareのページで解説されているため,省略.

電子メールを送信しないドメインを保護する方法, https://www.cloudflare.com/ja-jp/learning/dns/dns-records/protect-domains-without-email/

また,メールを受け取らない設定をMXレコードでする.IPアドレスを紐づけたときと同様,Add recordで

Type Name TTL Mail server Priority
MX @ Auto . 0

と設定する.

次に,証明書を発行できる認証局を限定させるCAAレコードとキャッシュポイズニング攻撃を防ぐためのDNSSECの設定をする.

「Add record」から以下の二つを追加.

Type Name TTL Tag CA domain name
CAA @ Auto only allows specific hostnamesを選択 letsencrypt.org
CAA @ Auto only allows wildcardsを選択 letsencrypt.org

そしてDNS > Settings から 「Enable DNSSEC」を押す.

以下残りの設定を列挙.

サイドバーの「SSL/TLS」から