从换域名谈谈 DNS

前因

前阵子被「备案信息复查」,当头一棒,我都忘记自己备过案了。一愣神,我以为域名都必须要备案才能用,问了下室友,才突然想起自己当时备案是因为「域名必须要备案才能指向腾讯云服务器的 IP」。

扫了一眼要求 —— 1、在腾讯云备案成功的域名需要解析至腾讯云服务器;2、网站内容不能涉及博客;3、网站标题需要与网站名称一致。4、电话沟通说不能有评论。

其实貌似备案也不是很严格,修改审核完事后再改过来也行……

还是不要在违法的边缘试探为好

其他都还好,「网站标题需要与网站名称一致」这一条太沙雕了。我备案时的网站名是「三岛有纪夫」,总有人觉得我读了很多三岛由纪夫的书,其实我对他不是很了解,纯粹是觉得这样玩弄字眼很有趣。

现在我不想顶着「三岛有纪夫」这个名字了,不符合我现在的人设。

打算换个轻松点的域名,记得 林海草原 对此有研究,便请教了下。

注册域名与设置第三方 DNS 服务器

于是在 https://porkbun.com 注册 —— 「价格比较低、免费隐私保护、彻底不泄露、服务极好。」购买需要 Paypal 与 Vista 信用卡。(之前申请了张中国银行的学生信用卡

把 DNS 服务器换为第三方,https://dns.he.net/

我还是第一次使用第三方 DNS,说起来其实步骤很简单。

在域名商的域名管理界面将 AUTHORITATIVE NAMESERVERS(权限域名服务器)修改为第三方 DNS 服务器提供的。比如使用 he.net 的话,在 he.net 注册后就会有个醒目的提示告诉你去修改,以及修改为啥。完事后再在 he.net 提供的管理界面添加域名 —— 然后就可以在 he.net 管理域名的解析啦。

当时看的这篇文章:He.net DNS 域名解析申请使用 - 免费 DDNS、IPv6 地址和 Slave DNS

回头看步骤其实很简单,不过因为我是第一次接触,而且 AUTHORITATIVE NAMESERVERS 修改生效的时间有点长 —— 导致我在等待的时间里总觉得自己哪儿弄错了,然后折腾……所以花了好一阵子时间。

裸域名不能设置 CNAME

遇到了一个问题:

Sorry, you can’t have a CNAME on the root domain. It violates RFC, will break things, and probably cause your own personal space time to collapse in on itself.

You probably want to use an ALIAS record instead.

说是违反了 RFC,可能会导致一些问题。之前用阿里云和腾讯云自带的解析都没遇到这个问题啊,搜索了下。大意可以如下解释:

阿里云和腾讯云用了些「特殊手段」让用户可以给裸域名设置 CNAME。至于是啥「特殊手段」?搞不好就是上面说的方法 —— use ALIAS。

会产生啥问题呢?

MX 记录有可能会和 CNAME 记录冲突。

具体可以看讨论:为什么裸域名不可以设置 CNAME? 17、26、27 楼。

没细看,解决方法很简单:用 ALIAS 记录解析就行了。

域名 DNS 解析的过程

DNS 在域名和实际 IP 间起着桥梁的作用。都说需要用 DNS 把域名解析为 IP,那么为啥需要得到 IP 呢?因为在计算机网络中,计算机需要通过 IP 去寻找和它通信的家伙。 —— 当初就是这么设计的。(IP 就相当于门牌号咯)

IP 和地域相关,比如网上就有通过 IP 反查地址的工具。

回到 DNS,如果我们从浏览器输入一个域名谈起,那么就会经历如下步骤:1、浏览器缓存;2、计算机缓存;3、本地 DNS 服务器……

如果你修改过 hosts,可能就遇到过刷新计算机 DNS 缓存。有时候,某些网站被 GFW 挡住了,可以通过修改 hosts 访问。这是因为 GFW 对该站进行了 DNS 污染。所谓的 DNS 污染,大意就是指通过某种手段让你的域名指向错误的 IP。你在本地通过 hosts 映射了域名与 IP,浏览器访问时就直接用本地 hosts 的 IP 去建立连接。这样,就躲避了 DNS 污染啦……

有时候,对于被 DNS 污染了,但你仍想访问的网站。可以使用域名反查 IP 的工具查到 IP,然后通过 IP 访问。修改 hosts 科学上网就是这个原理。

一些破解 intellij 系软件的方法会修改 hosts 将 intellij 的激活域名指向本地(localhost),则是利用这点让激活服务无法正常运行。

啥是本地 DNS 服务器?不细聊概念。一般来说,本地 DNS 服务器默认的是运营商提供的 DNS。「运营商提供的 DNS」对一般用户来说是够用的,前提是你对互联网有一定的「钝感力」。运营商时常搞些幺蛾子 —— 也许你就遇到过,像网络运营商劫持:网页被加上一些莫名其妙的广告,或者域名被解析到一个莫名其妙的网站(DNS 劫持)……

如果你遇到了这些现象且难以忍受,也可以把本地 DNS 设置为其它的。比如国内的口碑较好的有 114 DNS 。Windows 用户可以用 DNS jumper 这个软件方便选择并切换。

前面说过 DNS 充当着域名与 IP 的桥梁,那也就是说 DNS 知道你访问了哪些域名。(这才能去查 IP 嘛)因此一部分有特殊需求的用户对国内的 DNS 服务不是很信任,会使用国外的 DNS。但一般来说,国外的解析速度肯定比不上国内。

插一句:大一把流量用得超出套餐了,便以没收到流量预警短信为由向联通客服反应。(不记得是不是真没收到了,应该是真的吧,不然我这么谨慎的小孩也不至于干出这种事……)然后对面的客服似乎正数着条目向我说:您的流量都是有记录的,某某 APP 用了多少……

当时听着吓我一跳,赶快叫 Ta 别说了。

本地 DNS 服务器查的也是缓存,如果在缓存查不到,就会去域名的 DNS 服务器查。OK!这里所说的「域名的 DNS 服务器」就是上面我提到的 AUTHORITATIVE NAMESERVERS(权限域名服务器)。比如我把本站域名的 AUTHORITATIVE NAMESERVERS 改为了 he.net,这时候「本地的 DNS 服务器」就会去 he.net 查询域名对应的 IP —— 这里的查询就很复杂了,不细讲。查到后,就会把 IP 放在自己的缓存里。

想像一下,你访问一个不存在的网站时,DNS 服务器找到(或者说弄出?)一个不存在的 IP 的出来,返回给你 —— 同时还放在自己的缓存里。这样子,不仅你访问不了这个不存在的网站(因为解析出来的 IP 错误)。DNS 服务器还会把你访问时产生的缓存同步至其它区域的缓存服务器 —— 非常快速地全方位污染。

每一步都有缓存,而缓存,当然有过期时间了。比如浏览器缓存,一般「Ctrl+F5」就会重新请求了。本地缓存,相信修改过 hosts 的都会记得有一个刷新的步骤。Windows 的 IPconfig /flushdnsLinux 一般是重启 network:service network restart

而在对域名进行解析时则有一个参数:TTL,这个设置就是更新缓存的频率(多久刷新一下)。比如理论上你修改一次解析后,要经过这么长的时间才会生效,但一般 DNS 服务都对此做了优化,你实际等不到那么久。

好啦,就是这样。