在 PowerDNS Lua 中,用户的 IP 地址作为一个变量bestwho存在。不过如果用户的 DNS 服务器没有告知上游服务器用户的地址,那么bestwho就会指向 DNS 服务器的地址。 PowerDNS 提供了一个 lua 函数pickclosest,该函数从一个 IP 列表中选择离bestwho地理位置最近的服务器返回。 还有一个函数country,可以分辨国家。 两者的使用:
1 2
A "pickclosest({'1.1.1.1','8.8.8.8','114.114.114.114','223.5.5.5'})" A ";if(country('CN')) then return '223.5.5.5' else return '1.1.1.1' end"
;; AUTHORITY SECTION: com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. ……
;; ADDITIONAL SECTION: m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 m.gtld-servers.net. 172800 IN A 192.55.83.30 l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 l.gtld-servers.net. 172800 IN A 192.41.162.30 ……
恭喜!你的根服务器已经搭建好了!
使用你的根服务器来进行递归解析
有了根服务器,接下来就可以配置你的递归 DNS 服务器,让它们使用你自己的根服务器完成解析了。 将你在root.zone文件里自己添加的两行/三行(如果你有IPV6)内容保存为roots.hint文件,传到你的递归 DNS 服务器上去。 然后在 PowerDNS Recursor 的配置文件中新加一行: