前言
本文档记录一下如何用bind9配置一个根DNS服务器(本篇不包含DNSSEC),前面踩坑几次后,发现ICANN有一个官方使用的根区文件zoneFile,不再需要一点一点文章去凑合着看去理解配置方式,所以本文主要是记录一下官方DEMO的配置技巧。
准备
在ICANN下载对应的zone file。
有样学样配置开始
1、soa配置 相关参数这里不赘述。
(第一行)
. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2019061702 1800 900 604800 86400
2、自身NS配置 首先指定'.'的ns,标识了'.'是有人托管的。然后为了能让大家知道怎么找到托管的人,第二行还要指定ip
(第二和第三行)
. 518400 IN NS a.root-servers.net.
a.root-servers.net. 518400 IN A 127.0.0.1
3、顶级域名配置 这里踩了个坑。详细说
首先,我们想配置一个com.的顶级域名,那么我们配置的顺序就是:
授权->指定授权ip
配置部分:
(第四和第五行)
com. 172800 IN NS a.gtld-servers.net.
a.gtld-servers.net. 172800 IN A 192.5.6.30
那么在懵懂的我看来,这里就算配置好了根DNS了,只要发起询问,它就会在authority中返回一个com.的授权域名,和一个对应域名ip在additional部分了。然后,激动地试一下:

ip呢???additional数量不是1吗??为什么没这信息??
(゚ー゚) 目瞪狗呆
在深度对比了官方根区文件后,我终于发现!
我跟他的配置没出入!

不是的,差很远。由于我这里仅仅配置了一个com区域的NS,com区域的NS是属于net区域的。但是我并没有配置net的NS,这台所以这台服务器说:“我不知道net区域的解析归谁管,所以关于net的信息,我都不打算告诉你了”
这种规则有个名字,叫做"glue info"。知乎上有一条回答说的清楚:dns 里的glue records是什么意思,有什么作用?
所以,只需要有模有样地再加上一个net区域的ns即可:
(插入第四行前)
net. 172800 IN NS a.gtld-servers.net.
尝试:

这样,ip就出来了,就能做到和真正根区返回的信息一模一样了。
附件 📎:
#root.zone
. 86400 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2019061702 1800 900 604800 86400
. 518400 IN NS a.root-servers.net.
a.root-servers.net. 518400 IN A 127.0.0.1
com. 172800 IN NS a.gtld-servers.net.
net. 172800 IN NS a.gtld-servers.net.
a.gtld-servers.net. 172800 IN A 192.5.6.30
网友评论