Linux CentOS 7でキャッシュ用DNSサーバーを構築する。BINDの理解と名前引きの高速化に役立ちます。

2019/07/04 Bind, CentOS, Linux, サーバー構築

dns-cache-setting-top
前回の記事でLinuxディストリビューション、CentOSでのDHCPサーバー構築手順を紹介しました。

DHCPサービスはそれほど システムのリソース(CPUやメモリ、ディスク)を利用しないため、リソースに余剰があるかと思います。  これだと余剰リソースが勿体無い気がしますので、リソースの有効的な利用方法として今回の記事では、前回セットアップしたDHCPサーバー上にキャッシュ用DNSサーバーを構築する手順を紹介します。

スポンサーリンク

本記事で構築するキャッシュ用のDNSサーバーは 外部から参照されることはなくプライベートネットワーク内で利用するDNSサーバーです。  外部のDNSサーバーへ問い合わせた結果をDNSサーバー内にキャッシュして、 プライベートネットワークからキャッシュ内にあるものと同じ名前引きのリクエストががあった場合に、外部のDNSへ問い合わせることなく、応答を返すことができます。  外部への名前解決を行わないため

  • 名前引きレスポンスの高速化
  • 接続元を制限することによるセキュリティの向上

といったメリットがあります。またキャッシュDNSサーバーを構築することでDNSの理解に役立つかと思います。DHCPサーバーと連携することもできますので是非、構築してみて下さい。

1.LinuxでキャッシュDNSサーバーをセットアップする環境

キャッシュDNSサーバーは以前の記事

で構築したDHCPサーバー上にセットアップを行います。
上記の記事でも詳細を記載していますが、以下に大まかな要点を纏めてみました。

  • ホスト名はdhcp7
  • CentOS 7.6を利用しています。
  • サーバーのIPアドレスは 192.168.241.215
  • サブネットは192.168.241.0/24ビット(255.255.255.0)
  • dhcpサーバーが設定済み
  • 利用するドメイン名はint.rem-system.com

ドメイン名については ローカルのみで参照できるものを設定します。パブリックネットワーク向けのドメイン名に”int”のサブドメインを付与する形を指定しました。  またOSの詳細なバージョンとカーネルについては以下のようになります。
OSのバージョン

カーネルのバージョン

全体構成図
dns-cache-setting-map
この環境を前提にキャッシュDNSサーバーを構築して行きます。

2.ネットワークの設定変更

キャッシュDNSサーバーを構築する前に、サーバーのネットワーク設定を変更します。具体的にはネットワークの

  • リゾルバ(ネームサーバー)
  • 検索ドメイン

の設定変更を行います。

2-1.リゾルバーと検索ドメインの変更

ネットワークの設定変更は“nmcli”コマンドで実行します。
参照するネームサーバー(リゾルバ)の設定は“ipv4.dns”パラメータで指定指定します。自身がDNSサーバーになるため本環境では127.0.0.1を設定します。
検索ドメインは“ipv4.dns-search”パラメータで指定します。“int.rem-system.com”を設定します。
この二つの設定変更は、例えばコネクション名が”ens33″(コネクション名はOSの環境によって異なります。)の場合は以下のようにnmcliコマンドを実行します。

エラーが出力されなければ、コマンドは正常に完了しています。変更した設定を反映するためにネットワークサービスを再起動します。

エラーが出力されなければ、ネットワークサービスの再起動は完了です。

2-2.設定変更の確認

ネットワークサービスの再起動後に、変更が適用されていることを“nmcli connection show”コマンドで確認します。そのままだと全てのパラメータが表示されて見にくいため、DNS関連のパラメータだけを表示するように実行します。

上記のようにipv4.dnsipv4.dns-searchのパラメータが設定変更されていることが確認できれば、ネットワークの変更は完了です。

3.bindパッケージの確認

本章からDNSサーバー構築の具体的な手順に入ります。まずはDNSサーバー用のパッケージ確認から始めます。
DNSサーバーを構築するのに利用するアプリケーションは”bind”という名前でパッケージ化されています。bindパッケージをインストールする前にパッケージの詳細を確認します。

3-1.DNS関連パッケージリストの確認

CentOSに含まれる”bind”と名前の付くパッケージのリストを確認します。パッケージリストの確認はyum searchコマンドにパッケージ名を付けて実行します。

上記の出力結果からわかるように、bindと名前の付くパッケージは多くあります。この中でDNSサーバー用にインストールが必要になるパッケージは

  • bind.x86_64 : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server

になります。このbindパッケージについて詳細を確認します。

3-2.bindパッケージの詳細を確認

インストール前にパッケージの内容に間違いないか、念のためにbindパッケージの詳細を確認します。

表示された説明からbindパッケージがDNSサーバー構築に必要であることが確認できました。

4.bindパッケージのインストールと確認

本章では項目3.で確認したDNSサーバーに関するパッケージをyumコマンドでインストールする手順を記載していきます。

4-1.bindパッケージのインストール

bindパッケージは “yum install”コマンドにパッケージ名を付けることでインストールすることができます。 項目3-2.で必要なパッケージが確認できましたので、yum installコマンドでインストールします。

上記ではyumに-yオプションを付けることでインストール時の確認応答を省いています。パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

エラーの出力がなく”完了しました!”と表示されれば、bindパッケージはシステムにインストールされています。

4-2.インストール後の確認

bindパッケージがインストールされたことを確認します。インストールされているパッケージはyum listコマンドで確認できます。以下のように実行することで、bindパッケージがインストールされていることを確認します。

出力結果としてbindパッケージが表示されることを確認します。

続いてbindがインストールされた場所を確認します。 bindのプログラム本体は“named”という名前になります。 インストールされた場所(パス)を確認するためにはwhichコマンドを利用します。以下のようにwhichを実行することでインストールパスを確認できます。

合わせてnamedを実行できることを確認します。バージョンを表示するためのオプション”-v”を付与してnamedを実行してみます。

バージョンが表示できることが確認できました。これでインストール後の確認は完了です。

5.bindの基本的な設定

項目4.の手順まででbindパッケージの導入が完了しました。 bindの場合、サービスを起動させる前に幾つかの設定を行う必要があります。本記事ではDNSキャッシュサーバーを運用するにあたって必要になる基本的な設定を行います。  設定の前提は以下を想定しています。

  • プライベートネットワーク内からのみ再起問い合わせを許可する
  • DNSキャッシュにないDNSリクエストはパブリックDNSとして8.8.8.8へ転送する
  • firewalldでプライベートネットワークからのDNSの接続を許可
  • IPv6は利用しない

この条件に合わせてDNSサーバーの設定を行っていきます。

5-1.named.confの変更

bindの設定は/etc/以下にあるnamed.confで行います。 基本的な設定はnamed.confにあらかじめ記載されていますので、条件に合わせた部分(optionsディレクティブ)だけを設定変更します。
named.confの変更前に元のファイルをバックアップしておきます。バックアップは以下の手順で元ファイルのコピーを行います。

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである、viエディタを利用しています。

スポンサーリンク

5-1-1.Listenポートの変更

デフォルトのnamed.confにある設定では  bindはlocalhost(127.0.0.1)のみで待ち受けを行います。この設定の場合には、プライベートネットワーク内の他のマシンからDNSサーバーへ接続ができないため これを無効化します。無効化するには“listen-on port”項目を“#”“//”でコメントアウトします。IPv6についてはListenしないように同じく“listen-on-v6 port”項目をコメントアウトします。以下のように設定を変更します。

デフォルト

変更後

5-1-2.DNSリクエストの許可とフォワーダー設定

DNSのクエリ(名前解決のリクエスト)はデフォルトの設定では“allow-query”パラメータでlocalhostのみが許可されています。デフォルト設定の場合、プライベートネットワーク内の マシンからDNSサーバーへ問い合わせができないため、許可するネットワークを追加します。  以下のように“allow-query”パラメータを変更します。
デフォルト

変更後

合わせて、フォワーダー設定を追加します。フ ォワーダーはDNSサーバーで名前解決ができない場合に、DNSの問い合わせを転送する機能です。外部のDNSサーバーを指定します。 forwardersパラメータは設定ファイルに記載がないため、以下のように追記を行います。
指定している8.8.8.8はGoogleのパブリックDNSサーバーになります。

全ての変更が終わったnamed.confは以下のようになります。(その他はデフォルトのまま)

変更したファイルの内容を確認して間違いがなければ、ファイルを保存します。

5-2.設定ファイルの確認

named.confに設定できる内容は多岐にわたるため、設定ファイル自体に間違いがないかを確認するオプションが用意されています。DNSサーバーの起動前に“named-checkconf”コマンドを実行して設定ファイルをチェックします。以下、実行例になります。

エラーが出力されなければ、設定ファイルに間違いはありません。

6.ファイアウォールへの接続許可設定

DNSでは、幾つかの接続ポートを利用します。本記事ではDNSサーバー接続用としてTCP/UDPの53番ポートをオープンします。ファイアウォールはCentOSのデフォルトである“firewalld”を利用している前提となります。
DNS用ポート

  • TCP 53番ポート
  • UDP 53番ポート

6-1.現状のファイアウォール設定を確認

先ず、現状の設定を確認していきます。メールの送受信に利用するポートは、全てのネットワークに開放するため、インターフェイスに適用されている“public”ゾーンの設定を確認します。

デフォルトでは上記のようにSSHのみ許可されています。

6-2.DNSサーバー用の接続許可設定

項目6-1.で確認した”public”ゾーンの接続許可サービスにDNSサービスを追加します。追加はfirewall-cmdで以下のように行います。

”success”と表示されれば追加は完了です。設定を反映するためにファイアウォールの設定をリロードします。

”success”と表示されれば設定のリロードは完了です。

6-3.メール送受信サービス用ファイアウォールの設定確認

設定した内容が正常に反映されているかを確認します。確認は以下のように行います。

”services”の項目に“dns”が表示されていれば、ファイヤーウォール設定の確認は完了です。ここまででファイアウォールの接続許可設定は完了です。

7.DNSサーバー起動と自動起動設定

本章では設定したbindが起動することを確認します。CentOSでは7系からsystemctlコマンドでサービスの起動、停止を行います。

7-1.DNSサーバーの起動

bindは以下のように実行することで起動できます。

コマンドを実行してエラーが出力されなければ、namedは起動しています。
続いて、サービスの状態を確認します。systemctlコマンドにstatusオプションを付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。
以下が実行例です。

上記では分かり難いかもしれませんが、黒丸(●)の部分が正常な起動状態の場合、緑色で表示されます。 Active項目に(running)と表示されていますので、起動していることが確認できます。  稼働しているプロセスを表示するpsコマンドでもnamedが起動していることを確認できます。以下のように実行します。

namedプロセスが動作していることが確認できます。これでbindの起動は完了です。

7-2.bindの自動起動設定

bindの起動が確認できましたので サーバーの再起動や停止の復旧時にbindが自動的に起動するように設定します。 サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。

エラーが出力されなければ、自動起動は設定が完了しています。
続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。以下のように実行します。

実行結果として “enabled”と表示されれば自動起動の設定は完了です。

8.キャッシュDNSサーバーの動作確認

設定したDNSサーバーからクライアントがIPアドレスが取得できるかを確認してみます。使用するOSはWindows10です。クライアント側のネットワーク設定についてはIPアドレスの自動取得を設定します。

8-1.サーバーでの名前解決確認

ログインしているサーバーで名前解決を行うことができることを確認します。名前解決には”host”コマンドを利用します。
Linuxではhostコマンドによるホスト名の確認が可能です。使い方はhostコマンドにホスト名を付けて実行します。
“www.rem-system.com”を確認する場合、以下のようにコマンドを実行します。

指定したホスト名に対して、IPアドレスが表示されれば、動作確認は完了です。
もしホスト名が見つからないという警告が表示された場合には、ネットワークのDNS設定かDNSサーバーの設定を見直して下さい。ここでは正常に確認ができたという前提で先へ進めていきます。

8-2.クライアントPCからの動作確認

DHCPサーバーの構築を紹介した記事

の通りにDHCPサーバーの構築が終わっていて、クライアントPCがDHCPサーバーからIPを取得している場合にはクライアントPCのDNSサーバーとしてルーターのIPアドレスが設定されているかと思います。
DNSサーバーをIPアドレスを自動取得から、「次のDNSサーバーのアドレスを使う」に変更して、優先DNSサーバーとして192.168.241.215を設定します。※実際には構築したDNSサーバーのIPアドレスを設定してください。
cache-dns-setting-01
変更後に[OK]をクリックして、設定を保存します。
DNSの設定後に、コマンドプロンプトを開いてnslookupコマンドで同じくwww.rem-system.comの正引き名前解決を行います。

を実行して、IPアドレスが返ってくることを確認します。
実際にコマンドプロンプトでnslookupを行ったときには、以下の画面のようになります。
cache-dns-setting-02
これでプライベートネットワーク内にあるクライアントPCからの動作確認は完了です。

8.まとめ

キャッシュDNS機能についてはブロードバンドルーターなどに実装されていることが多く、それほど構築することはないかと思います。 しかしキャッシュDNSがどのように動作しているかという部分については、よく分からないというのは殆どではないでしょうか。  実際に キャッシュDNSを構築することでDNSの挙動や設定についても理解が進むかと思います。 DHCPサーバーに合わせてキャッシュDNSサーバーも是非、構築してみては如何でしょうか。
今後は、今回作成したDHCP/DNSの環境を利用してローカル向けのダイナミックDNSサーバーの構築を予定しています。

関連する記事


Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク