我尝试通过 启用 DNS over TLS systemd-resolved。我进行了/etc/systemd/resolved.conf如下更改:

[Resolve]
DNS=1.1.1.1
#FallbackDNS=
Domains=~.
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
DNSOverTLS=opportunistic
#Cache=yes
#DNSStubListener=yes

在监控网络(使用 tcpdump)以查看结果行为是否符合预期时,似乎与目标服务器建立了 TLS 会话;但是,服务器随后关闭了连接。我对 1.1.1.1、8.8.8.8 和其他服务器都得到了相同的结果。

有想法该怎么解决这个吗?

PS:systemd-resolved最终使用传统 DNS 进行并行解析(尽管上面设置了“域”)。但我在这篇文章中的主要问题是 TLS 可能出了什么问题。

答案1

最近,我为家庭网络实施了 DNS over TLS(使用AsusWRT-Merlin有源路由器)。在探索在家庭网络之外为 Linux 工作站和服务器(在云端 - 我的意思是其他人的计算机 lol)实施 DoT 的方法时,我发现了systemd-resolvedDNS 隐私项目的建议。

尽管@意见-no9提供了一个针对 Ubuntu 18.04 的特定解决方案(受 LTS 附带的 systemd 版本限制),我想分享一个更通用且接近上游的解决方案:

背景介绍 - DNS over TLS 支持时间表systemd

  • 236 DNSSEC 支持 RFC 8080(ed25519密钥和签名)
  • 239现在默认systemd-resolved支持opportunisticDNS-over-TLSOff
  • 243获得了对新DNS-over-TLS 模式systemd-resolved的支持strict

不好了!Ubuntu 18.04 LTS 附带 systemd 237...

更新 - 2020 年 4 月 23 日Ubuntu 20.04 LTS 附带 systemd 245(不带systemd-homed;-)。

在通用 Linux 系统上使用 DNS Over TLS (DoT)

因此,对于具有相对接近上游内核、systemd、glibc、工具链、GNU 实用程序等的通用 Linux 发行版

  1. 编辑/etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1 1.0.0.1 8.8.8.8
#FallbackDNS=1.1.1.1 9.9.9.10 8.8.8.8 2606:4700:4700::1111 2620:fe::10 2001:4860:4860::8888
#Domains=
#LLMNR=yes
#MulticastDNS=yes
#DNSSEC=allow-downgrade
#DNSOverTLS=opportunistic
DNSSEC=yes
DNSOverTLS=yes
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yes

Ubuntu 20.04 专用resolved.conf

[Resolve]
DNS=1.1.1.1 1.0.0.1 8.8.8.8
FallbackDNS=1.1.1.1 8.8.8.10 8.8.8.8
#Domains=
#LLMNR=no
#MulticastDNS=no
DNSSEC=yes
DNSOverTLS=yes
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yes
  1. 假设systemd-resolved已启用,重新启动服务
systemctl restart systemd-resolved.service
  1. 使用本地存根解析器

systemd-resolved在本地环回接口上的 IP 地址 127.0.0.53 上提供本地 DNS 存根侦听器,因此要使用支持 TLS 的 DNS 存根解析器,我们需要以某种方式管理/etc/resolv.conf并确保127.0.0.53将其用作名称服务器。

注意:systemd 保持/run/systemd/resolve/stub-resolv.conf与传统 Linux 程序的兼容性。我们可以简单地符号链接到此文件 ;-)

ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

注意:对于 Arch Linux,我必须用openresolvconf替换systemd-resolvconf

完毕。

验证

生成 DNS 查询,然后通过端口 853 检查与指定上游 DNS 服务器的 TCP 连接,在下面的示例中我们明确使用了 Cloudflare 的1.1.1.1

root@netbook:/etc# uname -a
Linux netbook 5.4.5-arch1-1 #1 SMP PREEMPT Wed, 18 Dec 2019 19:48:51 +0000 x86_64 GNU/Linux

root@netbook:~#  kdig -d github.com
;; DEBUG: Querying for owner(github.com.), class(1), type(1), server(127.0.0.53), port(53), protocol(UDP)
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 55366
;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; github.com.                  IN      A

;; ANSWER SECTION:
github.com.             58      IN      A       13.236.229.21

;; Received 44 B
;; Time 2019-12-21 22:55:13 AEDT
;; From 127.0.0.53@53(UDP) in 58.0 ms

root@netbook:~# ss -tuna | grep :853
tcp   ESTAB  0       0        192.168.1.150:50504         1.1.1.1:853
tcp   ESTAB  0       0        192.168.1.150:50506         1.1.1.1:853

或者,如果你想要简单粗暴,使用tcpdump;-)

tcpdump -tttt -nn -XX -vv -i <interface> dst 1.1.1.1 and port 853

结论

最后但并非最不重要的一点:这是在 Linux 主机上启用 DNS over TLS 的通用指南,它并不特定于发行版或桌面环境(因为我们甚至还没有接触过 NetworkManager 或替代方案 ;-)。可能需要针对不同的发行版和不同的 DE/WM 进行调整。

参考

答案2

Ubuntu 18.04 中的 DNS-over-TLS...20.04

根据我的经验,它不会在 Ubuntu 18.04+(即 U19、U20、U21)上按照上述方式工作。

由于 Ubuntu 18+ 使用网络计划与 NetworkManager 并行,事情也发生了巨大的变化:
不再以传统方式进行手动配置;-(文档...很少。

snap 可能会带来进一步的变化。它建立了额外的 solved.conf 文件。但是,下面的方法实际上有效(/w 性能良好)。

有关 Netplan 的信息请查看这里

哪些 DNS-over-TLS 运行成功(works4me):

  1. /etc/systemd/resolved.conf 仅将 DNSOverTLS 设置更改为

    DNSOverTLS=机会主义

    没有其他选择(请参阅此处的解释:基于 TLS 的 DNS

  2. 使用功能强大的 DNS 服务器。我更喜欢数字勇气服务器

    46.182.19.48分别2a02:2970:1002::18

    或者https://dnsforge.de/

    为什么?因为隐私!

  3. 这应该在通过 GUI 进行网络管理

    在 IPv4 设置/DNS 服务器和 v6 下的连接的 GUI 字段中分别输入 DNS 服务器地址。

    条目不会显示在/etc/resolv.conf!! 中,这是正确的。相反,您将看到名称服务器 127.0.0.53

    这是新的 Ubuntu....不再适合业余管理员。

  4. 不推荐但可行选择

    可以直接按照/etc/resolv.conf通常的格式设置适当的 DNS 服务器,删除 127.0.0.53 或其他内容。

    问题:被 Ubuntu 中的网络管理器覆盖!

    补救措施:作为真根(!)聊天室文件 /etc/resolv.conf

    chattr +i /etc/resolv.conf

    这是暴力破解,可能会通过解析禁用自动 DNS 缓存。

归功于Arch 文档

然而,工作正常;-)但需要作为真正的根进行手动维护!

提示:

建议您创建resolv.conf一个链接。这是解决正常工作所必需的。当 sudo-root 移走旧文件时

sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

我不喜欢这种方式但本质上它是正常工作的。

然后重启。或者重启网络。

如何检查

  1. 一些基本检查:

检查 systemd-resolved 实际使用的 DNS:

resolvectl status

使用 resolvectl 检查 DNS 是否解析:

resolvectl query archlinux.org 

(尝试一些例子)

检查实际使用的 DNS,检查 VPN 中是否存在泄漏:

https://dnsleaktest.com/

. 2. 启动 Wireshark 并过滤“端口 53”并进行网络流量。

这应该不再显示端口 53 上的连接。然后过滤端口 853。这里应该有很多事情要做。

重要提示:如果所有流量都使用端口 853,且没有流量使用端口 53,则表示您已成功完成!

Wireshark 示例这里

备注:我尝试了 stubby。stubby 在 Ubuntu 中集成得不是很好,但即使使用 NetworkManager 也可以让它工作。有一个手册可以成功完成此操作: 如何在 Ubuntu Linux 上使用 DNS-over-TLS 问题:性能有点问题。有些奇怪,但我还没找到原因。

现在就可以在 /etc/systemd/resolved.conf 中启用 DNSSEC=yes。

重要的:

这个解决方案大大提高了隐私性。

但是,如果您的个人诚信取决于数据隐私和安全,那么这还不够!请参阅已解决描述中的注意事项。仅有机会模式是不够的。那么最好小心 Tails Linux。向全世界所有政治犯致以悲伤的问候。


可通过 TOR URL 获取此更新版本(仅限德语​​): http://mutant21.onastroidst6krpn.onion/schweinekraftland/DNS_sicherer_machen/sicherer%20surfen%20und%20mailen%20mit%20gesichertem%20DNS.htm

答案3

只是要确定:

  • 1.1.1.1 使用端口 853 进行 DoT(DnsOverTLS),请参阅以下页面https://1.1.1.1/
  • systemd-resolved 自动使用端口
  • 记得打开防火墙上的端口(重要)

我仍然使用 shell 命令,使用“ifconfig”或“ip”来打开/关闭接口并设置路由,使用“netstat”和“ss”进行监控等等,没有 systemd-networkd、network-manager 或 netplan。您只需禁用 systemd-* 软件包或删除软件包,即可按照您想要的方式运行系统,因为这样做没有任何障碍。

但是如果你想尝试新的视野并从不同的角度看世界,以防万一你正在配置一台台式机(不是工作站也不是服务器),并且你有一个配置良好的防火墙,所有这些都是使用 shell 脚本功能手动完成的(因为你可以)并且你也知道你的 tcp 标志,何时以及如何允许 PSH 和 URG,并且你还知道 sysctl 选项并且不怕用它来对付敌人,只有这样,你才能在浏览器中使用 Firefox 实现 DoH 客户端,你可以在配置>常规>网络配置中找到它,并与 nextdns 结合使用,并且你也可以完全禁用 UDP 和 systemd-resolved 并让 tcp 在你的台式机上工作...哦,天哪,纯粹的幸福......或者差不多。

答案4

IP 46.182.19.48 和 2a02:2970:1002::18 已弃用。Digitalcourage 推出了一款新的 DNS-over-TLS 专用服务器,IP 为 5.9.164.112(同样受速率限制)

https://dns3.digitalcourage.de或者https://digitalcourage.de/support/zensurfreier-dns-server详情请见(德语)

相关内容