Article / 文章中心

如何在边缘侧利用DNS缓存来加速家用网络

发布时间:2022-03-31 点击数:483

译者 | 范晓波

审校 | 孙淑娟 梁策

如果你在过去几年里已经听说了很多关于“云”的讨论,那么你可能也听说过关于“边缘侧”一些相关概念。

编辑搜图

从边缘计算的概念可以看出云是有边界的。要连接到云的这些边界,你的数据必须与云提供的物理数据中心之一连接。在一些配置下,将数据从用户计算机传输到服务器群集可能很快,但它对地理位置和网络结构的依赖程度很大。云本身可以尽可能快速和强大,但它无法抵消你的数据进行往返所需的时延。

答案就是使用区域网络和云的边缘侧。当在边缘的服务器上进行初始化服务或计算时,它会加快用户与云的交互速度。

根据同样的原理,你可以通过在家用服务器上运行一些服务来创建自己的边缘侧,以最大限度地减少往返时延。不要让特殊术语吓到你。边缘计算可能像物联网设备或运行一个服务连接到联邦服务颇为特别有用且简单的改变,你就可以使你的家用或企业网络性能得到增强,即运行DNS缓存服务。

什么是域名解析?

域名系统(DNS)使我们能够将服务器的IP地址转换为像opensource.com这样友好的网站名称,无论他们是上云服务还是没有上云的服务。

每个域名的背后都是一串数字,而名字是来方便人们的,因为他们更有可能记住几个单词,而不是一串数字。当你在Web浏览器中键入example.com内容时,Web浏览器会静默地通过端口53向 DNS 服务器发送请求,去引用域名example.com的注册地址,然后返回根据该域名分配的最后一个已知IP地址。

这是从你的计算机到互联网的一次往返。

有了正确的IP地址,你的Web浏览器就会发出第二个请求,这次是用IP地址而不是用域名直接访问你的目的地址。

这是另一次往返。

更糟糕的是,你的计算机(和你的配置有关)也可能会向你本地网络上指定DNS服务器发送域名请求。

你可以使用本地缓存切断所有这些额外的流量。在你的网络上运行DNS缓存服务时,一旦你网络上的任何一台设备获得一个域名对应的IP地址,该IP地址就会被存储在本地,因此你的网络就不再需要再次请求这个地址;此外,运行你自己的DNS缓存服务器还可以屏蔽广告,而且通常也能用一些互联网的一些底层技术控制你的网络上的任何设备进行交互。

在Linux上安装Dnsmasq

使用包管理器安装 Dnsmasq

在 Fedora、CentOS、Mageia 和类似系统上:

安装命令:

复制
$ sudo dnf install dnsmasq dnsmasq-utils1.

在Debian和基于Debian的系统上,请使用apt方式代替dnf。

配置Dnsmasq

Dnsmasq的默认配置文件中有许多选项。

它的默认配置文件的位置在/etc/dnsmasq.conf下,注释很完善。因此你可以通过阅读它,选择适合你网络的配置。

以下是我喜欢的一些选项。

保存你的本地域在本地:

复制
#不转发纯名称(没有点分格式或部分域名)domain-needed#不转发非路由地址空间中的地址bogus-priv1.2.3.4.

忽略来自常见广告网站的内容。以下语法将第一个正斜杠之间的字符串替换为尾部的地址:

复制
#替换广告网站域名用一个没有广告的ip地址address=/double-click.net/127.0.0.11.2.

设置缓存大小。默认建议是150,但我不觉得150个网站足够。

复制
#替换广告网站域名用一个没有广告的ip地址address=/double-click.net/127.0.0.11.2.

查找 resolve.conf

在大多数 Linux 系统上,systemd的reslved服务管理配置文件/etc/resolv.conf,该文件控制你的计算机可以访问哪些DNS服务器进行IP地址解析。

您可以禁用resolved并单独运行dnsmasq,也可以同时运行它们,指向其自己的解析文件。

复制
禁用:resolved$ sudo systemctl disable --now systemd-resolved1.2.

或者,同时运行它们:

在这个示例中,home.local是我给定的一个要么是DHCP,要么是本地的域名,所有的这些设备都在我的家用网络里,enterprise 和 yorktown是我的家用服务器,通过在此处列出它们及其本地IP地址,我就能借助dnsmasq通过域名连接他们。最后,这些域名服务项目指向互联网上已知的比较好的域名服务器。你可以使用此处列出的名称服务器,也可以使用ISP提供的域名服务器或你喜欢的任何公共域名服务器。

在你的dnsmasq.conf文件中,设置resolv-file的值为resolvmasq.conf:

复制
resolv-file=/etc/resolvmasq.conf1.

启动dnsmasq

某些发行版可以安装后自动启动dnsmasq。别的版本当你准备好的时候,你可以自己启动它。无论哪种方式,你都可以使用 systemd 启动dnsmasq服务:

复制
$ sudo systemd enable --now dnsmasq1.

使用dig命令对其进行测试。

当你首次联系服务器时,查询时间可能在50到500毫秒之间(希望不超过此时间):

复制
$ dig example.com | grep Query\ time;; Query time: 56 msec1.2.

然而,下次尝试时,查询时间会大大减少:

复制
$ dig example.com | grep Query\ time;; Query time: 0 msec1.2.

结果好多了!

为你的整个网络启用 dnsmasq

Dnsmasq在一台设备上就已是很有用的工具,如果你能让网络上的所有设备都使用它那只会更好。

以下是怎样开放dnsmasq服务给你的全部本地网络的方法:

获取运行dnsmasq服务的服务器的 IP 地址

在运行的计算机上运行dnsmasq,获取本地 IP 地址:

复制
$ dig example.com | grep Query\ time;; Query time: 0 msec1.2.

在这个示例中,我运行dnsmasq的树莓派的IP地址是 10.0.170.170。由于树莓派现在是我的网络结构的重要组成部分,因此我让它的地址是由我的 DHCP 路由器静态分配。如果我允许它获得一个动态的IP地址,它可能不会改变(DHCP被设计成以这种方式提供帮助),但如果它这样做,那么我的整个网络将不能使用dnsmasq提供优化。

修改服务器的防火墙以允许端口53上的流量

使用 firewall-cmd打开你的服务器防火墙中的端口,以便它允许 DNS 请求和发送响应。

复制
$ sudo firewall-cmd --add-service dns --permanent1.

将服务器的IP地址添加到你家用路由器的域名服务项中。

知道了我的本地DNS服务器的地址是10.0.170.170(记住,在你自己的网络上几乎肯定是不同的),我可以添加它在家用路由器上作为主要域名服务器。

现在有很多路由器,没有单一的接口。

但是,任务是相同的,不同模型的工作流通常是相对相似的。

在我的Turris Omnia路由器中,高级接口允许DNS转发,这会将DNS请求发送到我选择的服务器。

在此处输入10.0.170.170(我的dnsmasq服务器的IP地址)会强制所有DNS流量通过 Dnsmasq 进行路由以进行缓存和解析。另一方面,在我的TP-Link路由器中,DNS设置是在DHCP面板中配置的。

可能需要再多做些探索,所以无需担心在你路由器的接口界面中寻找DNS服务设置。当你找到它后,输入你的Dnsmasq服务器地址,然后保存更改。

某些型号要求路由器在进行更改时需要重新启动。

你的网络上的所有设备都从路由器继承设置,因此现在从设备传递到互联网的所有 DNS 流量都将通过 Dnsmasq 服务器。

靠近边缘侧

随着越来越多的网站被添加到服务器的DNS缓存中,比本地Dnsmasq服务器上的DNS流量传输更远的DNS流量将越来越少。

尽可能在本地快速计算的原则推动了边缘计算的发展。仅通过这个练习,你就可以想象这项技术在利用地理位置策略加速互联网交互方面是多么的重要。

无论你是在家中、在工作中还是作为云架构师从事边缘计算工作,边缘都是云的重要组成部分,你可以利用它来让自己的优势尽情发挥。