我感觉我遇到的问题最终会是一个简单的问题,但我没有看到明显的问题。
首先,这里有一个示例流程,以便更好地理解事情是如何按顺序发生的——请注意,这是已经到位的基础设施,操作顺序需要保持完整:
- 注册域名 IE GoDaddy
- 将域名指向我们的名称服务器
- 创建名称服务器记录并重新加载绑定
现在..在步骤 1 和步骤 2 之间我们开始看到这一点(显然是因为该域名尚未在我们的系统中):
Jun 12 15:32:40 DNSSERVER named[25262]: client 230..xxx.xxx.xx#61333 (example.com): query (cache) 'example.com/SOA/IN' denied
接下来我创建区域文件/var/lib/bind/example.com.hosts:
$ttl 38400
example.com. IN SOA ns1.ourdnsserver.com. some.email.com. (
1494611262
10800
3600
604800
38400 )
example.com. IN NS ns1.ourdnsserver.com.
example.com. IN A 40.xx.xx.xx
www.example.com. IN A 40.xx.xx.xx
mail.example.com. IN A 173.xx.xx.xx
webmail.example.com. IN A 173.xx.xx.xx
example.com. IN MX 10 mx1.server.com.
example.com. IN MX 20 mx2.server.com.
此后,我将区域插入到配置中/etc/bind/named.conf.local:
zone "example.com" {
type master;
file "/var/lib/bind/example.com.hosts";
};
然后我重新启动sudo service bind9 restart
在此之后,我仍然得到
Jun 12 15:32:40 DNSSERVER named[25262]: client 230..xxx.xxx.xx#61333 (example.com): query (cache) 'example.com/SOA/IN' denied
我要做的就是解决这个问题编辑我的文件/var/lib/bind/example.com.hosts
-- 使用新的 unix 时间戳更新序列 -- 重新保存并重新启动 Bind。然后,通知程序就会发出区域已更新的信息。
编辑
然后我在日志中得到以下内容
8377:Jun 12 14:12:57 OURSND named[25262]: zone example.com/IN: sending notifies (serial 1494611231)
结束编辑
问题是,为什么我创建区域并重新启动 Bind 时没有发出通知?为什么我必须返回、编辑、重新保存并重新启动 Bind 才能使区域显示为“已更新”?我希望每次都能在第一次就发生这种情况。我没看到什么?
答案1
将序列号视为版本号。您(重新)启动绑定,它会检查其数据缓存中的版本号与配置中的版本号(序列号)。如果版本相同,为什么要重新处理所有内容,为什么要浪费网络带宽告诉辅助服务器您有区域要传输...
始终更新您的序列号。唯一的规则是必须更新。使用 unix 时间戳是好的,或者使用 YYYYMMDDNN 之类的格式,其中 NN 是当天的修订号(您是否需要每天更改它超过 99 次?)。
正如您所发现的,问题在于编辑文件时记得更新序列号。使用一些模板文件、数据文件和 shell 脚本来创建一个“构建”过程,您可以在其中编辑数据,然后告诉它重新生成区域文件(其中一部分包括输出新序列号),甚至可以转到(过度)基于 Web 的前端,使用“服务提供商”控制面板(如 ISPConfig),其中所有数据都将位于 sql 数据库中,ispconfig 软件将自动创建区域文件。