
今さらながら知ったのですが、Knot resolverの名前解決を行う先を、policy.FORWARD
というパラメータを使用して指定できるのですが、基本動作として、複数の転送先があった場合、その中で最も名前解決の早かったものが自動的に選択されるようになっています。
が、自分はランダムで選択されるのかなと勘違いしていました。
ちなみに勘違いしていたパラメータはこちら。
Knot Resolver library — Knot Resolver 3.2.1 documentation
Reorder cached RRs.ってあるんですが、よく読んだら、”キャッシュされたリソースレコードを並べ替えます”だから、違いますよね・・・
たまたま、Knot resolverのMLにランダムに選択する方法について情報が流れてきたので、そちらを参考にすることにしました。
How to randomize DNS resolver selection in Knot Resolver – Ctrl blog
一連にすると以下のような記述になります。
require 'math'
math.randomseed(os.time())
dns_providers = {
{ -- Quad9
'9.9.9.9',
'149.112.112.112',
'2620:fe::fe',
},
{ -- Cloudflare Resolver
'1.1.1.1',
'1.0.0.1',
'2606:4700:4700::1111',
'2606:4700:4700::1001',
}
}
table.insert(dns_providers, dns_providers[1])
policy.add(function (request, query)
return policy.FORWARD(dns_providers[math.random(1, #dns_providers)])
end)
参考先は、DNS over TLSになっていますが、自分の環境ではとりあえずは素の問い合わせの設定です。セキュリティ的にかっちりしたい場合は、参照先の方を参考にしてください。
自分の場合は、TLSに関する部分を削除したことと、policy.TLS_FORWARD
をpolicy.FORWARD
に変更したぐらいです。
mathライブラリを使用して、OS時間から乱数値を設定、dns_providerとしてQuad9とCloudflareのIPアドレスを設定、問い合わせがあったら、policy.FORWARD
で設定される転送先をランダムで並べ替えて使用する、という感じなるでしょうか(間違えていたらご指摘ください)。
負荷分散的な意味でも設定しておいた方が良いかな、という感じです。
2019年8月22日:追記
ちなみに過去記事で勘違いを盛大にしていました。