+ 作るログイン
図を読み込んでいます…
1 / 14
メールのしくみ ― DNS から SPF・DKIM・DMARC、Resend の運用まで / 全11章

メールのしくみ 2:DNS ― 名前から番号を引く仕組み

発行
アニメモ公式
版
第1版
改訂
コマ
全14

ドメイン名から IP アドレスを引く DNS を、問い合わせの流れ(窓口・ルート・管理サーバー・権威サーバー)から説明します。キャッシュと TTL、NS、MX の優先順位、TXT の使い分け、そして「持ち主しか書けない」ことがなぜメールの身元確認の足場になるのかまで。

名前は分かった。では番号はどうやって知る?

1本目で、インターネットの通信は必ず番号(IPアドレス)あてに届くこと、そして人間は番号の代わりに名前(ドメイン)を使うことを見ました。

ここで疑問が残ります。あなたの PC は animemo.app という名前しか知りません。では、その名前が何番の機械なのかを、どうやって知るのでしょうか。

この作品では、名前から番号を引く仕組みである DNS(Domain Name System)を見ていきます。メールの話からは少し遠回りに見えますが、メールの宛先探しも、メールの身元確認(SPF・DKIM・DMARC)も、すべて DNS の上に作られています。DNS の性質を知っておくと、後の作品で「なぜ DNS に書くのか」が自然に分かるようになります。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 1 / 14
  • 名前は分かった。では番号はどうやって知る?
  • animemo.app
  • あなたのPC
  • サーバー
  • ???
  • animemo.app は、何番の機械?
  • 1本目の続き。名前と番号の対応表は、どこにあるのか。

DNS:名前から番号を引く、公開の掲示板

DNS は、ドメインごとに1枚ずつある掲示板だと考えてください。掲示板には「この名前の番号はこれ」といった行が並んでいます。

あなたの PC は、animemo.app を開こうとすると、まず掲示板に「animemo.app は何番?」と問い合わせます。返ってきた番号あてに、初めて本来の通信を始めます。

この掲示板には、大事な性質が2つあります。

誰でも読める。 世界中の誰が問い合わせても、同じ答えが返ってきます。秘密の情報は置けません。

持ち主しか書けない。 これは後のページで詳しく見ます。

この2つの組み合わせが、メールの身元確認を支えることになります。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 2 / 14
  • DNS:名前から番号を引く、公開の掲示板
  • animemo.app は何番?
  • animemo.app
  • あなたのPC
  • DNS = ドメインごとの掲示板
  • animemo.app A 198.51.100.7
  • サーバー
  • 198.51.100.7
  • ドメインごとに掲示板があり、誰でも読める。

まず、近くの「問い合わせ窓口」に聞く

世界中の掲示板を、あなたの PC が自分で探し回るわけではありません。PC は、近くにある問い合わせ窓口に「animemo.app の番号を教えて」と頼むだけです。

この窓口をリゾルバ(フルサービスリゾルバ)と呼びます。家のネットならプロバイダが、会社なら社内のネットワークが用意しています。Google の 8.8.8.8 や Cloudflare の 1.1.1.1 のように、誰でも使える公開の窓口もあります。

窓口に任せる理由は、次のページから見る「探す手順」が何段階もあって手間がかかるからです。その手間を窓口がまとめて引き受け、答えだけを PC に返してくれます。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 3 / 14
  • まず、近くの「問い合わせ窓口」に聞く
  • 「animemo.app の A を教えて」
  • あなたのPC
  • 問い合わせ窓口
  • リゾルバ
  • プロバイダ・会社のネットワーク・ 8.8.8.8 などが用意している
  • PC は自分で世界中を探さない。窓口(リゾルバ)に丸ごと任せる。

窓口は、まず根っこ(ルート)に聞く

窓口も、最初から答えを知っているわけではありません。世界中の何億というドメインの番号を、1台のサーバーで全部持っておくことは不可能だからです。

そこで DNS は、担当を分けて、順にたどる形になっています。1本目で「ドメインは右から読む」と説明したとおり、右から順に担当が決まっています。

最初に聞くのは、一番右(一番上)を担当するルートサーバーです。ルートサーバーは animemo.app の番号を知りません。知っているのは、「.app の担当はこのサーバーです」ということだけです。

ルートサーバーの場所は、世界中の窓口にあらかじめ組み込まれています。ここが全体の出発点です。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 4 / 14
  • 窓口は、まず根っこ(ルート)に聞く
  • 1
  • ルートサーバー
  • .app の担当はあちら
  • あなたのPC
  • 問い合わせ窓口
  • リゾルバ
  • ルートは全部を知らない。「.app ならあちら」と担当を教えるだけ。

次に .app の管理サーバーに聞く

窓口は、教えてもらった .app の管理サーバーに聞きます。

.app の管理サーバーも、animemo.app の番号までは知りません。知っているのは、「animemo.app の掲示板は、このサーバーに置いてある」ということです。図の例では Cloudflare のサーバーです。

この「掲示板の置き場所」は、ドメインの持ち主が販売店(レジストラ)で設定した NS レコードで決まります。NS については後のページでもう一度触れます。

このように、上の担当は「下の担当が誰か」だけを知っていて、細かい中身は下の担当に任せています。この任せ方を委任と呼びます。委任のおかげで、DNS は世界中に分散したまま1つの仕組みとして動いています。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 5 / 14
  • 次に .app の管理サーバーに聞く
  • 1
  • ルートサーバー
  • .app の担当はあちら
  • 2
  • .app の管理サーバー
  • あなたのPC
  • 問い合わせ窓口
  • animemo.app は Cloudflare へ
  • リゾルバ
  • ここも番号は知らない。「animemo.app の掲示板は Cloudflare にある」と教える。

最後に、animemo.app の掲示板そのものに聞く

最後に窓口は、animemo.app の掲示板を持っているサーバーに聞きます。ここでようやく「animemo.app の A は 198.51.100.7」という答えが返ってきます。

このサーバーを権威サーバー(権威 DNS サーバー)と呼びます。「このドメインについての本物の答えを持っている」という意味です。ドメインの持ち主が DNS の管理画面で行を追加すると、この権威サーバーの掲示板に書き込まれます。

窓口は受け取った答えを、あなたの PC に返します。PC はその番号あてに、ようやく本来の通信を始めます。

ここまでの流れを振り返ると、答えの本物は権威サーバーにしかないことが分かります。途中の窓口やルートは、道案内をしているだけです。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 6 / 14
  • 最後に、animemo.app の掲示板そのものに聞く
  • 1
  • ルートサーバー
  • .app の担当はあちら
  • 2
  • .app の管理サーバー
  • あなたのPC
  • 問い合わせ窓口
  • animemo.app は Cloudflare へ
  • リゾルバ
  • 3
  • animemo.app の権威サーバー
  • 答え: 198.51.100.7
  • A 198.51.100.7(本物の掲示板)
  • 答えを持っているのは権威サーバーだけ。窓口は答えを PC へ返す。

窓口は、答えをしばらく覚えておく

毎回ルートから順にたどっていたら、時間がかかりすぎます。そこで窓口は、一度聞いた答えをしばらく覚えておきます(キャッシュ)。同じ質問が来たら、聞きに行かずにすぐ答えます。

どれくらいの間覚えていてよいかは、掲示板の行ごとに TTL(Time To Live、秒数)で決まっています。TTL が 3600 なら1時間です。窓口だけでなく、あなたの PC やブラウザも答えを覚えています。

この仕組みには裏返しがあります。掲示板を書き換えても、古い答えを覚えている窓口がある間は、新しい答えが行き渡りません。 反映まで数分から、長いと数時間かかります。

10本目で Resend の設定をするとき、DNS に行を追加してもなかなか「確認済み」にならないことがあります。多くの場合、原因はこの待ち時間です。設定を何度も書き直すと、かえって状況が分かりにくくなります。まずは待つことが大切です。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 7 / 14
  • 窓口は、答えをしばらく覚えておく
  • ルートサーバー
  • 覚えた: 198.51.100.7(1時間)
  • .app の担当はあちら
  • .app の管理サーバー
  • animemo.app は Cloudflare へ
  • あなたのPC
  • 問い合わせ窓口
  • リゾルバ
  • animemo.app の権威サーバー
  • すぐ答える
  • A 198.51.100.7(本物の掲示板)
  • 2回目からは聞きに行かない。覚えていてよい時間が TTL。

掲示板をどこに置くかは、NS で決まる

DNS の設定でよくある失敗に、「管理画面で行を追加したのに、いつまでも反映されない」というものがあります。原因の多くは、書いた場所が本物の掲示板ではないことです。

ドメインを買った販売店にも DNS の管理画面があり、Cloudflare などの別のサービスにも DNS の管理画面があります。どちらが本物の掲示板になるかは、販売店で設定した NS レコード(ネームサーバー)で決まります。NS が Cloudflare を指していれば、Cloudflare の画面に書いた行だけが本物です。販売店の画面に書いても、誰にも読まれません。

設定がおかしいときは、まず dig NS animemo.app のようにして、NS がどこを指しているかを確かめます。そこに書いたかどうかを確認するのが、最初の一歩です。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 8 / 14
  • 掲示板をどこに置くかは、NS で決まる
  • 販売店での設定
  • Cloudflare の DNS
  • animemo.app の NS
  • ここに書いた行が本物になる
  • 別のサービスの DNS 画面
  • ここに書いても誰も読まない
  • 書いても反映されないときは、NS の先と書いた場所が違うことを疑う。

掲示板に並ぶ行の種類

掲示板の1行を DNS レコードと呼びます。行の先頭には種類が付きます。

種類意味主な用途
Aこの名前の IPv4 アドレスWeb サイトなど
AAAAこの名前の IPv6 アドレスWeb サイトなど
CNAMEこの名前は、別の名前の別名Web サイトなど
NSこのドメインの掲示板を置いているサーバー委任
MXこのドメインあてのメールを受け取るサーバーメールの受信先
TXT自由に文字を書けるメモ欄身元確認(SPF・DKIM・DMARC)

メールで出てくるのは、主に MX と TXT です。次の2ページで、それぞれをもう少し詳しく見ます。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 9 / 14
  • 掲示板に並ぶ行の種類
  • A
  • IPv4 アドレス(Web など)
  • AAAA
  • IPv6 アドレス
  • CNAME
  • 別の名前の別名
  • NS
  • 掲示板を置いているサーバー
  • MX
  • メールを受け取るサーバー
  • TXT
  • 自由なメモ欄(身元確認はここ)
  • メールで使うのは MX(受け取り先)と TXT(メモ欄)。

MX には優先順位の数字が付く

MX(Mail eXchanger)は、「このドメインあてのメールは、このサーバーに持ってきて」という受け取り先の宣言です。[email protected] あてのメールを送るとき、送る側は gmail.com の MX を引いて、受け取り先を知ります。

MX の行には、優先順位の数字が付いています。

gmail.com  MX   5  gmail-smtp-in.l.google.com
gmail.com  MX  10  alt1.gmail-smtp-in.l.google.com
gmail.com  MX  20  alt2.gmail-smtp-in.l.google.com

数字が小さいほど優先です。送る側はまず 5 のサーバーに渡そうとし、つながらなければ 10、次に 20 と順に試します。

受け取り口を複数並べておく理由は、1台が止まってもメールを受け取り続けるためです。メールは「届かなかったら終わり」の性質が強いので、受け取る側はこうして冗長にしています。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 10 / 14
  • MX には優先順位の数字が付く
  • gmail.com の掲示板(MX の行の例)
  • MX  5 gmail-smtp-in.l.google.com
  • MX 10 alt1.gmail-smtp-in.l.google.com
  • MX 20 alt2.gmail-smtp-in.l.google.com
  • 受け取り口を複数並べておけば、1台が止まってもメールは届く
  • 数字が小さいほど先に使う。落ちていたら次の番号へ。

TXT は、名前の先頭に _ を付けて用途ごとに分ける

TXT は、本来はただの自由なメモ欄です。ところが後から作られたメールの身元確認の仕組みが、この欄を間借りして宣言を書くようになりました。新しい種類のレコードを作るより、既にある TXT を使うほうが、世界中の DNS をそのまま使えて広めやすかったからです。

同じ TXT をいくつもの宣言に使うので、名前で欄を分けます。

名前何の宣言か
_dmarc.animemo.appDMARC(7本目)
resend._domainkey.mail.animemo.appDKIM の公開鍵(6本目)
send.mail.animemo.appSPF(5本目)

先頭の _(アンダースコア)には意味があります。`_` で始まる名前は、普通の機械の名前(ホスト名)には使えない決まりになっています。だから _dmarc のような名前は、実在するサーバーの名前とぶつかる心配がなく、「宣言を書くための専用の欄」として安心して使えます。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 11 / 14
  • TXT は、名前の先頭に _ を付けて用途ごとに分ける
  • animemo.app の掲示板(TXT の行の例)
  • _dmarc.animemo.app     TXT v=DMARC1; …
  • resend._domainkey.mail.animemo.app TXT p=MIGf…
  • send.mail.animemo.app    TXT v=spf1 …
  • 同じメモ欄を、名前を変えることで何種類もの宣言に使い分ける
  • _ で始まる名前は機械の名前にならない。宣言専用の欄として使える。

掲示板を書き換えられるのは、持ち主だけ

DNS のいちばん大事な性質はこれです。

あるドメインの掲示板を書き換えられるのは、そのドメインの持ち主だけです。

持ち主は、販売店や Cloudflare の管理画面にログインして行を追加・変更できます。持ち主でない人は、animemo.app の掲示板に1行も書けません。一方で、読むのは誰でもできます。

この組み合わせから、次のことが言えます。

「animemo.app の掲示板にこう書いてある」=「animemo.app の持ち主がそう宣言した」

これが、この作品でいちばん持ち帰ってほしいことです。5〜7本目の SPF・DKIM・DMARC は、どれも「持ち主が DNS に宣言を書き、受け取る側がそれを読んで照らし合わせる」という形をしています。偽の宣言を書けないことが、身元確認を成り立たせています。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 12 / 14
  • 掲示板を書き換えられるのは、持ち主だけ
  • A
  • IPv4 アドレス(Web など)
  • ドメインの持ち主
  • AAAA
  • IPv6 アドレス
  • ログインして書ける
  • CNAME
  • 別の名前の別名
  • NS
  • 掲示板を置いているサーバー
  • 他人
  • MX
  • メールを受け取るサーバー
  • 書き換えられない
  • TXT
  • 自由なメモ欄(身元確認はここ)
  • 読むのは誰でもできる
  • だから「DNS にこう書いてある」は「持ち主がそう宣言した」の証明になる。

自分の手で掲示板を読んでみる

DNS は誰でも読めるので、自分の手で確かめられます。Mac や Linux のターミナルなら `dig` というコマンドが使えます。

$ dig +short MX gmail.com
5 gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
…

$ dig +short TXT _dmarc.gmail.com
"v=DMARC1; p=…; rua=…"

+short は答えだけを表示するオプションです。種類(MX・TXT・A・NS)と名前を指定すれば、その行が読めます。

設定がうまくいかないとき、管理画面を眺めて推測するより、dig で実際に世界から見えている答えを読むほうが確実です。ターミナルが使えなければ、「DNS lookup」などで検索すると、ブラウザから同じことができるサイトが見つかります。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 13 / 14
  • 自分の手で掲示板を読んでみる
  • $ dig +short MX gmail.com
  • 5 gmail-smtp-in.l.google.com.
  • 10 alt1.gmail-smtp-in.l.google.com.
  • $ dig +short TXT _dmarc.gmail.com
  • "v=DMARC1; p=…; rua=…"
  • ターミナルが無ければ、Web の「DNS lookup」系のサイトでも同じことができる
  • 設定が反映されたかは、推測せずに dig で直接読んで確かめる。

まとめ:DNS

この作品で見たことをまとめます。

言葉意味
窓口(リゾルバ)PC の代わりに答えを探してくる
ルート → 管理サーバー → 権威サーバー担当を分けて順にたどる(委任)
権威サーバーそのドメインの本物の掲示板
キャッシュと TTL答えを覚えておく時間。書き換えがすぐ届かない理由
NS掲示板をどこに置くか。書く場所を間違える原因
MXメールの受け取り先。優先順位付き
TXTメモ欄。_ 付きの名前で用途ごとに分けて、身元確認に使う

そして、いちばん大事なのは 「書けるのは持ち主だけ、読むのは誰でも」 という性質です。

次の作品では、この DNS の上で、メールが実際にどう運ばれるのか(SMTP)を見ていきます。

  • メールのしくみ 2 / 11 ― DNS:名前から番号を引く
  • 14 / 14
  • まとめ:DNS
  • 覚えておくこと
  • 掲示板の本物は権威サーバー。窓口は順にたどって探し、しばらく覚える
  • 書き換えてもすぐ届かない(TTL)
  • どこに書くかは NS が決める
  • メールで使うのは MX と TXT
  • 書けるのは持ち主だけ、読むのは誰でも ← 身元確認の足場
  • 次の作品では、この仕組みの上でメールがどう運ばれるか(SMTP)を見る。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]