tls

ソース

tlsを使用すると、TLS、gRPC、DoHサーバーのサーバー証明書を設定できます。

概要

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