はじめに
本記事ではDNSサーバの構築について扱います。環境としては、Linuxでサーバを建てることを想定しています。サーバ構築についてマクロ的な手順を見ていきながら、トラブルシュートの方法についても解説していきます。
まずは構築するサービスを確認しよう!
サーバの構築を行う前に、これからどんなサービスを立ち上げるのかを確認しておくと良いと思います。例えばWebサービスを立ち上げるとすると、どんなサーバを構築する必要があるでしょうか?
まずwebアプリのためのwebサーバ、appサーバ、DBサーバが必要ですね!また、ユーザがURLでアクセスするためのDNSサーバも必要です。もしもユーザにメールを送信する機能をつけたり、サーバのエラーメッセージを管理者に送るのであればメールサーバも必要になります。このように1つのサービスを立ち上げるために複数のサーバを構築することが必要だということは意識しておくべき点です。
サーバ構築の大まかな手順!
サーバを構築する際の大まかな手順について見てみます。以下のような手順で実際の構築を行います。

さて、ここからはDNSサーバを例に、実際に構築を行なっていきます。
要件の確認
サーバ構築の要件を確認します。今回は一例として以下のようなことができるDNSサーバを構築してみましょう!
- test1.dom.exampleから192.168.1.10に正引きできる
- test1.dom.exampleの別名としてwww.dom.exampleを与える
- 上記に対応した逆引きができる
サーバソフトウェアの確認
要件を満たす動作ができるサーバソフトウェアが存在するかどうかを調査します。今回の場合は、DNSのソフトウェアを調査することになりますね!調査の結果、BINDというパッケージが最善だと結論づけたとしましょう。以降では、BINDのnamedサービスを用いて、DNSサーバ構築をおこなっていきます。
DNSサーバの構成について確認してしておこう!
ここまでで、DNSサーバの構築にBINDを用いることが決まりました。ここで、BINDを使ってどのようにサービスが構築されるのかをしっかり確認しておきます。概ね以下のような構成要素があると考えられます。
この図は、3つの名前解決のシナリオを1つの図で表したものとなっています。以降からその3つのシナリオについて解説を行います。
シナリオ1
まずは1つ目のシナリオです。これは社内のDNSクライアントが、コンテンツサーバに直接名前解決を依頼するようなシナリオです。この場合の登場人物はDNSクライアントとDNSプライマリサーバになります。クライアント側では、resolv.confファイルを用いてDNSプライマリサーバを指定し、サーバ川ではnamed.confファイルを用いてゾーンファイルを格納するディレクトリ等を設定後、指定したディレクトリに名前解決の情報を記載するゾーンファイルを格納することになります。
シナリオ2
2つ目のシナリオです。これは、外部からの名前解決のリクエストへ対応する際、自社のDNSサーバをプライマリとセカンダリに冗長化するような例です。この場合、プライマリサーバが自身のゾーンファイルをセカンダリサーバに渡すことによって、名前解決情報の共有を行います。
このとき設定すべきパラメータとして、「allow-transfer」があります。このパラメータで設定したサーバに向けて、ゾーン転送が行われます。
シナリオ3
最後に3つ目のシナリオです。これは、キャッシュサーバを通してインターネットや外部ネットワーク向けの名前解決を行うような例です。社内のキャッシュサーバ以降の名前解決のリクエストは、外部NW上のDNSサーバへ依頼します。BINDではデフォルトで「named.ca」というゾーンファイルが設定されており、ルートドメイン用のDNSサーバのIPアドレス情報が格納されています。
要件に戻って、、、
以上の3つのシナリオを一つにまとめた図を再掲します。
今回の要件は、DNSプライマリサーバさえあれば実装できるため、シナリオ1のみ考慮すれば良さそうです!つまり主に設定するのは以下の3つになりそうですね!
- DNSクライアントのresolv.conf
- DNSサーバのnamed.conf
- DNSサーバのゾーンファイル
サーバソフトウェアのインストール
ここまででDNSサーバ構築のイメージができたので、実際の作業に取り掛かっていきましょう。まず、linuxサーバ上にBINDをインストールしなければ何も始まりません!linuxでパッケージをインストールするためにはrpm、yum、dnf等のコマンドを利用します。例えば以下のようなコマンドを発行することでインターネット上のBINDパッケージをインストールできたりします。
dnf -y install bind bind-utils