CoreDNSでDNS over TLSな複数のアップストリームを指定する

AIX、UNIX、Linux

はじめに

最近はプライバシーや盗聴の観点からDNSの問い合わせについてもDNS over HTTPSやDNS over TLSなどを使用することが推奨され、ブラウザーの機能としてもその手のサービスのDNSを直接使用できるようになっています。

普段は自宅のDNSフォワーダーとしてCoreDNSを使用しているのですが、今までNon-secureな形でのしかアップストリームサーバを指定したことが無かったので、複数のDoTを提供しているサーバへの問い合わせを行う方法について書いておくことにしました。

確認環境

.:53
.:5301 on 127.0.0.1
.:5302 on 127.0.0.1
[INFO] plugin/reload: Running configuration MD5 = a2ed192d06c1fb0e51bf5d987617f669
CoreDNS-1.8.3
linux/arm64, go1.16.3, 4293992

設定方法

これについては公式ドキュメントのサンプル通りです。昔はこのサンプルが無かったように思うのですが、先日この記述を見つけてようやく設定をDNSからDoTに切り替えることが出来ました。

.:53 {
    forward . 127.0.0.1:5301 127.0.0.1:5302
}
.:5301 {
    forward . 8.8.8.8 8.8.4.4 {
        tls_servername dns.google
        force_tcp
    }
}
.:5302 {
    forward . 1.1.1.1 1.0.0.1 {
        tls_servername cloudflare-dns.com
        force_tcp
    }
}

通常通り53/udpで待ち受け、そのあと、5301/udp、5302/udp として2つ設定したそれぞれのアップストリームサーバをそれぞれ指定することでランダムに問い合わせを振り分けます(振り分けポリシーがデフォルトだとランダムのため。変更可能)。

また、今回のようにDoTのみを指定する場合はUDPによる問い合わせを行う必要がないので、force_tcpを指定してアップストリームへの問い合わせをTCPに強制するようにしました。

ちなみに、CoreDNSは過去にはアップストリーム先としてDNS over HTTPSが使えたようですが、現在はproxyプラグインが標準では同梱されなくなったので未サポートとなったようです。(現在使用できるForwardプラグインはDNSとDoTしかサポートしていない)

参考先

この記事を書いた人

kometchtech

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

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