讨论 自建DNS的教程

域名讨论相关内容

C

注册用户
UID
3

引言:什么是自建 DNS?为什么要自建?​

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

优点?有很多!
✅ 完全自主,玩出花样
✅ 实现白标解析,假装自己是大厂
✅ 配合 glue record 玩“伪装成 DNS 提供商”
✅ 更高的隐私控制,甚至打造局域网专用 DNS
最主要还是:
✅ WHOIS 显示自己的NS,显得更专业

原理科普:DNS 是怎么工作的?​

DNS 就像是“互联网上的电话簿”。每当有人访问你的域名,浏览器就会问一句:“嘿,nametube.com 的 IP 是啥?”——这时,DNS 服务器就登场了。
大致流程如下:
  1. 浏览器 → 本地 DNS 缓存 → 找不到就往上问
  2. 递归解析器(一般是 ISP、8.8.8.8 那种)去根服务器问:“.com 的权威是谁?”
  3. 根服务器说:“找 .com 的 TLD 服务器去”
  4. TLD 服务器说:“这个域名归 ns1.nametube.com 管”
  5. 最后,你的权威 DNS 服务器 终于露脸,告诉大家:“nametube.com 的 IP 是 1.2.3.4!”
自己搭建 DNS,就是要你来做这个最终权威。

但是:我们真的要自己从0开始搭建吗?​

市面上有很多免费或者开源的DNS服务器,我们可以自己搭建,但那样花费的时间太多、维护成本高、独自搭建性能、稳定性、速度不理想。如你真的想从0开始搭建(专业玩家),可以在下方留言,稍后也会出一期从0开始搭建自己的DNS服务器教程。为了节约时间,我们通常会 偷偷的 用大厂DNS,伪装成自己的。

开始之前:计划​

我们有三种选择,原理相同,步骤大致相同。
方案白标DNSSECSOA 自定义根域 CNAME Flattening大陆可用性备注
Plan A(华为云)✅✅✅❌(冲突)*✅免费细分至省份、线路,SOA自定义,但不支持 flattening
Plan B(阿里云)✅✅❌✅✅最贴近目标,付费支持细分解析,但SOA 暴露真实 NS
Plan C(CloudNS)✅✅✅✅(ALIAS)完美功能(不包含细分解析)香港DC,大陆尚可(尚不清楚)
首先,我们有 Plan A, Plan B, Plan C 分别是 华为云,阿里云,CloudNS。
白标
可以伪装成自己的NS,在WHOIS中显示自己的NS,显得更专业。
DNSSEC
DNSSEC技术可以防挟持。
SOA自定义
部分提供商支持修改SOA,(只有刻意查询你的SOA才会看到)否则 NS 会暴露真实服务商,WHOIS上还是可以伪装,只有极少部分国别域名(ccTLD)要求SOA验证,不影响正常使用。
根域 CNAME Flattening
如你可以使用A记录解析根域@的ip,则无需担心此选项。方便对接 Cloudflare Custom Hostname,根域(@)必须解析到 fallback.nametube.com 回源 CloudFlare,所以不支持CNAME Flattening的话,会有记录冲突,特别是根域的 CNAME 和 MX。

没有一种选择是完美的,所以要根据你自己的需要选择。
选择优先次序:白标 > 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解析导致邮箱无法收发邮件
华为云虽对以上特定冲突提出不同线路解析建议(如下图),但已经注明邮件业务风险。
1748851363957.png

上述配置方案可以规避解析冲突,但是无法规避特殊场景下邮箱解析不可用的情况,请仔细评估业务风险,谨慎使用。
NSCNAMEAAAAAMXTXTPTRSRVCAA显性URL隐性URL
NS无限制a冲突无限制无限制无限制无限制无限制无限制无限制无限制无限制
CNAME冲突b无限制冲突冲突冲突冲突冲突冲突冲突冲突冲突
A无限制冲突无限制无限制无限制无限制无限制无限制无限制冲突冲突
AAAA无限制冲突无限制无限制无限制无限制无限制无限制无限制冲突冲突
MX无限制冲突无限制无限制无限制无限制无限制无限制无限制冲突冲突
TXT无限制冲突无限制无限制无限制无限制无限制无限制无限制冲突冲突
PTR无限制冲突无限制无限制无限制无限制无限制无限制无限制冲突冲突
SRV无限制冲突无限制无限制无限制无限制无限制无限制无限制冲突冲突
CAA无限制冲突无限制无限制无限制无限制无限制无限制无限制冲突冲突
显性URL无限制冲突冲突冲突冲突冲突冲突冲突冲突无限制冲突
隐性URL无限制冲突冲突冲突冲突冲突冲突冲突冲突冲突无限制
a:在主域名级别,不能重复添加NS记录集;在子域名级别,可以重复添加NS记录集。
b:在主域名级别,CNAME记录集和NS记录集不冲突,可以同时添加;在子域名级别,CNAME记录集和NS记录集冲突,不能同时添加。

获取DNS提供商的NS的IP地址​

请自行通过 ping.pe,dnschecker.org 等工具多节点获得IP,以下IP未必一直不变。
不需要输入所有IP,每个NS只需1个或以上都可以。
华为云:你需要先注册一个华为云账号
ns1.huaweicloud-dns.com114.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.net159.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.org159.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.cn116.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"。

1748851393399.png

每一个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,如图:

1748851489644.png

记录这个ZoneID然后到[RecordSet管理]-[ListRecordSetsByZone],参数写入:zone_id=你上一步保存的,type=SOA。然后,点[调试]执行,结果里找到recordsets,复制下recordsets.id和recordsets.records的值,如图:
1748851513927.png

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,如图:
1748851533265.png

大功告成,你现在可以快乐的去添加其他解析记录了!
 
最后编辑:
后退
顶部