我将 BIND 作为 DNS 服务器,我想要的是让该服务器允许我向区域添加或删除记录,而无需手动编辑区域文件,并且我想远程执行此操作。
此更新是否需要密钥或类似的东西,或者我可以使用 ssh 连接来完成此操作,如下所示:
ssh user@remote "nsupdate ..... " ;
答案1
我之前对此进行了实验,您可以在绑定中建立一个动态区域来执行此操作。但是,如果我记得您将失去直接编辑区域的能力,并且必须使用动态更新命令来更新该区域。
我还相信您也可以建立一个密钥来防止未经授权的访问该设施。
我现在常见的解决方案是使用 Windows AD/DNS 机制甚至第三方网络解决方案来处理动态区域。
答案2
我已经解决了:实际上它需要一个密钥:创建密钥:
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST example.com.
编辑conf.文件:
// TSIG Key
key "example.com." {
algorithm hmac-md5;
secret "THE KEY GENERATED ABOVE";
};
zone "example.com" IN {
type master;
file "example.com.zone";
allow-update{ key "example.com."; };
};
向 /var/named 文件夹授予命名授权:
# chown -R named:named /var/named
# find . -type d -exec chmod 770 {} \;
# find . -type f -exec chmod 660 {} \;
答案3
您可以在没有密钥的情况下通过允许特定主机执行更新(例如 127.0.0.1)或 DNS 服务器的专用网络(例如)来执行此操作
zone "example.com" {
type master;
file "/var/lib/bind/db.example.com";
allow-update {
127.0.0.1;
192.168.33/24;
192.168.42/24;
};
};
正如您所提到的,您还可以添加allow-update { key "example.com." }
使用密钥文件。不过,我建议使用比 128 位 HMAC-MD5 更安全的密钥。例如,尝试:
# RSA-SHA256
dnssec-keygen -a RSASHA256 -b 2046 -n ZONE example.com.
# Elliptic Curve
dnssec-keygen -a ED25519 -n ZONE example.com.
旁注:我相信动态区域应该位于/var/lib/bind
,而不是/etc/bind
。
该手册指出您不应“手动”更新动态区域配置:
通过 nsupdate 或 DHCP 服务器进行动态控制的区域不应手动编辑。手动编辑可能与动态更新冲突并导致数据丢失。
您可以使用 rndc 将动态更新保存到磁盘,例如:
rndc freeze example.com.
rndc sync example.com.
rndc thaw example.com.