通过边缘 DNS 缓存加速您的家庭网络

通过在您的家庭或企业网络上运行 DNS 缓存服务来创建您自己的边缘。
29 位读者喜欢这篇文章。
Mesh networking connected dots

如果您在过去几年中听到了很多关于“云”的讨论,那么您可能也听说过一些关于“边缘”的东西。

边缘计算 这个术语反映了对云存在边界的认知。要到达这些边界,您的数据必须连接到为云提供动力的物理数据中心之一。在某些设置中,将数据从用户的计算机传输到服务器集群可能很快,但这在很大程度上取决于地理位置和网络基础设施。云本身可以尽可能地快速和强大,但它无法在很大程度上抵消数据往返所需的时间。

答案是利用区域网络和云边界的边缘。当初始服务或计算发生在边缘的服务器上时,它可以加速用户与云的交互。

根据相同的原理,您可以通过在家庭服务器上运行一些服务来创建自己的边缘,从而最大限度地减少往返延迟时间。不要被特殊的术语吓倒。边缘计算可以像 IoT 设备一样简单,也可以像运行连接到 联邦服务 的服务器一样简单。

一个特别有用且简单的更改,您可以对您的家庭或企业网络进行更改以提升其性能,是运行 DNS 缓存服务。

 

什么是 DNS?

域名系统 (DNS) 使我们能够将服务器的 IP 地址(无论它们是在云端还是在城镇的另一端)转换为友好的网站名称,例如 opensource.com

每个域名背后都有一个数字——名称只是为了方便人类,因为人类更容易记住几个单词而不是一串数字。当您在 Web 浏览器中键入 example.com 时,您的 Web 浏览器会静默地通过端口 53 向 DNS 服务器发送请求,以将名称 example.com 与其注册表进行交叉引用,然后返回分配给该名称的最后一个已知 IP 地址。

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

有了正确的数字,您的 Web 浏览器会发出第二个请求,这次是使用数字而不是名称,直接发送到您的目的地。

那是另一次往返。

更糟糕的是,您的计算机(取决于您的配置)也可能向 DNS 服务器发送请求,以查找本地网络上已命名的设备。

您可以通过使用本地缓存来减少所有这些额外的流量。通过在您的网络上运行 DNS 缓存服务,一旦您网络上的任何设备获得分配给网站的数字,该数字就会本地存储,因此您的网络无需再次请求该数字。

作为奖励,运行您自己的 DNS 缓存服务器还可以让您阻止广告,并全面控制您网络上的任何设备如何与互联网的一些底层技术进行交互。

在 Linux 上安装 Dnsmasq

使用您的软件包管理器安装 Dnsmasq。

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

$ sudo dnf install dnsmasq dnsmasq-utils

在 Debian 和基于 Debian 的系统上,使用 apt 而不是 dnf

配置 Dnsmasq

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

它默认位于 /etc/dnsmasq.conf,并且注释良好,因此您可以通读它并选择您网络的首选设置。

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

保持您的本地域名在本地

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces
bogus-priv

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

# replace ad site domain names with an IP with no ads
address=/double-click.net/127.0.0.1

设置缓存大小。默认建议为 150,但我从不觉得 150 个网站听起来足够。

# Set the cachesize here
cache-size=1500

查找 resolv.conf

在大多数 Linux 系统上,systemd resolved 服务管理 /etc/resolv.conf 文件,该文件控制您的计算机联系哪些 DNS 名称服务器以进行名称到 IP 地址的解析。

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

禁用 resolved

$ sudo systemctl disable --now systemd-resolved

或者,同时运行它们

$ cat << EOF >> /etc/resolvmasq.conf
# my network name
domain home.local
# local hosts
enterprise 10.0.170.1
yorktown 10.0.170.4
# nameservers
nameserver 208.67.222.222
nameserver 208.67.220.220
EOF

在本示例中,home.local 是我通过动态主机配置协议 (DHCP) 或本地为我网络上的所有设备提供的域名。计算机 enterpriseyorktown 是我的家庭服务器,通过在此处列出它们及其本地 IP 地址,我可以通过 dnsmasq 按名称联系它们。最后,nameserver 条目指向互联网上已知的良好名称服务器。您可以使用此处列出的名称服务器,也可以使用您的 ISP 提供给您的名称服务器或您喜欢的任何公共名称服务器。

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

resolv-file=/etc/resolvmasq.conf

启动 dnsmasq

某些发行版可能已在安装时自动启动了 dnsmasq。其他发行版允许您在准备就绪时自行启动它。无论哪种方式,您都可以使用 systemd 启动该服务

$ sudo systemd enable --now dnsmasq

使用 dig 命令进行测试。

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

$ dig example.com | grep Query\ time
;; Query time: 56 msec

但是,下次您尝试时,查询时间会大大缩短

$ dig example.com | grep Query\ time
;; Query time: 0 msec

好多了!

为您的整个网络启用 dnsmasq

Dnsmasq 在一台设备上是一个有用的工具,但当您让网络上的所有设备都受益时,它会更好。

以下是如何将 dnsmasq 服务开放给您的整个本地网络的方法

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

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

$ dig example.com | grep Query\ time
;; Query time: 0 msec

在本示例中,我运行 dnsmasq 的 Raspberry Pi 的 IP 地址是 10.0.170.170。由于此 Pi 现在是我网络基础设施的重要组成部分,因此我的 DHCP 路由器为其静态分配了地址。如果我允许它获取动态 IP 地址,它可能不会改变(DHCP 的设计宗旨就是如此),但如果它改变了,那么我的整个网络将错过 dnsmasq 的好处。

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

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

$ sudo firewall-cmd --add-service dns --permanent

3. 将服务器的 IP 地址添加到家庭路由器的 nameserver 条目中

知道我的本地 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 缓存中,DNS 流量将不得不越来越少地远距离传输到您的本地 Dnsmasq 服务器之外。

尽可能在本地快速计算的原则驱动着边缘计算。通过进行此练习,您可以想象技术使用战略地理位置来加速互联网交互是多么重要。

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

Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时进行。

评论已关闭。

Creative Commons 许可本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.