引用元: https://note.com/infoblox/n/n163749e37c9c
DNSとは
DNS(Domain Name System)は、ドメインとIPアドレスを対応付けるシステムです。
クライアントPCがWebサイトのURLを打ち込んだ後最初に行うのが、
URLからドメインを抽出して、ドメインからIPアドレスをクライアントPCに回答する「名前解決」です。
DNSが実現すること
- IPアドレスと名前を予め対応づけておく
- 通信相手を名前で指定する
- 指定した名前からIPアドレスを調べる
- 調べたIPアドレスで通信相手を指定し、通信を行う
DNSがない時代はどうしていた?

引用元:https://jprs.jp/related-info/guide/topics-column/no10.html
かつてDNSが開発される前、ドメインとIPアドレスの対応付けは1つのテキストファイルで行われていました。
名前とIPアドレスの対応に追加や変更などがあった場合、ユーザーはその変更内容をIPアドレスを割り当てていた国際機関に電子メールで通知、メールを受けた国際機関が都度更新・公開していました。しかし、インターネットの普及で以下の問題に直面します。
- ファイルの肥大化
- アクセス数の集中
- 更新頻度の増加
DNSがない時代、1つの機関が1つのファイルを管理してドメインとIPアドレスを対応づけていた。インターネットの普及につれ、ホスト(通信相手)の増加し、管理が限界になった。
分散管理するために生まれたDNS
DNSは「階層型分散構造」のデータベースと表現されます。
階層型は、「.」(ルートサーバ)を頂点としたドメイン単位による階層構造を指します。
分散は、DNS情報(ゾーン情報)をネットワーク上に分散して管理していることを指します。
DNS情報は基本的に各ドメイン単位で分割され、ドメインごとに管理を行うDNSサーバが存在します。
各ドメイン単位にDNS情報を分割することで、権限と責任を分散し1つのDNSサーバへの負荷を軽減して、情報の冗長性を持たせます。
ドメインの頂点である「.」(ルートドメイン)はルートドメインサーバに管理され、
世界に13台(米国に10台、スウェーデン、英国、日本に1台)存在しています。

引用元:https://xtech.nikkei.com/atcl/nxt/column/18/00780/062000011/?SS=imgview&FD=55991993
名前解決の流れ
DNSサーバには大きく分けてキャッシュDNSサーバと権威DNSサーバーの2種類があります。
キャッシュDNSサーバ
クライアント(ブラウザ)が最初に問い合わせるDNSサーバです。
以前に権威DNSサーバに問い合わせて取得したゾーン情報を一定期間保存しています。
キャッシュDNSサーバ、何使っていますか?
デフォルトだとISPのDNSサーバが設定されています。
爆速にしたい、安全にネットを使いたいと思う場合は変更してみるのもいいかもしれません。
たった1分でネットを爆速に!
権威サーバー
ドメインとIPアドレスの対応情報の一覧を保持しているDNSサーバで、キャッシュDNSサーバーからの問い合わせを受けてIPアドレスを返します。
キャッシュDNSサーバーから問い合わせがあった場合は、ルートDNSサーバーから下位ドメインを辿っていくことで対応するIPアドレスを返す仕組みになっています。

引用元:https://envader.plus/course/12/scenario/1023
※個人的な解釈です
なぜ最上位のルートDNSサーバーから問い合わせるの?
http://www.kurobe.toyama.jpというURLがあったとします。
kurobe.toyama.jpがドメインにあたります。
(省略しないでFQDNで記述するとkurobe.toyama.jp.)
分解すると、kurobe(黒部),toyama(富山),jp(日本)です。
kurobe(黒部)から辿りますか?
より広範囲のjp(日本)から辿る方が効率的だと思いませんか。
ルートDNSサーバーから下位ドメインを辿っていくのも同じ理由だと思います。
名前解決しているか確認するコマンド
$ nslookup google.com ⇦ 名前解決を行いたいホスト名
Server: 127.0.0.11 ⇦ 名前解決を行なったDNSサーバ
Address: 127.0.0.11:53
Non-authoritative answer: ⇦ 権威サーバではなく、キャッシュサーバの回答
Name: google.com
Address: 142.251.42.206 ⇦ 名前解決を行いたいホスト名のIPアドレス
$host google.com ⇦ 名前解決を行いたいホスト名
google.com has address 142.250.196.110 ⇦ 名前解決を行いたいホスト名のIPアドレス
$host google.com ⇦ 名前解決を行いたいホスト名
google.com has address 142.250.196.110 ⇦ 名前解決を行いたいホスト名のIPアドレス
google.com has IPv6 address 2404:6800:4004:821::200e
google.com mail is handled by 10 smtp.google.com.
google.com has HTTP service bindings 1 . alpn="h2,h3"
root@0748fb14d086:/# dig google.com
; <<>> DiG 9.20.11-4-Debian <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50872
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION: ⇦ 問い合わせ内容を表示
;google.com. IN A
;; ANSWER SECTION: ⇦ 問い合わせに対する回答内容を表示
google.com. 187 IN A 142.250.196.110
;; Query time: 10 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Fri Sep 05 07:59:06 UTC 2025
;; MSG SIZE rcvd: 55
LinuxにDNSサーバを構築してみた
環境: Debian Linux
docker run -it debian /bin/bashでDebian環境を試せます。
① DNSモジュール(BIND)の導入
BIND9とvim(viコマンド)とdnsutils(nslookupコマンド)をインストール
apt-get update
apt-get install bind9 vim dnsutils
② ゾーンファイルの定義
zone "test.com" {
type master;
file "/etc/bind/db.test.com"; ⇦ ”test.com”のゾーンファイルは”/etc/bind/db.test.com”と定義
};
③ゾーンファイルにDNSレコードを登録
$TTL 604800
@ IN SOA ns1.test.com. admin.test.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.test.com.
ns1 IN A 127.0.0.1 ⇦ 権威サーバ
www IN A 10.8.188.4 ⇦ test.comのIPアドレスを設定
- 主なDNSレコードタイプ
- Aレコード:ドメイン名(ホスト名)に対するIPアドレスを指定する(正引き)
- PTRレコード:IPアドレスに対するドメイン名(ホスト名)を指定する(逆引き)
- SOAレコード:ドメインの管理情報を表す
- NSレコード:権威を持つネームサーバーを指定する
- CNAMEレコード:別名のレコードを別途設定
- SPFレコード:正規のサーバーから送信されたメールであること証明するTXTレコード
④ゾーンファイルの編集後はDNSを再起動させる
/etc/init.d/named restart
⑤ nslookupコマンドで名前解決を確認
nslookup www.test.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.test.com
Address: 10.8.188.4 ⇦ test.comのIPアドレス
まとめ
最後まで読んでくださりありがとうございました。
DNSの役割や名前解決の仕組みについてまとめてみました。
システムを理解する時、どんな未来を望まれてそれが生まれたのかを考えると理解しやすそうですね。
参考文献

