IT基礎

DNS のしくみ ― 名前解決・レコード・ネームサーバーを「サイトの引っ越し」で理解する

サイトの公開先を移すときに何が起きるのかを例に、名前解決の流れ、DNS レコードの種類、TTL とキャッシュ、止めずに切りかえる手順を図でまとめます。基本情報・CCNA の復習に。

目次
  1. サイトは3つの場所でできている
  2. 名前から住所を調べるしくみ(名前解決)
  3. DNS レコードの種類
  4. 止めずに切りかえる4ステップ
  5. 切りかわったか確かめるコマンド
  6. 問題と解説
  7. まとめ

このサイトの公開先を、別のサービスに移しました。正直、作業の前はちょっとこわかったです。いちばん気になったのは「今まで作った記事や機能、保存した単語は消えないのかな」ということでした。

結論から言うと、消えません。この記事では、その理由と、サイトを止めずに住所を切りかえるしくみ(DNS)を、図を使ってまとめます。基本情報や CCNA で出てくる「名前解決」の復習にもなるので、試験勉強中の方もよかったら読んでみてください。ドメインや IP アドレスは、すべて説明用のもの(example.com など)にしています。

サイトは3つの場所でできている

原本、配る場所、データの3つ。引っ越すのは配る場所だけ原本自分のパソコン+コードの保管庫記事・機能のコード変更の記録配る場所公開サービス A → B原本からビルドした完成品ここだけ引っ越すデータデータベースログイン・保存した単語スコアページは「配る場所」から、ログインと保存は「データ」から直接点線=引っ越しで変わるところ。原本とデータには手をつけない
引っ越し先がこわれても、原本があるのでもう一度ビルドすれば元にもどせます。

公開サービスは、原本を受けとって HTML・CSS・JavaScript の完成品を作り(ビルド)、世界中に配る係です。配る係を変えても、原本とデータはそのまま残ります。だから、引っ越しの間も古い係と新しい係の両方で同じサイトが動く状態を作れます。

名前から住所を調べるしくみ(名前解決)

ブラウザが example.com を開くとき、最初に必要なのはサーバーの住所(IP アドレス)です。それを調べるのが DNS です。

名前解決の順番。ブラウザ、リゾルバ、ルート、.com の係、ネームサーバーブラウザ1. example.com はどこ?リゾルバ2. プロバイダや 8.8.8.8 など。まずキャッシュを見るルート3. .com のことは .com の係へ.com の係4. このドメインの係は ns1.example-dns.netネームサーバー5. A レコード:192.0.2.10 です
引っ越しで変えるのは4番目の答え(このドメインの係はだれか=NS レコード)。これで5番目の係が新しいものに変わります。

2番のリゾルバは、一度聞いた答えをしばらく覚えています(キャッシュ)。どれくらい覚えてよいかは答えについている TTL で決まります。切りかえがすぐに全員へ届かないのは、このためです。

DNS レコードの種類

ネームサーバーが持っている住所録の1行1行を、レコードといいます。よく出てくるものをまとめました。

種類意味例使いみち
A名前 → IPv4 アドレスexample.com → 192.0.2.10サイトの住所
AAAA名前 → IPv6 アドレスexample.com → 2001:db8::1A の IPv6 版
CNAME名前 → 別の名前www → example.com別名をつける
MXメールの届け先example.com → mail.example.comメール
TXT自由な文字v=spf1 include:… ~allなりすまし防止・所有の証明
NSこのドメインの係はだれかns1.example-dns.net引っ越しで変えるのはここ

止めずに切りかえる4ステップ

  1. コピーを先に作る

    新しい公開サービスに同じサイトを置き、仮の URL で全部のページが出るか確かめる。本番はまだ前のサービスのまま。

  2. DNS の中身を写す

    新しい DNS に今のレコードを写す。メール用の MX・TXT が抜けていないか、元の DNS と1行ずつ見くらべる。

  3. NS を切りかえる

    ドメインを買った会社(レジストラ)の画面で、ネームサーバーを新しいものに変える。A レコードは前と同じ住所のままなので、古い係と新しい係のどちらに聞かれても同じサイトが出る。

  4. 住所をつなぎかえる

    新しい係に切りかわったのを確かめてから、A レコードを新しい公開サービスに向けかえる。

ポイントは3番目。ネームサーバーを変えるときは、住所(A レコード)を変えない。「係の交代」と「住所の変更」を同時にやらず、1つずつ進めると、途中で何が起きても原因がすぐわかります。

切りかわったか確かめるコマンド

画面の表示を待たなくても、自分で DNS に聞けば今どうなっているかわかります。8.8.8.8 は Google のリゾルバです。

PowerShell
# どのネームサーバーが答えているか(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 に直接問い合わせて見くらべると安心です。

まとめ

DNS は、言葉だけで覚えようとすると混乱しやすいところです。上のコマンドで身近なサイトを調べてみると「本当にこう動いているんだ」と実感できるので、ぜひ一度ためしてみてください。

← 記事一覧へ戻る