Мне нужен инструмент PowerShell или .NET-библиотека, либо использующая протокол DNS напрямую, так как мне нужно выполнять динамические обновления на DNS, отличном от Microsoft, тогда как командлеты WMI и DNS работают только для DNS-серверов MicroSoft.
Я пробовал Библиотека 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
}
}
}
При беглом взгляде у меня сложилось впечатление, что текущие версии ARSoft.Tools.Net (пробовали 2.2.4 и несколько выборочных проверок версий до него), похоже, содержат ошибки в отношении подписи TSIG.
Похоже, произошла ошибка, из-за которой TTL дважды включается в TSIG
record, который, очевидно, компенсирует все, что происходит после, полностью нарушая любой разбор записи.
Если бы вы выбрали старую версию, например 1.8.2, по сути тот же код, что и у вас в вопросе, работает нормально (самая большая разница в том, что вместо имени домена используется строка). Тем не менее, я понятия не имею, есть ли другие проблемы со старыми версиями, которые могут сделать этот подход нежелательным.
Некоторые общие примечания независимо от того, используете ли вы эту конкретную библиотеку или нет: