我发现许多答案都说这不是从属 DNS 服务器的目的,并且根据bind
配置/版本(?),修改区域文件可能不够,因为bind
可以使用二进制文件。
我的场景如下:假设我有两台机器,A 和 B。A 托管主 DNS,B 托管从属 DNS。A 和 B 还托管 Web 服务。
如果 A 由于任何原因瘫痪,我想将 Web 服务转移到 B。为此,我还会更新 DNS A 条目。
这是否可以以可重现的方式实现,或者我是否必须将从属服务器提升为主服务器,这不太理想?
多谢。
答案1
正如您所提到的,从属区域的全部意义在于它从主区域传输区域数据。据我所知,编辑该文件将导致未定义的行为。
执行此操作的“安全”方法是将named.conf
备份服务器上的区域配置从更改为slave
,master
但将主区域指向磁盘上的同一个区域文件(file
指令),并注释掉该master
指令。
然后,您可以根据需要更改区域文件,并且备份服务器现在是该区域的主服务器。
另一个选项是将两台服务器都设置为“主服务器”,并使用带外文件同步工具(例如 rsync、unison、syncthing)使两台主机上的区域文件保持同步。如果您使用双向文件同步工具,则任一服务器上的更改都将同步到另一台服务器上。您需要设计一种方法,在进行更改时重新加载区域文件 - 这可以像在 cron/systemd 计时器上重新加载一样简单,或者使用 inotify 或 systemd 路径(参见man system.path
)在文件在磁盘上发生更改时执行重新加载。
systemd 路径的示例可能如下所示(保存为/etc/systemd/system/dns-zones.path
):
[Unit]
Description=Triggers a reload of named zones when zone file changes on disk
[Path]
PathChanged=/var/named/zones/example.com.zone
[Install]
WantedBy=multi-user.target
WantedBy=system-update.target
您需要一个相应的.service
单位来进行实际的重新加载(即/etc/systemd/system/dns-zones.service
)