DNS のしくみ ― 名前解決・レコード・ネームサーバーを「サイトの引っ越し」で理解する
サイトの公開先を移すときに何が起きるのかを例に、名前解決の流れ、DNS レコードの種類、TTL とキャッシュ、止めずに切りかえる手順を図でまとめます。基本情報・CCNA の復習に。
このサイトの公開先を、別のサービスに移しました。正直、作業の前はちょっとこわかったです。いちばん気になったのは「今まで作った記事や機能、保存した単語は消えないのかな」ということでした。
結論から言うと、消えません。この記事では、その理由と、サイトを止めずに住所を切りかえるしくみ(DNS)を、図を使ってまとめます。基本情報や CCNA で出てくる「名前解決」の復習にもなるので、試験勉強中の方もよかったら読んでみてください。ドメインや IP アドレスは、すべて説明用のもの(example.com など)にしています。
サイトは3つの場所でできている
公開サービスは、原本を受けとって HTML・CSS・JavaScript の完成品を作り(ビルド)、世界中に配る係です。配る係を変えても、原本とデータはそのまま残ります。だから、引っ越しの間も古い係と新しい係の両方で同じサイトが動く状態を作れます。
名前から住所を調べるしくみ(名前解決)
ブラウザが example.com を開くとき、最初に必要なのはサーバーの住所(IP アドレス)です。それを調べるのが DNS です。
2番のリゾルバは、一度聞いた答えをしばらく覚えています(キャッシュ)。どれくらい覚えてよいかは答えについている TTL で決まります。切りかえがすぐに全員へ届かないのは、このためです。
DNS レコードの種類
ネームサーバーが持っている住所録の1行1行を、レコードといいます。よく出てくるものをまとめました。
| 種類 | 意味 | 例 | 使いみち |
|---|---|---|---|
A | 名前 → IPv4 アドレス | example.com → 192.0.2.10 | サイトの住所 |
AAAA | 名前 → IPv6 アドレス | example.com → 2001:db8::1 | A の IPv6 版 |
CNAME | 名前 → 別の名前 | www → example.com | 別名をつける |
MX | メールの届け先 | example.com → mail.example.com | メール |
TXT | 自由な文字 | v=spf1 include:… ~all | なりすまし防止・所有の証明 |
NS | このドメインの係はだれか | ns1.example-dns.net | 引っ越しで変えるのはここ |
止めずに切りかえる4ステップ
コピーを先に作る
新しい公開サービスに同じサイトを置き、仮の URL で全部のページが出るか確かめる。本番はまだ前のサービスのまま。
DNS の中身を写す
新しい DNS に今のレコードを写す。メール用の MX・TXT が抜けていないか、元の DNS と1行ずつ見くらべる。
NS を切りかえる
ドメインを買った会社(レジストラ)の画面で、ネームサーバーを新しいものに変える。A レコードは前と同じ住所のままなので、古い係と新しい係のどちらに聞かれても同じサイトが出る。
住所をつなぎかえる
新しい係に切りかわったのを確かめてから、A レコードを新しい公開サービスに向けかえる。
切りかわったか確かめるコマンド
画面の表示を待たなくても、自分で DNS に聞けば今どうなっているかわかります。8.8.8.8 は Google のリゾルバです。
# どのネームサーバーが答えているか(Windows の PowerShell)
Resolve-DnsName example.com -Type NS -Server 8.8.8.8
# A レコード(住所)を調べる
Resolve-DnsName example.com -Type A -Server 8.8.8.8# Mac・Linux・Windows どれでも使える
nslookup -type=NS example.com 8.8.8.8
nslookup -type=MX example.com 8.8.8.8もう1つの注意点は、ドメインの改ざんを防ぐしくみ(DNSSEC)です。これがオンのまま係を変えると、名前解決に失敗することがあります。-Type DS で調べて、オンなら先にオフにしてから切りかえます。
問題と解説
Q1ネームサーバーを変えても、すぐには全員が新しいほうに行きません。なぜですか。
答え:リゾルバが前の答えをキャッシュしていて、TTL(有効期限)が切れるまでそれを使うから。
DNS の答えには「この答えを何秒おぼえていてよいか」という TTL がついています。NS レコードの TTL は長めのことが多く、切りかえが全員に届くまで数十分〜1日かかります。この間に「古い係」と「新しい係」のどちらに聞かれても同じ答えが返るようにしておくのが、止めずに引っ越すコツです。
Q2DNS の問い合わせは、ふつう何番のポートと、どちらのプロトコルを使いますか。
答え:53 番ポート、主に UDP(答えが大きいときなどは TCP)。
1回の質問と答えが小さいので、つながる手順のいらない UDP が向いています。基本情報でも CCNA でもよく出る組み合わせです。
Q3引っ越しの前に、メール用のレコード(MX・TXT)を必ず確かめるのはなぜですか。
答え:新しい DNS に写し忘れると、サイトは見えてもメールが届かない・送れないという、気づきにくい故障になるから。
サイトは開けばすぐ壊れたとわかりますが、メールは「届かなかった」ことに後から気づきます。自動の読みこみは珍しいレコードを見落とすことがあるので、元の DNS に直接問い合わせて見くらべると安心です。
まとめ
- サイトは「原本」「配る場所」「データ」の3つ。引っ越すのは配る場所だけなので、コードも保存したデータも消えない
- 名前解決は、リゾルバ → ルート → .com の係 → ネームサーバーの順。答えは TTL のあいだキャッシュされる
- 止めずに切りかえるには、係の交代(NS)と住所の変更(A)を分けて、1つずつ進める
- メール用の MX・TXT と DNSSEC は、切りかえ前に自分で問い合わせて確かめる
DNS は、言葉だけで覚えようとすると混乱しやすいところです。上のコマンドで身近なサイトを調べてみると「本当にこう動いているんだ」と実感できるので、ぜひ一度ためしてみてください。