我目前正在建立一个小型家庭实验室,主要是基于 docker,我一直推迟实现自己的 DNS 服务器,因为我担心可能会引入任何延迟。
我是一名开发人员,而不是一名专业系统管理员,所以我对这个问题的理解很肤浅,如果我错了,请纠正我。
如果我在我的家庭实验室服务器上(在 docker 内部)设置一个 DNS 服务器,并将我的路由器 DNS 指向此 DNS,则我网络上的所有请求都将通过此 DNS 解析,并且本地解析失败(例如 my-service.my-local-domain)它会转发到我指定的任何 DNS 转发器,对吗?(例如 8.8.8.8)
但是,如果我尝试最小化/最大化除本地 DNS 之外的所有 DNS 解析,有没有更好的方法可以做到这一点?有没有办法让我的路由器首先使用 8.8.8.8,并且只将解析失败转发到我的本地 DNS?或者我一般不应该担心使用自己的 DNS 时多几毫秒的延迟?
答案1
你可以减少 DNS 查找延迟显著地(首次查找后提高 2 个数量级)在 LAN 上运行本地 DNS 服务器/缓存。原因如下:
如果您首先使用外部 DNS(如 8.8.8.8),则每次查找记录时都必须遍历互联网。当您运行本地 DNS 时,它会首先查询其本地缓存,并且只有当该缓存不存在时,它才会查询公共 DNS 服务器。
所以答案是:一定要运行本地 DNS 解析器/缓存作为 LAN 的主要解析器。
Unbound 是一款 Linux DNS 解析器/缓存,它现代、小巧、快速、支持 DNSSEC 且易于配置。有可用的 Docker 容器,或者我可以把我的容器放在 github/dockerhub 上供您使用。