Bind9 IP 更新

Bind9 IP 更新

我有 2 个 DNS 服务器 (BIND9)(主服务器、辅助服务器)和 1 个域。我有一个具有动态 IP 的 Web 服务器。因此,如果我的 IP 发生变化,我将无法通过域访问我的网站,因为在 DNS 服务器中,域区域 IP cot 已发生变化。

我的问题是:如何每次使用我的公共 IP 地址从我的服务器更新我的区域?有人可以给我一个 Linux(Debian 9)上的更新程序脚本吗?

谢谢

答案1

您可以使用 RFC 2136“DNS UPDATE”,通过编写工具脚本nsupdate或使用兼容的第三方客户端:

共享密钥 (TSIG)

  1. 生成用于验证更新的密钥:

    $ tsig-keygen -r /dev/urandom | tee tsig-key.private
    key "tsig-key" {
        algorithm hmac-sha256;
        secret "7P6HbRZRJCmtauo/lV0jwN9wkMgBTUikhf9JuaTvYT4=";
    };
    

    服务器和客户端只知道这个密钥,其他人则不知道。

  2. 将打印的文本复制到您的 中named.conf。(您可以为不同的主机设置多个密​​钥,每个密钥在字段中都有唯一的名称key "…"。)

  3. 在区域配置中启用动态更新:

    zone … {
        update-policy {
            /* grant <key_name> <policy> <record_types> */
            grant "tsig-key" name myserver.example.com ANY;
        };
    };
    

    可以使用各种不同的策略;例如zonesub允许更新全部的区域,subdomain dyn.example.com含义明显。

  4. 执行更新:

    $ nsupdate -k tsig-key.private
    > zone example.com
    > del myserver.example.com
    > add myserver.example.com 3600 A 100.64.1.1
    > send
    

有多种客户端能够自动更新。

公钥/私钥(SIG(0))

  1. 生成密钥对:

    $ dnssec-keygen -r /dev/urandom -T KEY -n USER myclient.example.com
    $ ls K*
    Kmyclient.example.com.+005+07399.key
    Kmyclient.example.com.+005+07399.private
    
  2. *.key文件包含公钥 – 将其添加到您的 DNS 区域。

    *.private文件包含私钥——将其复制到客户端计算机。(实际上,复制两个都文件传输至客户端计算机。

  3. 设置update-policy { }方式与 TSIG 完全相同。

  4. 以同样的方式使用 执行更新nsupdate -k <filename>.private

(注意:虽然 TSIG 密钥名称是任意的,但 SIG(0) 密钥存储在 DNS 中,因此始终以主机名/子域名命名。密钥名称才不是但是需要与您正在更新的主机名相匹配。)

Kerberos(GSS-TSIG)

有点超出范围,但 BIND9 也支持这一点(主要用于 Active Directory)。

相关内容