初歩から解説!BINDでシンプルDNSサーバー構築【用語編】
なかなか理解するのが難しいDNSサーバーについて、前後編に分けて BIND を設定しながら解説します。
この記事は アイソルート Advent Calendar 2020 7日目の記事です。
こんにちは。日々検証環境を構築しているプラットフォームソリューショングループのsuzuki.koです。
機器を通信させる際にどうしても必要になってくるDNSサーバー。
しかしDNSの技術は奥が深すぎて「どこから勉強していいかわからない!」となりがちです。
今回は【用語編】として、DNSの仕組みの基礎部分についてまとめ、
続編の【構築編】で実際にBINDを設定することで、DNSサーバーの構築手順を解説していきます。
目次
DNSサーバーとは
DNSとは Domain Name System の略でURLなどの ドメイン と呼ばれる文字を IPアドレスに変換する サーバーです。
このサーバーが世界中にあるおかげで、私たちはIPアドレスを意識することなくWEBサービスなどを利用することができます。
DNSの仕組み
DNSの仕組みについて解説を行っていきます。
かなりの量の専門用語が出てきますが、一つ一つ図と照らし合わせて整理しながら進めてもらえたらと思います。
ホスト・ドメイン・FQDN
まずDNSの名前にも含まれている ドメイン とはURLなどに含まれる文字列のうち所属しているグループを表す部分を指します。
名前を表す部分を ホスト 、ホスト+ドメインで表現された文字列を FQDN と言います。
FQDNの 最後に「.(ピリオド)」を付ける と 完全な表記 となります。
DNSの階層構造
FQDNはピリオドを境に ドメインを管理するサーバーが変わる ことを表現しており、
右に行くにつれてより上位 となるような 階層構造 となっています。
最上位ドメインであるルート(.)ドメインを管理するサーバは ルートサーバー と呼ばれ、世界に13台だけ存在します。
階層構造の分岐元のことを ノード 、ノード配下の管理範囲を ゾーン と言います。
DNSの問い合わせ手順
これらのサーバーに問い合わせをかけることでドメインからIPアドレスを取得します。
DNSサーバーの通信手順は次のようになります。
(例)クライアントからdns.google.comを解決するリクエストを受けた
- クライアントからDNSサーバーにリクエストが送られる
- DNSサーバーは ルートサーバに問い合わせ を行い、
ルートサーバはcomのDNSサーバに問い合わせるよう回答する - DNSサーバーは次に comのDNSに問い合わせ を行い、
comのDNSサーバはgoogleのDNSサーバに問い合わせるよう回答する - DNSサーバーは次に googleのDNSに問い合わせ を行い、
googleのDNSサーバはホスト名がdnsであるIPアドレス、8.8.8.8を回答する - DNSサーバーはクライアントに8.8.8.8を回答する
この時、自力で回答せずに上位DNSサーバーに問い合わせる名前解決を 再帰的問い合わせ と言い、
自力で回答する名前解決を 非再帰的問い合わせ と言います。
そして再帰問い合わせを実行するDNSサーバーを キャッシュサーバー や リゾルバ と呼び、
非再帰問い合わせが可能なDNSサーバーを 権威サーバー と呼びます。
レコード
問い合わせを受けた権威サーバーは自分に設定されている レコード を確認して回答します。
問い合わせの種類によって次のように レコードの種類も変更 する必要があります。(代表的なものを載せています)
- Aレコード
- IPv4でホスト名とIPアドレスの関連づけを定義するレコード
- AAAAレコード
- IPv6でホスト名とIPアドレスの関連づけを定義するレコード
- Cレコード
- 正規ホスト名に対する別名を定義するレコード
- MXレコード
- 対象ドメイン宛のメールの配送先(メールサーバ)のホスト名を定義するレコードです
BINDとは
タイトルにもしている BIND とは世界で最も多く利用されているオープンソースDNSサーバーです。
現在はバージョン9が主流のようです。
BINDの設定ですが多機能であるために 少し癖があります 。
また、DNSの仕組み自体が複雑なので構築前にしっかりDNSについての知識を深めておくことが重要になります。
さて、DNS周りの重要な用語はざっと解説しましたので、【用語編】はここまでとしておきます。
さいごに
今回はDNSの仕組みと関連する用語について簡単に解説しました。
難しく思える技術についても、一つ一つ理解して整理していけば全体を見渡すことができるようになります。
また、頭に入れた知識は実際に手元で動かしてみることも重要です。
実際にBINDを構築する【構築編】についてはこちらの記事で解説しています。
良いエンジニアになるために、実際に利用している技術についてはきちんと自分の言葉で説明できるようにしていきたいですね!
明日の記事は fujishima.y さんによる Rancherを用いたマルチクラウドなサービス構築です、お楽しみに!