• 在Ubuntu 20.04/18.04上保护你的DNS隐私(DNS over TLS)

    本教程将向您展示如何使用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系统解决方案 注意:如果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。 解析类型: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隐私。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。

    2022.03.23 浏览:796