概要
CoreDNSでは、TLS(DNS over Transport Layer Security、RFC 7858)で暗号化またはgRPCを使用するクエリ(https://grpc.dokyumento.jp/, IETF標準ではない)がサポートされています。通常、DNSトラフィックは暗号化されません(DNSSECはリソースレコードに署名するだけです)。
tls「プラグイン」を使用すると、DNS over TLSとDNS over gRPCの両方に必要な暗号化キーを設定できます。tlsプラグインが省略されると、暗号化は行われません。
gRPC protobufferはpb/dns.proto
で定義されています。ワイヤーデータのDNSメッセージの簡単なラッパーとしてプロトを定義します。
構文
tls CERT KEY [CA]
CAパラメータはオプションです。設定しない場合、システムCAを使用してクライアント証明書を確認できます
tls CERT KEY [CA] {
client_auth nocert|request|require|verify_if_given|require_and_verify
}
client_authオプションが指定されている場合、クライアント認証ポリシーを制御します。オプション値はGo tlsパッケージのClientAuthType値(nocert、RequestClientCert、RequireAnyClientCert、VerifyClientCertIfGiven、RequireAndVerifyClientCert)に対応します。デフォルトは「nocert」です。このオプションがverify_if_givenまたはrequire_and_verifyに設定されていなければ、CAパラメータを指定することは意味がありません。
例
ポート5553で着信するDNS over TLSクエリーを受け取り、クエリーを解決するために/etc/resolv.conf
で定義されたネームサーバーを使用するDNS over TLSサーバーを開始します。このプロキシパスでは、従来のDNSが使用されます。
tls://.:5553 {
tls cert.pem key.pem ca.pem
forward . /etc/resolv.conf
}
前の例と同様のDNS over gRPCサーバーを開始します。ただし、着信クエリーにはDNS over gRPCを使用します。
grpc://. {
tls cert.pem key.pem ca.pem
forward . /etc/resolv.conf
}
前の例と同様の、ポート443でDoHサーバーを開始します。ただし、着信クエリーにはDoHを使用します。
https://. {
tls cert.pem key.pem ca.pem
forward . /etc/resolv.conf
}
Knot DNSのkdig
だけがDNS over TLSクエリーをサポートし、コマンドラインクライアントでgRPCをサポートしていないため、これらのトランスポートのデバッグは本来よりも困難です。
関連項目
RFC 7858とhttps://grpc.dokyumento.jp。