DNSサーバを作りたかったらしい

解いた人:nonnonno

参照した問題・解説のサイト:DNSサーバを作りたかったらしい

概要

あなたは同僚から助けを求められた。彼は社内のDNSサーバの構築ログに基づいて環境構築を試みたが、テストとして実行したコマンドでは期待していた出力が行われなかったらしい。原因を調査して、エラーを解決してあげよう。

前提条件

  • ns01はmaster、ns02はslaveサーバとして機能させたい
  • トラブルに関係しない要素については変更しない
  • ns01,ns02についての接続情報が与えられている

初期状態

ns02でdig @localhost red.prob.final.ictsc.netが解決できない

終了状態

  • ns02でdig @localhost red.prob.final.ictsc.netが解決できる
  • 原因が特定されて報告される
    • トラブル解決前に期待されていた動作をしている

考えられる原因・解決方法

digコマンドについて

参考Qiita digコマンドは、DNSサーバに対して問い合わせを行い、その結果を表示する。

ちなみに

DNSサーバにはキャッシュDNSと権威DNSの二種類がある。 権威DNSにアクセスが集中しないよう、しばらくの間はキャッシュDNSサーバが権威DNSから受け取った応答を保持して、その内容を使ってクライアントに応答する。

digコマンドの話に戻るが、digコマンドはBIND 9に付属するコマンドである。
nslookupと機能が似ているが、digコマンドによって得られる情報量が格段に多い。

BIND 9とは

Berkley Internet Name Domainの略で、世界中で最も多く利用されているDNSサーバのこと。
他にもDNS機能を提供するソフトウェアは存在するが、BINDを使うサーバがほとんどである。

DNSサーバの構築トラブルシューティング
本問題のdigの実行結果がわからないので、考えられる要因が多岐にわたる

解法

今回の問題文に、『彼は社内のDNSサーバの構築ログに基づいて環境構築を試みたが、テストとして実行したコマンドでは期待していた出力が行われなかった』とあるので、ログを見る必要がある。
どのログを見るかについては、コマンドを起動するための設定ファイルに関するものを見る必要がありそう。
例えば、今回であればdigコマンドがうまくいっておらず、digコマンドの設定ファイルはBINDのものなので、 systemctl status bind9とする。

このログを見ると、BINDが設定ファイルのエラーによって起動していないことがわかる。
/etc/bind/named.conf.probについてエラーが出ているので、この設定部分を変更する必要がある。

viewとzoneとは

参考リンク https://ygg-tech.com/2020/09/bind_view/

viewは、一言で言ってしまえば「接続条件によってDNSクエリ結果を変える機能」である。
Bindの Ver.8 から使用可能であり、CentOS7であれば Ver.9 なので問題なく利用可能。 viewステートメントによって、アクセス元のIPアドレスに応じて、検索クエリに応答するゾーン情報を分けることができる。
活用する状況としては以下が挙げられる。

  • 社内にWebサーバがあり、複数のLANに足を出している
  • 各LANのクライアントには、自身が所属するLANのWebサーバのIPを返したい
  • DNSは1台で済ませたい

参考リンク https://ygg-tech.com/2020/09/bind_view/の画像の中では、

  • Secure LANに所属するクライアントには192.168.0.1を返す
  • Remote Access LANに所属するクライアントには、172.24.0.1を返す というフローが実現できる。

設定ファイルの書き方は参考リンク参照。

ちなみに、zoneをドメイン名や単一DNSサーバと関連づけることは間違いである。
DNSゾーンは複数のサブドメインを含むことができ、複数のゾーンが同じサーバに存在できる。
ゾーンファイルに、DNSサーバに保存されているゾーン内の全てのドメインの全てのレコードが含まれ、記載される。

解法に戻る

viewの説明箇所で記述したように、複数のviewを使う際に、同じ名前がついた実態は異なるzoneを含んでいても、クライアント毎に異なるレスポンスを返すことが可能である。
しかし時には、複数のviewが同一のzoneを持つことが望まれる場合もある。
そこで用いられるのが in-view zone オプションである。 in-view公式解説
これは一言で言うと、viewをまたいだゾーンの共有である。
in-view オプションによって、事前に設定されたviewの中で定義されたzoneを、viewが参照することができるようになる。
これは設定ファイルにおいて後の部分に記述されているviewを参照することはできない。

2つ以上のviewで同じzone(type slave)を設定するとエラーになるので、2回目以降に使用する際にはin-viewオプションを使うとエラーが回避できる。

BINDの設定方法

DNSサーバ構築手順参考リンク
全体設定ファイルnamed.confは、デフォルトでは/etc/named.confに配置されている。

ちなみに、BINDをchrootしておくと、bind サービスは /var/named/chroot より上のディレクトリには行けなくなり、仮に bind を乗っ取られても他のディレクトリには被害が及ばない。
つまり、セキュリティを確保することができる。

chrootの場合には、自動的に/var/named/chroot/etc/named配下に named.conf などの設定ファイルができている。

systemctl restart namedとして再起動ができる。
ちなみに、named-chrootをインストールした場合、

  • named → 自動起動 disable
  • named-chroot → 自動起動 enable

の設定をしないと、namedが二つ起動している状態になってしまうので注意が必要である。