本文介绍在Ubuntu 18.04系统上安装Stubby的方法,并且使用Stubby来保护你的DNS隐私。内容包括切换到Stubby、更改DNS服务器、检查你的DNS流量是否加密、将CloudFlare DNS添加到Stubby。
在Ubuntu 18.04桌面上安装和使用Stubby Stubby在Ubuntu 18.04存储库中,打开终端窗口并运行以下命令进行安装: sudo apt install stubby 这将安装stubby和getdns库,安装后,stubby在后台运行,运行systemctl status stubby命令可检查它的状态:
Stubby侦听localhost(127.0.0.1)的TCP和UDP端口53,运行此命令可以看到: sudo netstat -lnptu | grep stubby
systemd-resolved提供的默认存根解析器侦听127.0.0.53的TCP和UDP端口53: sudo netstat -lnptu | grep systemd-resolve
注意:如果dnsmasq正在侦听127.0.0.1的TCP端口53,那么Stubby将仅侦听127.0.0.1的UDP端口53。 主配置文件是/etc/stubby/stubby.yml,通常,除非你想使用另一个或你自己的递归解析器,否则无需对其进行更改,我来解释一些默认配置,可以使用以下命令打开文件: sudo nano /etc/stubby/stubby.yml 以下行使得stubby作为存根解析器而不是完整的递归解析器运行,这就是为什么它被命名为stubby: resolution_type: GETDNS_RESOLUTION_STUB 以下配置使用TLS加密的DNS查询,它不会以纯文本形式发送quries: dns_transport_list: - GETDNS_TRANSPORT_TLS 以下行需要远程递归解析程序上的有效TLS证书: tls_authentication: GETDNS_AUTHENTICATION_REQUIRED 以下行设置了stubby守护程序的监听地址,默认情况下,IPv4和IPv6都已启用: listen_addresses: - 127.0.0.1 - 0::1 禁用IPv6参考:在Linux服务器上禁用IPv6的方法。 以下行以循环方式生成粗短查询递归解析器,如果设置为0,Stubby将按顺序使用每个上游服务器,直到它变为不可用,然后继续使用下一个: round_robin_upstreams: 1 默认情况下,在stubby配置文件中启用了3个递归解析器,运行DNS over TLS: dnsovertls.sinodun.com 145.100.185.15 dnsovertls1.sinodun.com 145.100.185.16 getdnsapi.net 185.49.141.37 “附加服务器”部分中还有其他DNS服务器,默认情况下处于禁用状态: dns.quad9.net unicast.censurfridns.dk dnsovertls3.sinodun.com (supporting TLS1.2 and TLS 1.3) dnsovertls2.sinodun.com dns.cmrg.net dns.larsdebruin.net ...... 还有DNS服务器在端口443上侦听,如果网络中的端口853被阻止,可以取消注释它们以使用这些服务器: dnsovertls.sinodun.com dnsovertls1.sinodun.com dns.cmrg.net dns.neutopia.org 现在,可以按Ctrl+X退出nano文本编辑器。
切换到Stubby 不建议再编辑/etc/resolve.conf文件来更改名称服务器,按照以下说明进行systemd-resolved向DNS发送DNS查询。 1、GNOME桌面 单击桌面右上角的“网络管理器”图标,然后选择有线设置(如果使用的是Wi-Fi,请选择Wi-Fi设置):
单击齿轮按钮:
选择IPv4选项卡,然后在DNS设置中,将自动切换为关闭,这将阻止你的Ubuntu系统从你的路由器获取DNS服务器地址,在DNS字段中输入127.0.0.1,单击“应用”按钮以保存更改:
然后重新启动NetworkManager以使更改生效: sudo systemctl restart NetworkManager 重新连接后,你可以看到你的Ubuntu系统现在使用127.0.0.1作为详细信息选项卡中的DNS服务器:
2、Unity桌面 参考:在Ubuntu 18.04系统中安装Unity桌面环境的方法。 单击桌面右上角的“网络管理器”图标,然后单击“编辑连接”:
选择你的连接名称,然后单击齿轮图标:
选择IPv4设置选项卡,仅将方法从自动(DHCP)更改为自动(DHCP)地址,这将阻止你的Ubuntu系统从你的路由器获取DNS服务器地址,然后指定DNS服务器(127.0.0.1),Stubby在127.0.0.1上:
保存更改,然后重新启动NetworkManager以使更改生效: sudo systemctl restart NetworkManager 重新连接后,再次单击“网络管理器”图标并选择连接信息,可以看到你的Ubuntu系统现在使用127.0.0.1作为DNS服务器:
更改DNS服务器 只有桌面环境使用NetworkManager时,才能使用以下方法更改DNS服务器。 打开终端窗口并转到Network Manager连接配置文件目录: cd /etc/NetworkManager/system-connections/ 然后列出系统上可用的连接名称: ls
如你所见,我的系统上有多个连接,其中一个是有线连接,一些是无线连接,一个是VPN连接,因为我的桌面计算机通过以太网电缆连接到我的路由器,所以我需要使用nano命令行文本编辑器编辑有线连接配置文件: sudo nano 'Wired connection 1' 如果计算机通过Wi-Fi连接,则需要编辑无线连接配置文件,在此文件中,找到[ipv4]配置,默认情况下,它应如下所示: [ipv4] dns-search= method=auto 要使系统使用Stubby,请将配置更改为以下内容: [ipv4] dns=127.0.0.1; dns-search= ignore-auto-dns=true method=auto 要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认,按Ctrl+X退出,然后重新启动网络管理器以使更改生效: sudo systemctl restart NetworkManager 现在可以通过运行以下命令来检查当前的DNS服务器: systemd-resolve --status 输出内容如下: Link 2 (enp5s0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 127.0.0.1 如果将127.0.0.1列为DNS服务器,则表示你的系统正在使用Stubby。
检查你的DNS流量是否加密 我们可以使用WireShark来监控DNS流量,从Ubuntu 18.04存储库安装WireShark: sudo apt install wireshark 参考:在Ubuntu 18.04桌面系统上安装Wireshark的方法。 如果系统询问“Should non-superusers be able to capture packets?”,请回答“Yes”。安装完成后,运行以下命令将你的用户帐户添加到wireshark组,以便你可以捕获数据包: sudo adduser your-username wireshark 注销并重新登录以使更改生效,然后从应用程序菜单中打开WireShark,在WireShark中选择你的网络接口,例如,我的以太网接口名称是enp5s0,然后输入端口853作为捕获过滤器,这将使WireShark仅捕获端口853上的流量,端口853是DNS通过TLS使用的端口:
单击左上角的按钮开始捕获,之后,在终端窗口中,运行以下命令,使用dig实用程序查询域名,例如,可以查询下面域名的A记录: dig A linuxbabe.com(如果需要查询云网牛站的,则运行dig A ywnz.com) 现在,可以在WireShark中查看捕获的DNS流量,我的DNS查询已发送到185.49.141.37、145.100.185.15和145.100.185.16,这是在stubby配置文件中定义的3个默认DNS解析器,连接是通过TCP进行的,并使用TLS加密:
如果在没有加密的情况下发送DNS查询,则计算机将联系端口53上的DNS服务器,可以使用端口53作为捕获过滤器再次捕获数据包,但在WireShark中你将看不到任何数据包,这意味着存根正在加密你的DNS查询。
将CloudFlare DNS添加到Stubby 我发现我的计算机和3个默认DNS服务器之间存在高延迟(超过200毫秒),而CloudFlare DNS服务器(1.1.1.1,1.0.0.1)给我的延迟非常低(低于20毫秒),CloudFlare还支持DNS over TLS,要添加CloudFlare DNS服务器,请编辑stubby配置文件: sudo nano /etc/stubby/stubby.yml 向下滚动到upstream_recursive_servers:部分,并在其他DNS服务器上方添加以下文本: #CloudFlare servers - address_data: 1.1.1.1 tls_auth_name: "cloudflare-dns.com" - address_data: 1.0.0.1 tls_auth_name: "cloudflare-dns.com" 然后找到以下行: round_robin_upstreams: 1 将1更改为0,如果CloudFlare不可用,则stubby将使用其他DNS服务器,保存文件并重新启动stubby以使更改生效: sudo systemctl restart stubby 至此,操作完成,希望本文能帮助你保护Ubuntu 18.04上的DNS隐私。
相关主题 |