更新非 Microsoft DNS

更新非 Microsoft DNS

我需要一些 PowerShell 工具或 .NET 库或直接使用 DNS 协议,因为我需要在非 Microsoft DNS 上执行动态更新,而 WMI 和 DNS cmdlet 仅适用于 MicroSoft DNS 服务器。

我试过了ARSoft.Tools.Net 库,但我总是得到 FormatError 返回代码(见下面的示例)。

还有其他可用的工具吗?

using ARSoft.Tools.Net;
using ARSoft.Tools.Net.Dns;
using ARSoft.Tools.Net.Dns.DynamicUpdate;
using System;
using System.Net;

class Program {

    static void TestUpdateAdd(IPAddress dnsServerIP,
                              DomainName updateZoneName,
                              DomainName newRecordName,
                              IPAddress newRecordIPAddress,
                              DomainName tsigName,
                              byte[] tsigKey) {

        var client = new DnsClient(dnsServerIP, 150000);
        client.IsUdpEnabled = false;

        var msg = new DnsUpdateMessage { ZoneName = updateZoneName };

        msg.Updates.Add(
            new AddRecordUpdate(
                new ARecord(newRecordName, 86400, newRecordIPAddress)));

        msg.TSigOptions = new TSigRecord(tsigName, TSigAlgorithm.Md5, DateTime.Now, new TimeSpan(0, 0, 5),
            msg.TransactionID, ReturnCode.NoError, null, tsigKey);

        DnsUpdateMessage dnsResult = client.SendUpdate(msg);
        if (dnsResult == null) {
            Console.WriteLine("Failed sending message");
        } else {
            Console.WriteLine(dnsResult.ReturnCode); // FormatError
        }
    }
} 

答案1

通过快速浏览,我的印象是当前的 ARSoft.Tools.Net 版本(尝试了 2.2.4 和之前的一些抽查版本)似乎在 TSIG 签名方面存在错误。
似乎有一个错误导致 TTL 在记录中包含两次TSIG,这显然抵消了之后的所有内容,完全破坏了对记录的任何解析。

如果您使用旧版本,例如 1.8.2,那么问题中的相同代码基本上可以正常工作(最大的区别是它使用字符串代替 DomainName)。话虽如此,我不知道旧版本是否存在其他问题,可能导致这种方法不受欢迎。


无论您是否使用这个特定的库,都有一些一般注意事项:

相关内容