地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

dnsdistに入門する

github.com

dnsdistは、高パフォーマンスで柔軟なDNSプロキシとロードバランサです。PowerDNSプロジェクトによって開発され、オープンソースで利用可能です。dnsdistは、DNSトラフィックの制御、トラフィックの分散、セキュリティの向上など、さまざまな目的で使用されます。DDoSへの対策になりそうなので調べた内容です。

環境

Ubuntu 22.04

インストール

$ sudo apt update
$ sudo apt install dnsdist

設定ファイルを修正

/etc/dnsdist/dnsdist.confに設定ファイルがあるので修正する。

-- フロー制限アクションを作成
addAction(MaxQPSIPRule(1, 2), DropAction())

newServer({address="192.168.1.1:53", name="dns-1"})
setServerPolicy(firstAvailable)

-- Listen on port 53
addLocal('0.0.0.0:54')
root@worker003:/home/ryu# cat /etc/dnsdist/dnsdist.conf

-- フロー制限アクションを作成
addAction(MaxQPSIPRule(1, 2), DropAction())

newServer({address="192.168.1.1:53", name="dns-1"})
setServerPolicy(firstAvailable)

-- Listen on port 53
addLocal('0.0.0.0:54')

addAction()は、dnsdistで使用される関数の1つで、フィルタリングルールとアクションを組み合わせてリクエストの処理を制御する。setServerPolicy()は、dnsdistで使用される関数の1つで、バックエンドサーバの選択ポリシーになります。

制限を入れる

やりたかったのはこの部分になります。dnsdistである程度クエリを落としたり遅延させることでそのバックエンドのDNSを守ろうという考えになります。

Packet Policies — dnsdist documentation

やりたいことのまとめはここにあります。QPSを制限するのにとても柔軟に設定ができるイメージを持ちました。ネットワークマスクの値を取れるのは特に便利でDDoSって割と偏りがあったりするのでその辺を絞った制限をできるだけでも大分便利そうです。

参考サイト

www.designet.co.jp