我尝试通过 启用 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-resolved
DNS 隐私项目的建议。
尽管@意见-no9提供了一个针对 Ubuntu 18.04 的特定解决方案(受 LTS 附带的 systemd 版本限制),我想分享一个更通用且接近上游的解决方案:
背景介绍 - DNS over TLS 支持时间表systemd
- 236 DNSSEC 支持 RFC 8080(
ed25519
密钥和签名) - 239现在默认
systemd-resolved
支持opportunistic
DNS-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 发行版
- 编辑
/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
- 假设
systemd-resolved
已启用,重新启动服务
systemctl restart systemd-resolved.service
- 使用本地存根解析器
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):
在/etc/systemd/resolved.conf 仅将 DNSOverTLS 设置更改为
DNSOverTLS=机会主义
没有其他选择(请参阅此处的解释:基于 TLS 的 DNS
使用功能强大的 DNS 服务器。我更喜欢数字勇气服务器
46.182.19.48分别2a02:2970:1002::18
为什么?因为隐私!
这应该在通过 GUI 进行网络管理!
在 IPv4 设置/DNS 服务器和 v6 下的连接的 GUI 字段中分别输入 DNS 服务器地址。
条目不会显示在
/etc/resolv.conf
!! 中,这是正确的。相反,您将看到名称服务器 127.0.0.53这是新的 Ubuntu....不再适合业余管理员。
不推荐但可行选择
可以直接按照
/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
我不喜欢这种方式但本质上它是正常工作的。
。
然后重启。或者重启网络。
。
如何检查
- 一些基本检查:
检查 systemd-resolved 实际使用的 DNS:
resolvectl status
使用 resolvectl 检查 DNS 是否解析:
resolvectl query archlinux.org
(尝试一些例子)
检查实际使用的 DNS,检查 VPN 中是否存在泄漏:
. 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详情请见(德语)