使用 systemd 解析的基于 TLS 的 DNS

Fer*_*ont 12 networking dns systemd-resolved

我试图通过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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ter*_*ang 7

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

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

一点背景 - DNS over TLS 支持的时间表 systemd

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

不好了!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 utils 等的通用 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)
  1. 假设systemd-resolved已启用,重启服务
systemctl restart systemd-resolved.service
Run Code Online (Sandbox Code Playgroud)
  1. 使用本地存根解析器

systemd-resolved在本地环回接口上的 IP 地址 127.0.0.53 上提供本地 DNS 存根侦听器,因此要使用 DNS over TLS 存根解析器,我们需要以某种方式管理/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
Run Code Online (Sandbox Code Playgroud)

注意:对于 Arch Linux,我必须替换openresolvconfsystemd-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
Run Code Online (Sandbox Code Playgroud)

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

tcpdump -tttt -nn -XX -vv -i <interface> dst 1.1.1.1 and port 853
Run Code Online (Sandbox Code Playgroud)

结论

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

参考


opi*_*no9 6

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

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

由于 Ubuntu 18+ 将Netplan与 NetworkManager 并行使用,事情发生了巨大变化:
不再以传统方式进行手动配置;-( 文档.... 稀疏。

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

有关 Netplan 的信息,请查看此处

什么 DNS-over-TLS 工作成功(works4me):

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

    DNSOverTLS=机会主义

    没有其他选项(请参阅此处的说明:DNS over TLS

  2. 使用功能强大的 DNS 服务器。我更喜欢Digitalcourage服务器

    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 中被网络管理器覆盖!

    补救措施:作为真正的 root (!) chattr文件 /etc/resolv.conf

    chattr +i /etc/resolv.conf

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

归功于Arch 文档

但是,工作正常 ;-) 但需要以真正的 root 身份手动维护!

提示:

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

sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

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

.

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

.

如何检查

  1. 一些基本检查:

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

resolvectl status
Run Code Online (Sandbox Code Playgroud)

检查 DNS 是否使用 resolvectl 解析:

resolvectl query archlinux.org 
Run Code Online (Sandbox Code Playgroud)

(尝试一些例子)

检查实际使用的 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 网址:http : //mutant21.onastroidst6krpn.onion/schweinekraftland/DNS_sicherer_machen/sicherer%20surfen%20und%20mailen%20mit%20gesichertem%20DNS.htm