はじめに
PowerDNS dnsdistは、DNSクエリ向けのロードバランシングソフトウェアです。高トラフィック環境での安定性と効率性を向上させるため、セキュリティ機能やクエリルーティング制御を提供します。
- PowerDNS DNSdist
- DNSdist documentation
DNSクエリによる外部からの攻撃の対策として、dnsdistを既存DNSソフトウェアの上に配置する事でレート制限やクエリルーティング設定を行いサーバ負荷を低減させることが可能です。
実行環境、構成
- OS:WSL2 Ubuntu 22.04
- dnsdist:1.8.2-1
・本記事でのdnsdist構成
Ubuntu22(WSL) --> dnsdist(10053/udp,tcp) --> WSL用ホスト機仮想インターフェース(53/udp,tcp)
→ WSL標準設定のresolvの前段に、dnsdistを配置する構成としています。
==========================================================================
・実環境でのdnsdist構成例
[Internet] --> dnsdist(53/udp,tcp) --> BIND,PowerDNS等(53/udp,tcp)(※注)
※注…dnsdistは多くのレガシーなDNSソフトウェアの前段で使用可能である事が
公式ページに記載がありますが、具体的なDNSソフトウェアのサポート記載について
は存在しないため本番環境で使用する際はご注意ください。
dnsdistインストール
ubuntu 22.04の標準リポジトリではdnsdist 1.4系が含まれていますが、現状のstableバージョンである1.8系をリポジトリサイトの手順に従いインストールします。
- リポジトリサイト:https://repo.powerdns.com/
ページ下部にある[Ubuntu -> dnsdist - version 1.8.X (stable)]に記載のインストール手順を実施します。
dnsdistのログディレクトリ作成
# mkdir /var/log/dnsdist
# chown _dnsdist:_dnsdist /var/log/dnsdist
dnsdist.conf修正
dnsdistインストール後、/etc/dnsdist/以下のdnsdist.confを編集します。
※注…dnsdistの設定はLUAスクリプト言語に基づくため、"--"で始まる行がコメント行となります。
# vi /etc/dnsdist/dnsdist.conf
-- dnsdistのListenサーバIPアドレス:使用ポート
-- https://dnsdist.org/reference/config.html#addLocal
addLocal("172.26.2.3:10053")
-- DNSクエリのACL設定
-- https://dnsdist.org/advanced/acl.html
setACL("172.26.0.0/16")
-- DNSクエリのバックエンドIPアドレス:使用ポート、バックエンド名、秒間クエリ制限数
-- https://dnsdist.org/reference/config.html#newServer
newServer({address="172.26.0.1:53", name="dns1", qps=300})
-- バックエンドに適用するポリシー
-- https://dnsdist.org/guides/serverselection.html
-- https://dnsdist.org/guides/serverselection.html#setServerPolicy
setServerPolicy(firstAvailable)
-- ロギング設定
-- https://dnsdist.org/rules-actions.html#LogAction
addAction(AllRule(), LogAction("/var/log/dnsdist/query.log", false, true, false))
設定ファイルを編集後、dnsdistをrestartします。
# systemctl restart dnsdist
名前解決の動作確認
digコマンドにて、dnsdistを経由して名前解決が可能な事を確認します。
# dig -p 10053 @172.26.2.3 www.google.co.jp +short
172.217.26.227
# tail /var/log/dnsdist/query.log
Packet from 172.26.2.3:40813 for www.google.co.jp. A with id 65362
おわりに
今回の記事では、dnsdistのインストールおよびバックエンドに関する設定を行いdnsdistを通した名前解決動作を確認しました。次回は実際にdnsdistを使用し様々なクエリルーティングに関する動作を確認していきます。