Alpine Linux仮想マシンとUnboundで作る自宅用DNSフルサービスリゾルバ

公開 | 更新 

Unboundの導入

unboundパッケージをインストールします。

 

今回構築したいDNSサーバは、ISP謹製や公共DNS(GoogleやCloudFlareなど)へのフォワーダではなく、ルートから引っ張ってキャッシュ保持するDNSサーバで、そのサービス提供先はLAN内のネットワークデバイスに限ります。

この命題に沿って設定ファイルを記述するわけですが、インストール時にデフォルトで入っているサンプルの設定ファイルは大きすぎるので、リネームして逃がしておいてから、同じ名前で以下の内容で一から作成しました。

 

必要なルートヒントを取得します。本来は定期的に更新する必要があるのですが、それはまた追々考えます。

サービスを開始する前に、設定ファイルを簡易チェック(あまり厳しく見てくれないので気休め程度)。

サービスを開始して、自動起動も有効にします。

 

別の端末から dig でクエリを投げてみます。

初回は所要時間 74msec とありますが、次回はキャッシュが有効な限り、 msec で済みます。

 

クエリロギングの有効化

名前解決の問い合わせ履歴を含めたサービスのログを出力したいので、設定ファイルに以下の項目を追加します。

空のログファイルを作成し、その所有権をunboundに引き当てます。

サービスを再起動すると、クエリの様子も含めてログに記録されるようになりました。

 

管理ツールunbound-controlの有効化

unbound-control はUnboundサービスの管理ツールです。次項のログローテーション処理でログファイルの再読込みに必要になるので、有効にしておきます。

利用する前にまず、こちらのガイドに従ってまずSSL証明書を作成します。

Unbound設定ファイルに以下の項目を追加します。

サービスを再起動すれば利用可能になります。早速、サービスサマリや統計情報を確認してみましょう。

保持しているキャッシュのダンプ出力は、以下のように行います。

 

ログのローテーション設定

ログが無尽蔵に増殖しないよう、日割りログを2週間分程度保持する要領で、ログローテーションを設定しておきます。

Alpine Linuxではデフォルトでインストールされていないので、まずlogrotateパッケージのインストールから。

crondaily フォルダにlogrotateの実行スクリプトが配置されました。

 

次に、前項で利用可能とした unbound-control の居場所を確認。

Unbound用のログローテーションを、新たに以下のように定義しました。

定義に問題がないか、ドライランしてみます。

数日後確認してみると、設定通りに日毎のログファイルになっていました。

 

Unbound設定チューニング

最後に仮想CPU2コア、RAM1GBと言う環境に合わせて、多少設定をチューニングしてみました。

unbound-control で表示されるthreads数が増えましたが、体感的にすぐ効果が現れるような事柄でもないので、しばらく様子を見てみます。

 

既存のOpenWRTルータの設定変更

出来上がったDNSサーバをネットワーク上の皆に使ってもらえるよう、DHCPサーバであるOpenWRTルータに DHCP-Option #6 を設定します( '6, 192.168.51.9' はカンマ後ろに半角スペース必須)。

DHCPサービスを再起動して設定を適用。 なお、この設定はDHCPサーバの Static Leases へ登録しているホストへも、等しく適用されていました。

LuCI上でこの設定は、 LAN Interface の中にある DHCP Server タブの Advanced Settings の中にあります。

図14.OpenWRT DHCP-Options

図14.OpenWRT DHCP-Options

 

さらにルータ上のOpenConnect VPNサーバには、VPNクライアントが使うDNSサーバを登録する設定項目があるので、こちらにも追加しておきます。

図15.OpenConnect VPN DNS Servers

図15.OpenConnect VPN DNS Servers

ローカルゾーンのことはDHCPサーバへ問い合わせ

こうして構築したUnboundによるDNSサーバは、このままではLAN内のローカルドメイン .lan のことは何一つ分かりません。

そこで、そのようなクエリはLAN内のDHCPサーバへ問い合わせるよう、ローカルゾーンとスタブゾーンを次のように設定します。

別のクライアントから、正常に名前解決してもらえることを確認。

 

Unbound設定ファイル全体像

こうして完成したUnbound設定ファイルの全体像は、次の通りです。

 

次回はNetdataなどのリソースモニタリングツールを使った、Unboundの仕事ぶりの可視化に取り組みたいと思います。

 

created by Rinker
¥1,760 (2024/04/30 00:47:57時点 Amazon調べ-詳細)

コメントを残す

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

CAPTCHA