云网牛站
所在位置:首页 > Linux安全 > 在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

2019-03-21 11:46:26作者:浦洪稿源:云网牛站

本文介绍在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命令可检查它的状态:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

Stubby侦听localhost(127.0.0.1)的TCP和UDP端口53,运行此命令可以看到:

sudo netstat -lnptu | grep stubby

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

systemd-resolved提供的默认存根解析器侦听127.0.0.53的TCP和UDP端口53:

sudo netstat -lnptu | grep systemd-resolve

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

注意:如果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设置):

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

单击齿轮按钮:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

选择IPv4选项卡,然后在DNS设置中,将自动切换为关闭,这将阻止你的Ubuntu系统从你的路由器获取DNS服务器地址,在DNS字段中输入127.0.0.1,单击“应用”按钮以保存更改:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

然后重新启动NetworkManager以使更改生效:

sudo systemctl restart NetworkManager

重新连接后,你可以看到你的Ubuntu系统现在使用127.0.0.1作为详细信息选项卡中的DNS服务器:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

2、Unity桌面

参考:在Ubuntu 18.04系统中安装Unity桌面环境的方法

单击桌面右上角的“网络管理器”图标,然后单击“编辑连接”:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

选择你的连接名称,然后单击齿轮图标:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

选择IPv4设置选项卡,仅将方法从自动(DHCP)更改为自动(DHCP)地址,这将阻止你的Ubuntu系统从你的路由器获取DNS服务器地址,然后指定DNS服务器(127.0.0.1),Stubby在127.0.0.1上:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

保存更改,然后重新启动NetworkManager以使更改生效:

sudo systemctl restart NetworkManager

重新连接后,再次单击“网络管理器”图标并选择连接信息,可以看到你的Ubuntu系统现在使用127.0.0.1作为DNS服务器:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

 

更改DNS服务器

只有桌面环境使用NetworkManager时,才能使用以下方法更改DNS服务器。

打开终端窗口并转到Network Manager连接配置文件目录:

cd /etc/NetworkManager/system-connections/

然后列出系统上可用的连接名称:

ls

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

如你所见,我的系统上有多个连接,其中一个是有线连接,一些是无线连接,一个是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使用的端口:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

单击左上角的按钮开始捕获,之后,在终端窗口中,运行以下命令,使用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加密:

在Ubuntu 18.04系统上安装Stubby并使用它保护你的DNS隐私

如果在没有加密的情况下发送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服务器,请编辑st​​ubby配置文件:

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隐私。

 

相关主题

使用BIND9在Ubuntu 18.04上设置本地DNS解析器

精选文章
热门文章