本文将演示如何使用systemd-resolved在Fedora操作系统上通过TLS配置DNS。
前言 现代计算机用来在Internet上查找资源的域名系统(DNS)是很旧以前设计的,没有考虑用户隐私,它面临安全风险和DNS劫持之类的攻击,它还允许ISP拦截查询。 幸运的是,可以使用基于TLS的DNS和DNSSEC。TLS和DNSSEC上的DNS允许创建从计算机到其配置的DNS服务器的安全且加密的端到端隧道,在Fedora操作系统上,实现这些技术的步骤很容易,并且所有必要的工具也很容易获得。
步骤1:设置systemd-resolved 修改/etc/systemd/resolved.conf,使其类似于以下所示,确保启用基于TLS的DNS并配置要使用的DNS服务器的IP地址: $ cat /etc/systemd/resolved.conf [Resolve] DNS=1.1.1.1 9.9.9.9 DNSOverTLS=yes DNSSEC=yes FallbackDNS=8.8.8.8 1.0.0.1 8.8.4.4 #Domains=~. #LLMNR=yes #MulticastDNS=yes #Cache=yes #DNSStubListener=yes #ReadEtcHosts=yes 关于选项的简要说明: DNS:以空格分隔的IPv4和IPv6地址列表,用作系统DNS服务器。 FallbackDNS:用作后退DNS服务器的IPv4和IPv6地址的空格分隔列表。 Domains:解析单标签主机名~时,这些域用作搜索后缀,代表使用DNS= 定义的系统DNS服务器,最好用于所有域。 DNSOverTLS:如果为true,则将加密与服务器的所有连接。请注意,此模式要求DNS服务器支持TLS上的DNS,并具有其IP的有效证书。 注意:上面示例中列出的DNS服务器是我个人的选择,您应该确定要使用的DNS服务器。
步骤2:使NetworkManager将信息推送到systemd-resolved 在/etc/NetworkManager/conf.d中创建一个名为10-dns-systemd-resolved.conf的文件: $ cat /etc/NetworkManager/conf.d/10-dns-systemd-resolved.conf [main] dns=systemd-resolved 上面显示的设置(dns=systemd-resolved)使NetworkManager将从DHCP获得的DNS信息推送到systemd-resolved服务,这将覆盖在步骤1中配置的DNS设置,这在受信任的网络上很好,但是可以设置dns=none来使用/etc/systemd/resolved.conf中配置的DNS服务器。 参考:设置NetworkManager以共享Internet连接,及配置高级功能。
第三步:启动和重启服务 要使前面步骤中配置的设置生效,请启动并启用systemd-resolved,然后重新启动NetworkManager。 注意:重新启动NetworkManager时,这将导致失去连接几秒钟: $ sudo systemctl start systemd-resolved $ sudo systemctl enable systemd-resolved $ sudo systemctl restart NetworkManager 注意:当前,默认情况下禁用systemd解析的服务,并且该服务的使用是可选的,不过在Fedora 33中有计划默认启用systemd-resolved。
步骤4:检查一切是否正常 现在,您应该使用基于TLS的DNS,通过使用以下方法检查DNS解析状态来确认这一点: $ resolvectl status 如下图所示:
/etc/resolv.conf应指向127.0.0.53: $ cat /etc/resolv.conf # Generated by NetworkManager search lan nameserver 127.0.0.53 要查看systemd-resolved正在发送和接收安全查询的地址和端口,请运行: $ sudo ss -lntp | grep '\(State\|:53 \)'
要进行安全查询,请运行: $ resolvectl query fedoraproject.org
步骤5:使用Wireshark验证配置 首先,安装并运行Wireshark: $ sudo dnf install wireshark $ sudo wireshark 它将询问您必须在哪个链接设备上开始捕获数据包,就我而言,因为我使用无线接口,所以我将继续使用wlp58s0,在Wireshark中设置一个过滤器,例如tcp.port == 853(853是TLS协议端口上的DNS),您需要先刷新本地DNS缓存,然后才能捕获DNS查询: $ sudo resolvectl flush-caches 现在运行: $ nslookup fedoramagazine.org 您应该在计算机和配置的DNS服务器之间看到经过TLS加密的交换,如下图:
相关主题 |