1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DNSについて語ろう

Last updated at Posted at 2025-09-05

image.png

引用元: https://note.com/infoblox/n/n163749e37c9c

DNSとは

DNS(Domain Name System)は、ドメインとIPアドレスを対応付けるシステムです。
クライアントPCがWebサイトのURLを打ち込んだ後最初に行うのが、
URLからドメインを抽出して、ドメインからIPアドレスをクライアントPCに回答する「名前解決」です。

DNSとは ドメインとIPアドレスを対応付けるシステム

ドメインからIPアドレスに変換することを「名前解決」という

DNSが実現すること

  1. IPアドレスと名前を予め対応づけておく
  2. 通信相手を名前で指定する
  3. 指定した名前からIPアドレスを調べる
  4. 調べたIPアドレスで通信相手を指定し、通信を行う

DNSがない時代はどうしていた?

image.png
引用元: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台)存在しています。

image.png
引用元: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アドレスを返す仕組みになっています。

image.png

image.png
引用元: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コマンド
$ 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コマンド
$host google.com   名前解決を行いたいホスト名

google.com has address 142.250.196.110  名前解決を行いたいホスト名のIPアドレス
digコマンド
$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

② ゾーンファイルの定義

/etc/bind/named.conf.default-zones か /etc/bind/named.conf.local
zone "test.com" {
     type master;
     file "/etc/bind/db.test.com";  test.comのゾーンファイルは/etc/bind/db.test.comと定義
};

③ゾーンファイルにDNSレコードを登録

/etc/bind/db.test.com
$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の役割や名前解決の仕組みについてまとめてみました。
システムを理解する時、どんな未来を望まれてそれが生まれたのかを考えると理解しやすそうですね。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?