通过CoreDNS将DNS转发到Cloudflare的TLS上的DNS

时间:2019-04-08 19:31:00

标签: dns coredns

我以using this Docker image为例,尝试设置通过TLS到CloudFlare解析器的安全DNS转发。我正在使用CoreDNS 1.5.0(最新),我的配置是这样:

# CoreDNS Configuration

.:53 {
  forward . tls://1.1.1.1 tls://1.0.0.1 {
    tls_servername tls.cloudflare-dns.com
    policy sequential
    health_check 5s
  }

  log
}

我正在这样发出请求:

root@8ef125545369:/# dig @127.0.0.1 google.com

; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> @127.0.0.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 49802
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 090b0d7fadcdd8bb (echoed)
;; QUESTION SECTION:
;google.com.                    IN      A

;; Query time: 24 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Apr 08 19:29:30 UTC 2019
;; MSG SIZE  rcvd: 51

我没有得到答案。 CoreDNS日志如下所示:

missioncontrol    | 2019-04-08T19:29:30.778Z [INFO] 127.0.0.1:39615 - 49802 "A IN google.com. udp 51 false 4096" NOERROR - 0 5.02365452s
missioncontrol    | 2019-04-08T19:29:35.759Z [INFO] 127.0.0.1:39615 - 49802 "A IN google.com. udp 51 false 4096" NOERROR - 0 5.00549558s

很明显,CoreDNS正在获取请求,但是我无法确定失败的原因。我的映像是ubuntu:bionic,并且已安装ca-certificates。我还可以使用openssl s_client连接到1.1.1.1:443而不会出现问题。

设置从CoreDNS到CloudFlare的解析器的TLS上的DNS转发时是否缺少我的东西?


编辑

我已经在Docker容器之外的主机操作系统上对此进行了测试,并且看到了相同的功能,即它无法正常工作。

1 个答案:

答案 0 :(得分:0)

我通过在Travis CI中运行它再次对其进行了测试,并且可以正常工作;显然,我的公司防火墙不喜欢TLS上的DNS。

我能够通过安装27.0(在Ubuntu 18.04上)并尝试直接查询Cloudflare来验证这一点:

knot-dnsutils

这是在公司网络内查询时发生的情况。从Travis CI,我看到了:

$ kdig -d @1.0.0.1 +tls-ca +tls-host=cloudflare-dns.com google.com
;; DEBUG: Querying for owner(google.com.), class(1), type(1), server(1.0.0.1), port(853), protocol(TCP)
;; DEBUG: TLS, imported 133 system certificates
;; DEBUG: TLS, received certificate hierarchy:
;; DEBUG:  #1, C=US,ST=California,L=San Francisco,O=Cloudflare\, Inc.,CN=cloudflare-dns.com
;; DEBUG:      SHA-256 PIN: V6zes8hHBVwUECsHf7uV5xGM7dj3uMXIS9//7qC8+jU=
;; DEBUG:  #2, C=US,O=DigiCert Inc,CN=DigiCert ECC Secure Server CA
;; DEBUG:      SHA-256 PIN: PZXN3lRAy+8tBKk2Ox6F7jIlnzr2Yzmwqc3JnyfXoCw=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.
;; WARNING: TLS, handshake failed (Error in the pull function.)

很显然,公司防火墙正在阻止此访问。