C
注册用户
- UID
- 3
引言:什么是自建 DNS?为什么要自建?
只要你是一个域名爱好者,或多或少都听过“自建 DNS”这个词。如果你还没动手玩过,那只能说你错过了一大乐趣。自建 DNS 专业来说就是——自己搭建权威名称服务器(Authoritative DNS Server)来管理你的域名解析记录。从此告别 DNS***、Cloud*** 那些“外包工”,你的域名命运,由你掌控!
优点?有很多!




最主要还是:

原理科普:DNS 是怎么工作的?
DNS 就像是“互联网上的电话簿”。每当有人访问你的域名,浏览器就会问一句:“嘿,nametube.com 的 IP 是啥?”——这时,DNS 服务器就登场了。大致流程如下:
- 浏览器 → 本地 DNS 缓存 → 找不到就往上问
- 递归解析器(一般是 ISP、8.8.8.8 那种)去根服务器问:“.com 的权威是谁?”
- 根服务器说:“找 .com 的 TLD 服务器去”
- TLD 服务器说:“这个域名归 ns1.nametube.com 管”
- 最后,你的权威 DNS 服务器 终于露脸,告诉大家:“nametube.com 的 IP 是 1.2.3.4!”
但是:我们真的要自己从0开始搭建吗?
市面上有很多免费或者开源的DNS服务器,我们可以自己搭建,但那样花费的时间太多、维护成本高、独自搭建性能、稳定性、速度不理想。如你真的想从0开始搭建(专业玩家),可以在下方留言,稍后也会出一期从0开始搭建自己的DNS服务器教程。为了节约时间,我们通常会开始之前:计划
我们有三种选择,原理相同,步骤大致相同。方案 | 白标 | DNSSEC | SOA 自定义 | 根域 CNAME Flattening | 大陆可用性 | 备注 |
---|---|---|---|---|---|---|
Plan A(华为云) | ![]() | ![]() | ![]() | ![]() | ![]() | 免费细分至省份、线路,SOA自定义,但不支持 flattening |
Plan B(阿里云) | ![]() | ![]() | ![]() | ![]() | ![]() | 最贴近目标,付费支持细分解析,但SOA 暴露真实 NS |
Plan C(CloudNS) | ![]() | ![]() | ![]() | ![]() | ? | 完美功能(不包含细分解析)香港DC,大陆尚可(尚不清楚) |
|
| ||
|
| ||
|
| ||
|
|
没有一种选择是完美的,所以要根据你自己的需要选择。
选择优先次序:白标 > CNAME Flattening/大陆可用性 > SOA 自定义 > DNSSEC
*华为云 根域 CNAME Flattening 冲突:https://support.huaweicloud.com/dns_faq/dns_faq_016.html
主要场景冲突:设置 [CNAME @ fallback.nametube.com] 以达到回源目的后,不可再设置 @ 的其他记录,常见如 [MX 10 @ mailserver.com]邮件服务,意味你无法使用 @nametube.com 作为邮箱。
华为云虽对以上特定冲突提出不同线路解析建议(如下图),但已经注明邮件业务风险。DNS标准RFC 1912协议2.4,CNAME优先级最高,如果CNAME解析类型和其他类型(例如MX)同时存在,特定场景下会导致CNAME解析劫持MX解析导致邮箱无法收发邮件。
上述配置方案可以规避解析冲突,但是无法规避特殊场景下邮箱解析不可用的情况,请仔细评估业务风险,谨慎使用。
NS | CNAME | A | AAAA | MX | TXT | PTR | SRV | CAA | 显性URL | 隐性URL | |
NS | 无限制a | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 |
CNAME | 冲突b | 无限制 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 |
A | 无限制 | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 冲突 | 冲突 |
AAAA | 无限制 | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 冲突 | 冲突 |
MX | 无限制 | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 冲突 | 冲突 |
TXT | 无限制 | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 冲突 | 冲突 |
PTR | 无限制 | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 冲突 | 冲突 |
SRV | 无限制 | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 冲突 | 冲突 |
CAA | 无限制 | 冲突 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 无限制 | 冲突 | 冲突 |
显性URL | 无限制 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 无限制 | 冲突 |
隐性URL | 无限制 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 冲突 | 无限制 |
b:在主域名级别,CNAME记录集和NS记录集不冲突,可以同时添加;在子域名级别,CNAME记录集和NS记录集冲突,不能同时添加。
获取DNS提供商的NS的IP地址
请自行通过 ping.pe,dnschecker.org 等工具多节点获得IP,以下IP未必一直不变。你不需要输入所有IP,每个NS只需1个或以上都可以。
华为云:你需要先注册一个华为云账号
ns1.huaweicloud-dns.com | 114.115.192.11 116.205.5.1 116.205.5.31 116.205.223.128 122.112.208.1 122.112.208.253 139.9.23.90 139.9.224.17 2407:c080:20:ffff:ffff:fffe:0:1 |
ns1.huaweicloud-dns.net | 159.138.17.112 159.138.112.111 159.138.160.107 159.138.208.3 190.92.196.2 2407:c080:20:ffff:ffff:fffe:0:1 |
ns1.huaweicloud-dns.org | 159.138.17.187 159.138.112.111 159.138.160.107 159.138.208.3 190.92.196.2 2407:c080:20:ffff:ffff:fffe:0:1 |
ns1.huaweicloud-dns.cn | 116.205.5.32 116.205.223.129 122.112.208.254 139.9.224.17 2407:c080:20:ffff:ffff:fffe:0:1 |
想好你的NS服务器名称,如:
ns1.nametube.com
ns2.nametube.com
或
a.nametube.com
b.nametube.com
或
前面可替换为你喜欢的子域名.nametube.com
(最少2个)
注意不是所有注册商都提供这个Glue Records功能。
去你想设置NS的域名的注册商,如nametube.com 注册商 Spaceship.com 支持 Glue Records,他们家叫 “Personal Nameservers"。
注意,一定不是叫 "Nameservers" 那是你域名的NS,并不能帮你在注册局注册你的NS。一般是叫 "Glue Records"。
每一个NS就对应一个DNS提供商(如华为云)的NS的IP地址就可以了。
如:
ns1.huaweicloud-dns.com的IP --> ns1.nametube.com
ns1.huaweicloud-dns.net的IP--> ns2.nametube.com
ns1.huaweicloud-dns.org的IP--> ns3.nametube.com
ns1.huaweicloud-dns.cn的IP --> ns4.nametube.com
注意哈:这里我们设置了4个NS,其实2个就可以了。每个NS其实都可以设置多个IP的,这个看你自己。然后ns1.nametube.com的ns1的部分随你改的,尽量好记一点。
设置好后,我们把该域名的 NS(Nameservers) 也修改同步为上面设置的NS: ns1.nametube.com ns2.nametube.com...
然后,我们回到华为云,点击添加公网域名。添加 NS1 NS2 ... 的A记录,对应刚刚填的IP地址,注意一定要一致,NS是哪个ip就对应哪个ip。IPv6可以用 AAAA记录添加。同时也把NS记录改成我们自己的 NS1 NS2 ...
这时候其实已经完成了99%了,你已经成功自建DNS。
但是,我们再处理一下SOA记录,来更好的伪装。
打开这个页面:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=DNS&api=CreatePublicZone
[云解析服务]-[公网Zone管理]-[ListPublicZones],点击[调试]在右边的[响应结果]里找到自己的域名和它的id,如图:
记录这个ZoneID然后到[RecordSet管理]-[ListRecordSetsByZone],参数写入:zone_id=你上一步保存的,type=SOA。然后,点[调试]执行,结果里找到recordsets,复制下recordsets.id和recordsets.records的值,如图:
SOA: ns1.huaweicloud-dns.org. hwclouds\\\\.cs.huawei.com. (1 7200 900 1209600 300)
把 ns1.huaweicloud-dns.org 换成自己第一个NS(主要NS)记得保留最后的.
hwclouds\\\\.cs.huawei.com 换成管理员的邮箱,此处@替换为'.' ,记得保留最后的.
其他不用改,将变成:
ns1.nametube.com. admin.nametube.com. (1 7200 900 1209600 300)
[RecordSet管理]-[UpdateRecordSet],参数写入:zone_id=你上一步保存的,recordset_id=你上一步保存的,name=你的域名,注意 '.' 结尾;type=SOA。点击[调试]执行,如果右边看到[调试成功]就是已经成功修改SOA,如图:
大功告成,你现在可以快乐的去添加其他解析记录了!
最后编辑: