【ネットワーク】DNS (Domain Name System)

■ はじめに

DNS (Domain Name System)について扱う

目次

【1】DNS (Domain Name System)
【2】役割
 イメージ(階層構造)
【3】DNSへの問い合わせシーケンス
 イメージ
【4】関連用語
 1)リゾルバ
 2)ゾーン
 3)ゾーン転送
【5】DNSレコード
 1)レコード種類
  a)Aレコード
  b)MXレコード
  c)NSレコード
  d)CNAMEレコード
  e)PTRレコード
  f)SOA レコード
 2)使いどころ
 3)使用上の注意
【6】DNSによるTCP/UDPの使い分け
【7】DNS関連のコマンド
【8】DNS関連のセキュリティ攻撃
 1)DNSキャッシュポイズニング(DNS cache poisoning)

 【1】DNS (Domain Name System)

 * DNS:完全修飾ドメイン名
 (FQDN、ホスト名、ドメイン名(サブドメイン名)等)
 をIPアドレスを変換するプロトコル
   => http://www.yahoo.co.jp/xxx => "www.yahoo.co.jp" ホスト名

 * TCP/UDPで、ポート番号は「53」

権威DNS/キャッシュDNSとは?

* 権威DNS
 => ドメイン名とIPアドレスの変換情報を保持しているDNS

* キャッシュDNS
 => 変換情報を保持していないDNS

 【2】役割

1)ドメイン名 <=> IPアドレス の相互変換
2)メール転送先を教える

 イメージ(階層構造)

            root
             |
 +-----------+------------+ ...
 |           |            |
 fr         jp           it
             |
 +-----------+------------+ ...
 |           |            |
             co
             |
 +-----------+------------+ ...
 |           |            |
           yahoo
             |
 +-----------+------------+ ...
 |           |            |
            www

 【3】DNSへの問い合わせシーケンス

1)ブラウザ(クライアント側)で入力された「URL」から、
  対象のドメイン名を抽出する

2)抽出されたドメイン名を、OSの名前解決機能に引き渡す

3)名前解決機能は、「ドメイン名」を
  ネットワーク上のDNSサーバに問い合わせる

4)DNSサーバは、問い合わせに対する回答を保持している場合、
  クライアントに返答する

5)DNSサーバが回答を保持していない場合、
  さらに上位のDNSに問い合わせる

6)上位DNSサーバが、DNSサーバの問い合わせに対して回答する
 ※ 回答を保持していない場合は、さらに上位のDNSへ問い合わせ

7)DNSサーバは、上位DNSサーバから得た回答を
  クライアントに回答し、自身のキャッシュに回答情報を保存する。

8)取得したIPアドレスを、ブラウザに戻す。

9)ブラウザ(クライアント側)は、IPアドレスを参照し、
 サイトにアクセスする。

 イメージ

  ┌───────┐                            ┌───────┐
  │              │  ────(1)────>  │              │
  │              │    yahoo.co.jp のIPを      │              │
  │              │            問い合わせ      │              │
  │ クライアント │                            │  DNSサーバ   │
  │              │ <───(2)─────   │              │
  │              │    yahoo.co.jp は          │              │
  │              │    IP 192.1XX.0.1 の       │              │
  │              │              サーバです    └───────┘
  │              │
  │              │                            ┌───────┐
  │              │  ────(3)────>  │              │
  │              │    IP 192.1XX.0.1 の       │              │
  │              │      サーバにアクセス      │IP 192.1XX.0.1│
  │              │                            │の Web サーバ │
  │              │  <───(4)─────  │              │
  │              │    画像や文章のデータを    │              │
  │              │                    送信    │              │
  └───────┘                            └───────┘

 【4】関連用語

 1)リゾル

 * DNSサーバを使うクライアント

 2)ゾーン

 * 各ノードで管理されるDNS情報の単位

 3)ゾーン転送

 * DNSサーバの管理するゾーン情報を
 別のコンピュータに一括して転送すること

【5】DNSレコード

 * ゾーンに含まれるデータの単位で、DNS の種別

例:DNSレコードが「Aレコード」の場合

「ドメイン名 = IPアドレス」とする場合、
「yahoo.co.jp A 17.149.160.49」

1)レコード種類

 a)Aレコード(AはAddressの頭文字)

 * ホスト名からIPアドレスへの変換のためのレコード

 b)MXレコード(Mail eXchangeの略)

 * メールの転送先を示すレコード
 * メール転送先となるメールサーバを記述するためのレコード
 =>メールアドレスの「@」よりもうしろのドメイン名を
  キーにしてMXレコードを引く(検索する)ことにより
  配送先のメールサーバを知ることができる。

 c)NSレコード(Name Serverの略)

 * 下位ドメインのDNSサーバ名を表すレコード

 d)CNAMEレコード(Canonical NAMEの略)

 * ホスト名のエイリアス(別名) 

 ※ Canonical(カノニカル) : 標準的な

 e)PTRレコード(PoinTeRの略)

 * IPアドレスからホスト名への変換のためのレコード
 (Aレコードとは逆)

 f)SOA レコード(Start of Authorityの略)

 * ドメイン名からそのドメインに関する権威を持つ
 ホスト、 管理者、また現在のシリアル番号などに
 変換するためのレコード 

2)使いどころ

ドメイン名とIPアドレスの対応は必ずしも1対1ではない。
複数のドメイン名を、同じIPアドレスに設定する場合がある。

             IN      NS     yahoo.example.jp.
yahoo        IN      A      192.168.10.111
www          IN      A      192.168.10.111
ftp          IN      A      192.168.10.111
...

この状態でIPアドレスが変わった場合、
全ての設定に手を加えなくてはならないので、

yahoo        IN      A      192.168.10.111
www          IN      CNAME  yahoo.example.jp.
ftp          IN      CNAME  yahoo.example.jp.

としておけば、IPアドレスが変わっても
修正個所を最小に抑えられる。
(プログラムで言えば、定数化しておくイメージ?)

3)使用上の注意

* CNAMEレコードは、
 MXレコードやNSレコードを設定することができない

 【6】DNSによるTCP/UDPの使い分け

 UDP

 * 通常の問い合わせ

 TCP

 * セカンダリDNSサーバがプライマリDNSサーバの持つ
 データの複製するために行うゾーン転送
 * DNSメッセージが512オクテットを超えた場合

 参考文献
http://atnetwork.info/tcpip2/tcpip219.html
http://www.7key.jp/nw/technology/protocol/resolver.html

 【7】DNS関連のコマンド

* 以下に分冊。

ネットワーク系コマンド ~ DNS編 ~
https://dk521123.hatenablog.com/entry/2021/08/07/000000

 # 【8】DNS関連のセキュリティ攻撃

1)DNSキャッシュポイズニング(DNS cache poisoning)

* 以下の関連記事を参照のこと。

DNSに関するセキュリティ攻撃
https://dk521123.hatenablog.com/entry/2016/01/12/115100

 参考文献

DNSの仕組み
http://www.atmarkit.co.jp/ait/articles/0112/18/news001.html
DNSレコード
http://server.change.jp/5-minibird/5-minibird_5/
http://www.atmarkit.co.jp/fnetwork/rensai/dns01/dns-record.html
http://ascii.jp/elem/000/000/458/458858/
http://www.fc-lab.com/network/server/dns/zone.html
CNAMEレコード
http://www.atmarkit.co.jp/ait/articles/0302/15/news002.html
http://e-words.jp/w/CNAMEE383ACE382B3E383BCE38389.html
http://ascii.jp/elem/000/000/458/458858/
DNSへの問い合わせシーケンス
http://www.lpi.or.jp/column/linux/linux_m07.shtml
動画
https://www.youtube.com/watch?v=sOWnzKZJHcQ

関連記事

ネットワーク系コマンド ~ DNS編 ~
https://dk521123.hatenablog.com/entry/2021/08/07/000000
DNSに関するセキュリティ攻撃
https://dk521123.hatenablog.com/entry/2016/01/12/115100
DebianDNSタイムアウトを設定する
https://dk521123.hatenablog.com/entry/2017/05/26/004035
NAT / NAPT / UPnP
https://dk521123.hatenablog.com/entry/2016/09/21/231938