Windows 10 に DNS Server をインストールする

Internet

Windows 10 で DNS Server を稼働させたくて BIND をインストールしてみることにしました。


今回は自宅のインターネット環境を見直していたのがきっかけで、 自宅内だけで使うドメイン用の DNS サーバーを立ち上げたくなったのがきっかけでした。 これまでは Linux サーバーでそれを行っていたのですけれど、それは撤去してしまったので、代わりに普通の Windows 10 パソコンで稼働させる必要があります。

調べてみると Windows 10 でも、Linux サーバーでお馴染みの BIND を入れることができる様子だったので、今回はそれを入れてみることにしました。

BIND をダウンロードする

BIND は https://www.isc.org/bind/ からダウンロードできるようになっていて、 の時点では 16.1 が最新の安定版に当たる様子です。

そこで、ダウンロードページからそれをダウンロードすることにしました。

ここから BIND9.16.1x64.zip - win 64-bit と書かれたテキストをクリックすれば、ダウンロード完了です。

BIND をインストールする

BIND のダウンロードが終わったら、それを展開した中にある BINDinstall.exe を実行して BIND のインストールを開始します。

BIND インストーラーの起動

このときの大事なポイントとして、普通に事項するのではなくて、アイコンを右クリックして 管理者として実行 を選択する必要がある様子です。

そして Windows によって PC が保護されました という警告メッセージが表示されるので、詳細を表示して 実行ボタン を押してセットアップを続行します。

そうすると、BIND のインストーラーが起動します。

サービスアカウントの作成

ここで Service Account Password を自分で指定してから Installボタン を押すことで BIND のインストールが始まります。

Service Account は、Windows に登録されるユーザーアカウントで、BIND サービスを起動するときに使われます。

Visual C++ 2017 再頒布可能パッケージのインストール

そしてすぐに Microsoft Visual C++ 2017 Redistributable のセットアップが起動するので、画面に従ってインストールを行います。

インストール完了

それが終わってから数分ほど待つと、BIND のインストールが完了したことを示すダイアログボックスが表示されました。

BIND を設定する

BIND をインストールできると、標準では C:\Program Files\ISC BIND 9 に様々なファイルが登録されます。

これを設定していくことになるのですけれど、インストールしてすぐの初回はいくつか気をつけて設定したいところがある様子でした。

アクセス権限の設定

BIND 具体的な設定に先立って、最初に BIND が起動する上で使う各種ファイルを保存するフォルダーの権限を調整します。

このフォルダーの etc フォルダーは、インストール時に作成した BIND の Service Account がデータを読み書きする必要があります。Windows システム上には named という名前で Service Account が登録されているので、このアカウントに対して フルコントロール の権限を与えておきます。

この権限が設定されていない場合、設定ファイルを正しく記載していても BIND 起動時に ローカル コンピューター の ISC BIND サービスを起動できませんでした。エラー 1067: プロセスを途中で強制終了しました。 というメッセージが出て動いてくれない様子でした。

Windows のイベントビュアーのWindows ログ にあるApplication にも、ソースをnamed としてthe working directory is not writable と出力もされる様子なので、こちらを見ても権限が設定されていないことが分かります。

named.conf の設定

BIND の設定ファイルは、BIND をインストールしたフォルダー(標準では C:\Program Files\ISC BIND 9 の中の etc/named.conf になります。

今回はひとまず、再起検索が可能な DNS キャッシュサーバーとして稼働させるところまでやってみようと思うので、次のような設定ファイルを用意しました。

options {
	directory "C:\Program Files\ISC BIND 9\etc";
	empty-zones-enable no;
	forwarders {
		192.168.0.1;
	};
	listen-on {
		any;
	};
	listen-on-v6 {
		any;
	};
	recursion yes;
	allow-query {
		any;
	};
};

Windows Defender ファイアーウォールを設定する

それと、ファイアーウォールの設定です。 Windows Defender ファイアーウォールが有効になっていると、 ここにインストールされた BIND に対して DNS クエリーが送られてきても、BIND はそれを受け取ることができません。

そこで Windows Defender ファイアーウォールの設定を調整して、BIND プログラムが外からの通信を受信できるようにしておきます。

規則の種類

Windows Defender ファイアーウォールのアプリを起動したら、詳細設定 から受信の規則 の追加を行います。

今回は規則の種類としてプログラム を選択します。

そして、対象のプログラムとして BIND を指定します。既定では%Program Files%\ISC BIND 9\bin\named.exe にインストールされているので、今回はそれを指定しました。

それに対して接続を許可する を選択して、BIND が DNS クエリーを受信できるように設定します。

規則を適用するタイミングは、各自のネットワークに合わせて適切なものをします。今回はひとまず全てのタイミングを選択しておくことにします。

最後に、作成する規則に名前をつけます。分かりやすいようにISC BIND という名前をつけておくことにしました。

これで BIND の設定が完了しました。

BIND の動作を確認する

BIND の設定が完了したら、ちゃんと動作するかを確認しておきます。

たとえば BIND を稼働させた PC の IP アドレスが192.168.0.127 だったとすると、今回は macOS から次のようなdig コマンドを実行して、適切な応答が得られるかどうかで判断できます。

dig apple.com @192.168.0.127

設定を変更したときの留意点

少し使ってみている感じでは、設定ファイルの内容を間違えて記載したときでも BIND サービスは とりあえず起動する様子です。

そのため、設定を調整する際には 設定を変更して BIND を再起動して上手くいったつもりでいたら、 DNS サーバーが応答しなくなっていた みたいなことになっていたりするかもしれません。

そうならないように、設定を変更して BIND サービスを再起動したら、Windows イベントビュアーを確認して "named" が何かエラーを出していないか確認する必要性がありそうです。