在Ubuntu 20.04/18.04上保护你的DNS隐私(DNS over TLS)
- 技术文档
- 2022.03.23
- 浏览:797
文章目录[隐藏]
本教程将向您展示如何使用DNS over TLS在Ubuntu 20.04/18.04桌面上保护您的DNS隐私。我们将使用名为stubby的工具来实现这一点。但首先,让我告诉你为什么DNS不安全。
DNS漏洞
DNS是不安全的,因为默认情况下,DNS查询未加密,中间实体可能会利用它进行攻击。DNS缓存毒药是中国防火长城(GFW)广泛用于审查中国互联网的DNS滥用之一。GFW检查发送到中国境外DNS服务器的每个DNS查询。由于纯文本DNS协议基于UDP,这是一种无连接协议,GFW可以欺骗客户端IP和服务器IP。当GFW在其阻止列表中找到域名时,它会更改DNS响应。例如,如果一个中国互联网用户想要访问谷歌。com,中国的防火长城向DNS解析程序返回位于中国的IP地址,而不是谷歌的真实IP地址。然后DNS解析程序将假IP地址返回给用户的计算机。
什么是通过TLS的DNS?它如何保护你的隐私?
DNS over TLS意味着DNS查询是通过使用TLS加密的安全连接发送的,这与加密HTTP流量的技术相同,因此第三方无法看到您的DNS查询。与HTTPS和加密的SNI(服务器名称指示)一起,您的浏览历史记录将完全免受ISP的监视。
Stubby是由getdns团队开发的开源DNS存根解析器。它使用getdns库。存根解析器是终端用户计算机上的一个小型DNS客户端,它接收来自Firefox等应用程序的DNS请求,并将请求转发给递归解析器,如1.1.1.1或8.8.8.8。Stubby的特殊之处在于它支持TLS上的DNS。默认情况下,它只发送加密的DNS请求。还有另一个开源的存根解析器cloudflared,它支持HTTPS上的DNS,但stubby已经存在于Ubuntu20.04/18.04存储库中,非常容易使用。
如何在Ubuntu 20.04/18.04桌面上安装和使用Stubby
Stubby位于Ubuntu 20.04/18.04存储库中。打开一个终端窗口并运行以下命令来安装它。
sudo-apt-install-stubby
这将安装stubby和getdns库。安装后,stubby将在后台运行。您可以通过以下方式检查其状态:
systemctl状态存根
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系统解决方案
主配置文件是/etc/stubby/stubby。yml。通常不需要对其进行更改,除非您想使用另一个或您自己的递归解析器。让我解释一些默认配置。您可以通过以下方式打开文件:
sudo nano/etc/stubby/stubby。yml
下一行使stubby作为存根解析器而不是完全递归解析器运行,这就是为什么它被命名为stubby。
解析类型:GETDNS解析存根
以下配置使stubby发送使用TLS加密的DNS查询。它不会以明文形式发送质询。
dns_传输_列表:-获取dns_传输_TLS
下面这一行需要远程递归解析器上的有效TLS证书。
tls_身份验证:需要GETDNS_身份验证
以下几行设置stubby守护程序的侦听地址。默认情况下,IPv4和IPv6都已启用。
监听地址:-127.0.0.1-0::1
下面一行以循环方式生成短截图查询递归解析器。如果设置为0,Stubby将按顺序使用每个上游服务器,直到它变得不可用,然后继续使用下一个。
循环上游:1
默认情况下,stubby配置文件中启用了3个递归解析器。它们由stubby开发者运行,支持TLS上的DNS。你可以在DNS隐私网站上看到推荐服务器的完整列表。
dnsovertls。中国盾。com 145.100.185.15 dnsovertls1。中国盾。com 145.100.185.16 getdnsapi。净额185.49.141.37
“附加服务器”部分中还有其他默认禁用的DNS服务器。
dns。第九节。网络单播。切努弗林斯。dk dnsovertls3。中国盾。com(支持TLS1.2和TLS1.3)dnsovertls2。中国盾。com域名解析。cmrg。net dns。拉斯德布林。网
也有DNS服务器监听端口443。如果网络中的端口853被阻止,您可以取消对它们的注释以使用这些服务器。
dnsovertls。中国盾。com dnsovertls1。中国盾。com域名解析。cmrg。net dns。纽托皮亚。组织
现在,按Ctrl+X可以退出nano文本编辑器。
切换到Stubby
编辑/etc/resolve。不再建议使用conf文件更改服务器名称。按照下面的说明,使systemd resolved向stubby发送DNS查询。
GNOME桌面
单击桌面右上角的网络管理器图标。然后选择有线设置。(如果您使用的是Wi-fi,请选择Wi-fi设置。)
点击齿轮按钮。
选择IPv4选项卡,然后在DNS设置中,将自动切换到OFF,这将阻止Ubuntu系统从路由器获取DNS服务器地址。在DNS字段中输入127.0.0.1。单击应用按钮保存更改。
然后重新启动NetworkManager,使更改生效。
sudo systemctl重新启动NetworkManager
一旦你重新连接,你可以看到你的Ubuntu系统现在使用127.0.0.1作为详细信息选项卡中的DNS服务器。
统一桌面
推荐阅读:如何在Ubuntu 20.04/18.04上安装Unity桌面环境。
单击桌面右上角的网络管理器图标,然后单击编辑连接。
选择连接名称,然后单击齿轮图标。
选择IPv4设置选项卡,将方法从自动(DHCP)更改为仅自动(DHCP)地址,这将阻止Ubuntu系统从路由器获取DNS服务器地址。然后指定DNS服务器(127.0.0.1)。斯塔比在127.0.0.1上收听。
保存更改。然后重新启动NetworkManager,使更改生效。
sudo systemctl重新启动NetworkManager
重新连接后,再次单击网络管理器图标并选择连接信息。你可以看到你的Ubuntu系统现在使用127.0.0.1作为DNS服务器。
从命令行更改DNS服务器
只要桌面环境使用NetworkManager,就可以使用以下方法更改DNS服务器。
打开终端窗口,进入网络管理器连接配置文件目录。
cd/etc/NetworkManager/系统连接/
然后列出系统上可用的连接名称。
ls
如你所见,我的系统上有几个连接,其中一个是有线连接。一些是无线连接,一个是VPN连接。因为我的台式计算机通过以太网电缆连接到路由器,所以我需要使用nano命令行文本编辑器编辑有线连接配置文件。
sudo nano“有线连接1”
如果您的电脑是通过Wi-fi连接的,则需要编辑无线连接配置文件。在此文件中,找到[ipv4]配置。默认情况下,它应该如下所示:
[ipv4]dns搜索=方法=自动
要使系统使用Stubby,请将配置更改为以下内容。
[ipv4]dns=127.0.0.1;dns搜索=忽略自动dns=真方法=自动
要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。按Ctrl+X退出。然后重新启动Network Manager,使更改生效。
sudo systemctl重新启动NetworkManager
现在,您可以通过运行以下命令来检查当前DNS服务器:
系统解析——状态
样本输出:
链路2(enp5s0)当前作用域:DNS LLMNR设置:是多播DNS设置:无DNSSEC设置:不支持DNSSEC:无DNS服务器:127.0.0.1
如果127.0.0.1被列为DNS服务器,那么您的系统正在使用Stubby。
忽略DHCP服务器提供的DNS设置
如果使用Ubuntu server edition,可以将systemd配置为忽略DHCP服务器提供的DNS设置,这样系统就不会意外使用错误的DNS服务器。
首先,检查网络接口的状态。
网络控制状态enp5s0
它将显示此接口的网络文件。编辑此网络文件。
sudo nano/run/systemd/network/10-netplan-enp5s0。网络
找到[DHCP]部分并添加以下行。
UseDNS=false
这样地:
[DHCP]RouteMetric=100 UseMTU=true UseDNS=false
保存并关闭文件。然后重新启动systemd Networkd。为变更生效提供服务。
sudo systemctl重启systemd networkd
运行以下命令检查每个网络接口的DNS服务器。如果一切正常,您将无法看到DHCP服务器提供的DNS服务器。
解析CTL状态
网络文件中的更改可以由新的软件包更新覆盖。如果服务器使用netplan管理网络连接,还可以将netplan配置为忽略DHCP DNS设置。
sudo nano/etc/netplan/50 cloud init。亚马尔
将以下两行添加到文件中。
dhcp4覆盖:使用dns:否
这样地:
网络:ethernets:eth0:dhcp4:true dhcp4覆盖:使用dns:no可选:true set name:eth0 nameservers:search:[无效]地址:127.0.0.1版本:2
保存并关闭文件。然后应用更改。
sudo网络计划申请
如何检查DNS流量是否加密
我们可以使用WireShark监控DNS流量。从Ubuntu 20.04/18.04存储库安装WireShark。
sudo apt安装wireshark
如果您被问到“非超级用户是否应该能够捕获数据包?”,回答是的。安装后,运行以下命令将用户帐户添加到wireshark组,以便捕获数据包。
sudo adduser你的用户名wireshark
注销并重新登录以使更改生效。然后从应用程序菜单中打开WireShark,在WireShark中选择网络接口。例如,我的以太网接口名是enp5s0。然后输入端口853作为捕获过滤器。这将使WireShark仅捕获端口853上的流量,该端口是DNS通过TLS使用的端口。
单击左上角的按钮开始捕获。之后,在终端窗口中,使用dig实用程序运行以下命令来查询域名。例如,我可以查询我的域名的A记录。
挖一个利努克斯宝贝。通用域名格式
现在,您可以在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中看不到任何数据包,这意味着stubby正在加密您的DNS查询。
如何将CloudFlare DNS添加到Stubby
我发现我的计算机和3个默认DNS服务器之间有很高的延迟(超过200毫秒),而CloudFlare DNS服务器(1.1.1.1、1.0.0.1)的延迟非常低(低于20毫秒)。CloudFlare还支持TLS上的DNS。要添加CloudFlare DNS服务器,请编辑stubby配置文件。
sudo nano/etc/stubby/stubby。yml
向下滚动到upstream_recursive_servers:部分,并在其他DNS服务器上方添加以下文本。
#CloudFlare服务器-地址数据:1.1.1.1 tls_认证名称:“CloudFlare dns.com”-地址数据:1.0.0.1 tls_认证名称:“CloudFlare dns.com”
然后找到以下行:
循环上游:1
将1更改为0。这将使stubby始终使用CloudFlare DNS服务器。如果CloudFlare不可用,stubby将使用其他DNS服务器。保存文件并重新启动stubby以使更改生效。
sudo systemctl重启stubby
DNS over HTTPS支持
Stubby将在0.3版中支持HTTPS上的DNS。Ubuntu 20.10附带了0.2.6版。要检查Stubby版本,请运行
斯塔比V
收尾
我希望本教程能帮助你在Ubuntu20.04/18.04上使用DNS over TLS保护你的DNS隐私。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。