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

AIX、UNIX、Linux
20190221154230fe2

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

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

2019年8月22日:追記

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

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました