我有 Ubuntu 20.04 服务器。此服务器设置为运行 WordPress 网站(LEMP 堆栈)。在此服务器中,我已设置 ubuntu DNS 解析器以使用“DNS Over TLS”。使用 Cloudflare DNS 服务。
当我运行以下命令时,我可以看到它使用端口 53,而不是使用 DNS Over TLS 端口 853。在我的 CSF 防火墙中,我已允许 TPC 和 UDP(输入/输出)中的端口 853。
这可能是什么原因?如何强制 ubuntu 使用 DNSOverTLS?
solved.conf 配置。
[Resolve]
DNS=1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
DNSSEC=yes
DNSOverTLS=yes
Cache=no-negative
#DNSStubListener=yes
#ReadEtcHosts=yes
这是我的测试结果。
root@server:~# nslookup google.com
Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
Name: google.com
Address: 142.250.65.174
Name: google.com
Address: 2607:f8b0:4006:81e::200e
root@server:~# kdig -d google.com
;; DEBUG: Querying for owner(google.com.), class(1), type(1), server(1.1.1.1), port(53), protocol(UDP)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 51182
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 0
;; QUESTION SECTION:
;; google.com. IN A
;; ANSWER SECTION:
google.com. 246 IN A 142.251.40.142
;; Received 44 B
;; Time 2022-01-30 16:17:34 +0530
;; From 1.1.1.1@53(UDP) in 1.3 ms
但是,当我运行以下命令时,它使用 DNS over TLS(端口 853)。
root@server:~# kdig -d @1.1.1.1 +tls-ca +tls-host=cloudflare-dns.com example.com
;; DEBUG: Querying for owner(example.com.), class(1), type(1), server(1.1.1.1), port(853), protocol(TCP)
;; DEBUG: TLS, imported 128 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: RKlx+/Jwn2A+dVoU8gQWeRN2+2JxXcFkAczKfgU8OAI=
;; DEBUG: #2, C=US,O=DigiCert Inc,CN=DigiCert TLS Hybrid ECC SHA384 2020 CA1
;; DEBUG: SHA-256 PIN: e0IRz5Tio3GA1Xs4fUVWmH1xHDiH2dMbVtCBSkOIdqM=
;; DEBUG: TLS, skipping certificate PIN check
;; DEBUG: TLS, The certificate is trusted.
;; TLS session (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 16525
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
;; EDNS PSEUDOSECTION:
;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR
;; PADDING: 408 B
;; QUESTION SECTION:
;; example.com. IN A
;; ANSWER SECTION:
example.com. 68347 IN A 93.184.216.34
;; Received 468 B
;; Time 2022-01-30 16:02:33 +0530
;; From 1.1.1.1@853(TCP) in 1.7 ms
当我检查解析器状态时,它显示已启用 DNS over TLS。
root@server:~# systemd-resolve --status
Global
LLMNR setting: no
MulticastDNS setting: no
DNSOverTLS setting: yes
DNSSEC setting: yes
DNSSEC supported: yes
DNS Servers: 1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001
94.237.127.9
94.237.40.9
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 4 (eth2)
Current Scopes: none
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: yes
DNSSEC setting: yes
DNSSEC supported: yes
答案1
虽然我使用的是 Ubuntu 22.04 LTS,但以下解决方案对我有用,但需要额外一步:
如果链接失效,相关部分已包含在我的答案中。您需要/etc/NetworkManager/conf.d/
在此示例中创建一个名为dns.conf
以下内容的文件:
[main]
dns=none
systemd-resolved=false
这不允许 NetworkManager 覆盖/etc/resolved.conf
现在,额外的步骤是您需要编辑/etc/resolved.conf
以使用 systemd-resolved 提供的本地 DNS 解析。但要小心,因为它可能链接到其他文件,因此在进行任何意外更改之前,请先取消链接。它需要包含的唯一一行是:
nameserver 127.0.0.53
另外,我使用 chmod 将其权限更改为 555,以避免任何其他程序覆盖它。
使用 Wireshark 的测试表明,所有 dns 查询均使用端口 853 上的 TLS 传输。