Как мне обновить запись PTR на сервере DDNS с помощью dnsjava?
Я могу обновить записи A, AAAA и TXT без проблем. К сожалению, я пока не смог найти никаких примеров того, как обновить запись PTR.
Вот код, который я использую для отправки обновлений:
public void sendA(Name host, Name zone, String ip) throws IOException {
Update update = new Update(zone);
update.replace(host, Type.A, DNS_TTL, ip);
sendUpdate(update);
}
public void sendPTR(Name host, Name zone, String ip) throws IOException {
Update update = new Update(zone);
update.replace(host, Type.PTR, DNS_TTL, ip);
sendUpdate(update);
}
public void sendUpdate(Update update) throws UnknownHostException, IOException {
Resolver res = new SimpleResolver(DNS_IP);
res.setTCP(true);
Message response = res.send(update);
}
В этом блоке sendA работает отлично. sendPTR пытается сделать то же самое, но так как это PTR, он должен поместить IP слева, а имя хоста справа.
Например:
sendPTR(Name.fromString("foo.domain.net."), Name.fromString("0.168.192.in-addr.arpa."), "1");
Результаты в обновлении, которое выглядит так:
foo.domain.net 86400 IN PTR 1.0.168.192.in-addr.arpa.
С этим я получаю RCode 10, что означает "Имя не содержится в зоне".
Я попытался перевернуть ip и host, но в результате "1" не является абсолютным именем.
Это мой первый проект с dnsjava, поэтому я полностью ожидаю, что мне не хватает одного класса с этой единственной функцией, которая сделает все это за меня. Если бы кто-то любезно указал мне на этот класс, это было бы очень ценно.
1 ответ
Я знал это! Все, что мне нужно было сделать, это опубликовать вопрос, чтобы ответ пришел ко мне.
Мне просто нужно было явно создать экземпляр PTRRecord и использовать Update.replace(Record).
public void sendPTR(PTRRecord rec, Name zone) throws IOException {
Update update = new Update(zone);
update.replace(rec);
sendUpdate(update);
}
...
PTRRecord rec = new PTRRecord(Name.fromString("1.0.168.192.in-addr.arpa."),DClass.IN, 86400, host);
sendPTR(rec, Name.fromString("0.168.192.in-addr.arpa."));