三个层级都被称作“DNS 服务器”
存根解析器
您自己的设备
递归解析器
运营商、路由器或 1.1.1.1
权威服务器
域名自己的 DNS
8.8.8.8 是什么?人人都在输入、却少有人懂的地址
有些地址你永远不会忘。我在办公室储物柜里的路由器上、在酒店 Wi-Fi 的笔记本上、在凌晨两点客户还在电话那头等着时的服务器上,都输入过 8.8.8.8。这是网络从业者在名称解析出问题时伸手去够的号码,它好用得足够经常,以至于很多人设置一次之后,再也不问自己刚刚把流量指向了什么。
那我们就来问一问。8.8.8.8 不是一个网站,也不是你会访问的服务器。它是 Google 公共 DNS 的正门——一项由 Google 向所有人免费提供的递归解析服务。它的姐妹地址 8.8.4.4,打开的是同一扇门。
解析器替你提问
每台设备都需要一个递归解析器。当你输入 example.com 这样的名字时,总得有什么东西去追踪答案:询问根、询问顶级服务器、询问该域名自己的名称服务器,再带回一个 IP 地址。这种追踪正是解析器的全部工作。什么是 DNS 服务器把各个角色分得清清楚楚,因为“DNS 服务器”这个词被用来指三份不同的工作。
默认情况下,你使用的是互联网运营商的解析器,它在你连接时悄悄分配给你。把设置改为指向 8.8.8.8,追踪就换了人手:你的查询从此去往 Google 的服务,由 Google 的机器来奔走和缓存。你访问的网站永远看不出差别,变的只有中间人。
一个地址,许多城市:任播如何工作
令人意外的部分来了。并不存在一台唯一的、拥有 8.8.8.8 这个地址的机器。同一个地址从 Google 在世界各地的设施同时宣告,这项技术叫做任播。你的查询只是落在你的网络路由认为最近、代价最低的那个站点上——通常(但不总是)是地理上最近的那个。
任播买来两样东西。第一是速度:在你自己所在的大洲得到答复的查询,省去了去往另一块大陆的长途。第二是韧性。如果某个站点故障或遭到攻击,路由就会转移,同一个地址开始在别处应答。没有人需要改任何设置,大多数用户甚至不会注意到一次故障——而这种故障放在单机服务上,会显眼得多。
长版本:IPv6 地址
到目前为止说的都是 IPv4。同一个服务也会在 IPv6 地址上应答——2001:4860:4860::8888 和它以 ::8844 结尾的孪生兄弟——它们在一条长得多的字符串里玩同样的记忆把戏。在 IPv6 连接上,只设置那著名的四个八可能会留下一个缺口:有些设备随后会悄悄地同时使用运营商的 IPv6 解析器,把你的查询分摊到两个服务上,让你做的每一次比较都变得混乱。如果设置界面同时提供两个地址家族,就两个都填上,否则你只做了你以为做完的那件事的一半。
为什么偏偏这个地址出了名
一部分原因是数字本身:四个八不可能记错,而这项服务的第二个地址把其中一个换成了四。一部分原因是习惯。多年来,支持脚本和论坛答案一直把 8.8.8.8 当作测试地址:ping 它一下,如果它应答,说明你的连接是通的,问题多半出在 DNS 上。这个地址因为是解析器而出名,之后又因为出了名而被当作解析器使用。我见过一些管理员,在自己拥有的每台机器上都设置它,却说不出这是谁的服务。它就是“那个 DNS 地址”,就像复印机变成了施乐一样。
这项服务会了解到你的什么
解析器能看到很多东西。你发出的每一次查询,都透露了一个你感兴趣的名字和你发出查询的地址。切换到 8.8.8.8 并不会消除这种暴露;它只是把暴露转移了——从你运营商的日志,转移到 Google 的日志。选择解析器的人,实际上是在选择这份记录落在谁手里,对此对自己诚实是值得的。
Google 公布了它如何处理这些数据,大致形态是这样:完整的查询日志只会临时保留,用于故障排查和安全工作;保留时间更长的数据则经过聚合,并去除把查询与个人关联起来的细节。不过,在依赖我的概括之前,先读一读现行政策。政策会变,而概括永远不是文件本身。
加密的门:DoH 与 DoT
到达 8.8.8.8 的经典方式是普通 DNS,它以未加密的方式传输:路径上的任何人都能读到你的查询,并且原则上能篡改答复。这项服务也通过加密传输来应答——DNS over HTTPS 和 DNS over TLS——它们把同样的问题包裹起来,让路径再也看不到。DNS over HTTPS 详解会讲清这种包裹如何工作、改变了什么。
加密改变的是谁能看,而不是谁来答。解析器仍然看得见一切;咖啡馆的网络,以及你与 Google 之间的每一跳,不再能看见。这种交换是否适合你,取决于这些观察者中哪一个更让你担心。
答案背后的门卫:验证
这个服务还有第二份工作,没人把它写在盒子上。对于受 DNSSEC 保护的域名——那是一种加密签名,能证明某个回答确实来自域名自己的服务器——Google 的解析器会替你检查这些签名。如果检查失败,你不会收到那个伪造的或损坏的回答;你收到的会是一个错误。坐在你的椅子上看,这可能像是一个网站在随机消失,而实际上是解析器抓住了域名签名与其记录之间的不匹配:通常是网站自身的配置错误,偶尔是更糟糕的东西被挡在了门外。
这对这个地址作为排障工具的日常工作很重要。如果 8.8.8.8 报告某个名字解析失败,而你运营商的解析器却乐呵呵地为它返回了一个地址,那么验证就是头号嫌疑:公共解析器在检查那个更宽松的解析器忽略掉的签名。这个网站不是选择性地宕机。它是选择性地被验证——知道这一点,就能把令人困惑的不一致变成一个诊断。
诚实的取舍
我经常推荐这项服务,但从不自动地推荐。你得到什么、放弃什么,是这个样子:
- 一致性:同一个解析器在你的家庭网络、手机和国外酒店网络上表现一致,消除了一整类“这里能用、那里不行”的谜团。
- 维护:大型公共解析器全天候有人打补丁、有人盯着。被忽视的运营商解析器——有些确实被忽视得很厉害——可能就不是这样。
- 集中化:你的查询汇入地球上最大的查询流之一,而它握在一家广告公司手里。已公布的政策是克制的,但这种集中本身,完全有理由不喜欢。
- 本地答复:有些内容网络会根据你的解析器所在的位置来猜你的位置。全球任播解析器偶尔会给你带来一个比运营商本地解析器更远的内容服务器。
- 过滤:如果你的运营商解析器会悄悄屏蔽已知的恶意域名,中立的公共解析器不会替你做这份工作。
查清你现在用的是什么
好奇某个设备是否已经指向 8.8.8.8?在改任何东西之前先查一查:
检查设备的 DNS 设置
打开你正在使用的连接的网络设置,查看 DNS 服务器字段。如果它们是自动填写的,说明解析器来自你的路由器或运营商,这台设备自己没有主张。
也检查路由器
许多家用路由器会分发自己的地址,并亲自把查询向上转发。真正干活的解析器可能住在那里,而不是你的设备上,这就是为什么有时改一台笔记本什么也改变不了。
直接询问系统
用命令行工具运行一次查询,读它输出中的服务器一行,或者在 DNS 查询工具中比较答复。由 Google 公共服务答复的查询,会明明白白地说明这一点。
要改就想清楚再改
如何更改你的 DNS 服务器涵盖了每个平台上的设置,包括把
8.8.8.8填为第一个地址、把8.8.4.4填为第二个,这样一条路径出故障时不会拖垮你的查询。
说说那个 ping 测试
因为这个地址太有名,它多了一份第二职业:成为人们用来 ping 一下、测试“互联网通不通”的东西。对待这个仪式要小心。ping 只能证明一个数据包能到达某个会回应 ping 的东西。它完全说明不了名称解析是否正常——而这正是这个地址存在的意义。我见过有人成功地 ping 通它,宣布连接健康,然后对着一个连一个名字都解析不出来的浏览器干瞪眼。
更干净的测试是这个服务本来的用途:向它提一个问题。先通过 8.8.8.8 查询一个你信任的名字,再通过你平时的解析器查询,然后比较两个回答。一致,说明解析是健康的。不一致,说明该往哪里挖。可达性是门铃;查询才是对话,而只有其中一个测的才是你真正在乎的东西。
这就是 8.8.8.8 的全部:一个非常好、非常公开的中间人。知道中间人做什么——以及它看得见什么——就是配置一个网络与只是输入别人给你的号码之间的区别。
需要查看某个域名的公网 DNS 地址?使用 Domain IP Lookup 工具。
常见问题
8.8.8.8 查询就失败,那是政策在按设计工作,并不是故障。解决办法是使用网络提供的解析器,或者向管理网络的人提出来。相关阅读
三个层级都被称作“DNS 服务器”
存根解析器
您自己的设备
递归解析器
运营商、路由器或 1.1.1.1
权威服务器
域名自己的 DNS
如何更改你的 DNS 服务器(路由器或设备)
你的设备在加载任何东西之前都会先问一位解析器。弄清该改路由器还是改设备本身之后,更换它只需几分钟。
三个层级都被称作“DNS 服务器”
存根解析器
您自己的设备
递归解析器
运营商、路由器或 1.1.1.1
权威服务器
域名自己的 DNS
什么是 DNS 服务器?类型与工作原理
什么是 DNS 服务器?了解这个名称背后的不同角色:递归解析器、权威域名服务器、根服务器和顶级域名服务器,以及每个角色负责回答什么。
一次递归 DNS 查询,逐跳详解
浏览器
想访问 example.com
解析器
运营商 / 1.1.1.1
根 + TLD
谁负责 .com?
权威服务器
真正的答案
这条链路上的每一跳本身都是一次 DNS 查询,之后都会被缓存
DNS over HTTPS 解析:它做什么,又不保护什么
DoH 把你的 DNS 查询中的一跳封进 HTTPS。解析器依然看得见你的问题,而 DNSSEC 仍然在做一份完全不同的工作。