[DNS][Knot resolver][自分用メモ] Knot resolverで名前解決の転送先をランダムに選択する方法。

2019-02-21 15:57:02AIX、UNIX、Linuxconfig, DNS, knot resolver

20190221154230fe2

今さらながら知ったのですが、Knot resolverの名前解決を行う先を、policy.FORWARDというパラメータを使用して指定できるのですが、基本動作として、複数の転送先があった場合、その中で最も名前解決の早かったものが自動的に選択されるようになっています。

が、自分はランダムで選択されるのかなと勘違いしていました。

ちなみに勘違いしていたパラメータはこちら。

Reorder cached RRs. ってあるんですが、よく読んだら、”キャッシュされたリソースレコードを並べ替えます”だから、違いますよね・・・

たまたま、Knot resolverのMLにランダムに選択する方法について情報が流れてきたので、そちらを参考にすることにしました。

一連にすると以下のような記述になります。

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_FORWARDpolicy.FORWARDに変更したぐらいです。
mathライブラリを使用して、OS時間から乱数値を設定、dns_providerとしてQuad9とCloudflareのIPアドレスを設定、問い合わせがあったら、policy.FORWARDで設定される転送先をランダムで並べ替えて使用する、という感じなるでしょうか(間違えていたらご指摘ください)。

負荷分散的な意味でも設定しておいた方が良いかな、という感じです。

2019年8月22日:追記

ちなみに過去記事で勘違いを盛大にしていました。

2019-02-21 15:57:02AIX、UNIX、Linuxconfig, DNS, knot resolver