Рейтинг:-1

nsupdate не обновляет запись Apex

флаг tr

nsupdate работает только для cnames. Кажется, вершина (запись для корневого домена) не обновляется. Я смог добавить в файл зоны, используя «update add . 604800 A 1.1.1.1», но он помещает его в «$ORIGIN». раздел файла зоны, и я не могу удалить и обновить его. Я пробовал «обновить добавить . 604800 A 2.2.2.2», но обновления не происходит. Я также пробовал «обновить, добавить example.com. 604800 A 2.2.2.2». Я поместил запись-заполнитель в "$ORIGIN". и "$ORIGIN example.com". раздел файла зоны, думая, что ему нужно найти его, чтобы обновить. Пробовал удалять и обновлять... ничего не помогает. Я где-то читал, что bind не может писать в /etc/bind/zones, поэтому я поместил файл зоны в /var/lib/bind.Bind записал в файл, но только один раз, чтобы добавить запись в «$ORIGIN». раздел. Любой совет?

Файл моей зоны:

$ПРОИСХОЖДЕНИЕ .
$TTL 604800 ; 1 неделя
пример.com. В SOA ns1.example.com. admin.ns1.example.com. (
                24; сериал
                604800 ; обновление (1 неделя)
                86400 ; повторить (1 день)
                2419200 ; истекает (4 недели)
                604800 ; минимум (1 неделя)
                )
            NS ns1.example.com.
            NS ns2.example.com.
$ORIGIN example.com
@ А 5.5.5.5
ds1512 А 10.0.0.13
ds1817 А 10.0.0.14
главная CNAME ds1817
ns1 А 10.0.0.6
ns2 А 10.0.0.3
рома CNAME ds1817
www CNAME example.com.

Мои команды с выводом отладки:

brent@dnsdhcpserver:/var/lib/bind$ sudo nsupdate -d
> сервер 10.0.0.6
> зона example.com
> обновить удалить @A
> обновить добавку @ 604800 A 2.2.2.2
> отправить
Отправка обновления на 10.0.0.6#53
Исходящий запрос на обновление:
;; ->>HEADER<<- код операции: ОБНОВЛЕНИЕ, статус: НЕТ ОШИБКИ, идентификатор: 25996
;; флаги:; ЗОНА: 1, PREREQ: 0, ОБНОВЛЕНИЕ: 2, ДОПОЛНИТЕЛЬНО: 0
;; РАЗДЕЛ ЗОНЫ:
;example.com. В СОА

;; РАЗДЕЛ ОБНОВЛЕНИЯ:
. 0 ЛЮБОЙ А
. 604800 В А 172.16.1.10


Ответ на запрос обновления:
;; ->>HEADER<<- код операции: UPDATE, статус: NOTZONE, id: 25996
;; флаги: qr; ЗОНА: 1, ПРЕДВАРИТЕЛЬНЫЙ ЗАПРОС: 0, ОБНОВЛЕНИЕ: 0, ДОПОЛНИТЕЛЬНО: 0
;; РАЗДЕЛ ЗОНЫ:
;example.com. В СОА

Это не сработало, поэтому я попробовал:

> сервер 10.0.0.6
> предварительное требование nxdomain example.com
> обновить добавить example.com. 604800 А 2.2.2.2
> отправить
Ответ на запрос SOA:
;; ->>HEADER<<- код операции: QUERY, статус: NOERROR, id: 47462
;; флаги: qr aa ra; ВОПРОС: 1, ОТВЕТ: 1, ПОЛНОМОЧИЯ: 2, ДОПОЛНИТЕЛЬНО: 2
;; РАЗДЕЛ ВОПРОСОВ:
;example.com. В СОА

;; РАЗДЕЛ ОТВЕТОВ:
пример.com. 604800 В SOA ns1.example.com. admin.ns1.example.com. 24 604800 86400 2419200 604800

;; ОТДЕЛ ПОЛНОМОЧИЙ:
пример.com.   604800 В NS ns2.example.com.
пример.com. 604800 В NS ns1.example.com.

;; ДОПОЛНИТЕЛЬНЫЙ РАЗДЕЛ:
ns1.example.com. 604800 В А 10.0.0.6
ns2.example.com. 604800 В А 10.0.0.3

Имя найденной зоны: example.com
Мастер: ns1.example.com
Отправка обновления на 10.0.0.6#53
Исходящий запрос на обновление:
;; ->>HEADER<<- код операции: ОБНОВЛЕНИЕ, статус: НЕТ ОШИБКИ, идентификатор: 8484
;; флаги:; ЗОНА: 1, ПРЕДВАРИТЕЛЬНЫЙ ЗАПРОС: 1, ОБНОВЛЕНИЕ: 1, ДОПОЛНИТЕЛЬНО: 0
;; ПРЕДВАРИТЕЛЬНЫЙ РАЗДЕЛ:
пример.com. 0 НИКАКИХ

;; РАЗДЕЛ ОБНОВЛЕНИЯ:
пример.com. 604800 В А 172.16.1.11


Ответ на запрос обновления:
;; ->>HEADER<<- код операции: ОБНОВЛЕНИЕ, статус: YXDOMAIN, идентификатор: 8484
;; флаги: qr; ЗОНА: 1, ПРЕДВАРИТЕЛЬНЫЙ ЗАПРОС: 0, ОБНОВЛЕНИЕ: 0, ДОПОЛНИТЕЛЬНО: 0
;; РАЗДЕЛ ЗОНЫ:
;example.com. В СОА

Может ли кто-нибудь увидеть, что мне не хватает?

Patrick Mevzek avatar
флаг cn
"Любой совет?" Что говорят ваши лог-файлы? В первом случае у вас на выходе есть «NOTZONE», что показывает, что имена, которые вы используете, неверны. Во втором случае вы говорите «prereq nxdomain example.com», что, очевидно, никогда не будет правдой, потому что, если «example.com» не существует, это означает, что зона не существует, и, следовательно, вы не можете добавлять в нее какие-либо записи.
флаг tr
Зона существует, потому что DNS-сервер разрешает домен в правильные частные IP-адреса. Но получение NOTZONE, очевидно, означает, что есть проблема, я просто не знаю, какая. Я был бы рад найти файл журнала для nsupdate. Где будет находиться этот файл журнала?
Patrick Mevzek avatar
флаг cn
связывать лог-файлы, а не `nsupdate`. Лог-файлы настраиваются в вашей конфигурации привязки.
Nikita Kipriyanov avatar
флаг za
«Зона существует, потому что DNS-сервер разрешает домен в правильные частные IP-адреса». - Нет, это не совсем так. В зоне «example.com» могут быть такие записи, как «a.b.example.com», и в этом случае такая запись будет успешно разрешена, несмотря на то, что зоны «b.example.com» нет. Кстати, не могли бы вы показать нам конфигурацию DNS-сервера, хотя бы ту часть, где настроена эта зона? Обновляет ли он другие записи таким образом? Кроме того, вы используете разделенный DNS (просмотры)?
Рейтинг:0
флаг za

Не добавляйте точку в конце имени RR. Используйте это так:

сервер мой.dns.сервер
зона example.com
ключ example.com некоторые-ключ-данные
обновить удалить example.com 604800 A
обновить добавить example.com 604800 A 192.0.2.1
Отправить

Я только что протестировал его с записью A и MX; у меня сработало, сервер PowerDNS, клиент ISC nsupdate from bind-tools, аутентификация через TSIG, имя ключа для простоты совпадает с именем зоны.


У меня сложилось впечатление, что вы не совсем понимаете, как $ORIGIN и @ работы, поэтому вот небольшое объяснение. Полное объяснение см. RFC1035.

На проводе они никогда не появляются. Это просто удобный "синтаксический сахар", сокращающий ввод и чтение файлов зоны. Следующие три примера определяют идентичные зоны (мне лень заполнять записи SOA, их точные значения не имеют значения для нашей темы):

$ORIGIN пример.com.
@ 604800 В SOA ns1 ....
  604800 В НС ns1
ns1 3600 В А 192.0.2.1
@ 3600 В А 192.0.2.5 
$ПРОИСХОЖДЕНИЕ .
example.com 604800 В SOA ns1.example.com ....
$ORIGIN ком.
пример 604800 IN NS ns1.example
$ORIGIN ns1.example.com.
@ 3600 В А 192.0.2.1
пример.com. 3600 В А 192.0.2.5 
пример.com. 604800 В SOA ns1.example.com. ....
пример.com. 604800 В NS ns1.example.com.
ns1.example.com. 3600 В А 192.0.2.1
пример.com. 3600 В А 192.0.2.5 

В первом примере я не указал имя RR в третьей строке (NS RR после СОА RR), поэтому парсер возьмет ее из предыдущей строки. Такое поведение является точной причиной @ наличие синтаксиса: вы не можете оставить поле имени RR пустым, так как оно примет предыдущее имя записи. Если бы я пропустил @ на последней записи я бы определил второй А запись для ns1. Таким образом, чтобы определить запись с именем, равным текущему установленному источнику (это будет «вершина», если источник установлен на имя зоны), вы не можете использовать «пустое имя», потому что это вызовет это «взять предыдущее» поведение.Вы должны либо указать полное имя записи явно с конечной точкой, чтобы оно не добавляло источник (как это написано в других примерах), либо изменить источник, либо использовать специальный символ. @ который говорит синтаксическому анализатору: «не повторяйте предыдущее имя, здесь идет обнаженное происхождение», поэтому последняя строка в первом примере определяет пример.com..

Второй пример — просто красивая демонстрация того, как $ORIGIN и @ работать вместе.

В третьем примере сахар не используется. Это реальные абсолютные данные, хранящиеся в зоне в каждом из этих трех примеров.


Таким образом, ваша запись может быть представлена ​​в файле зоны как пример.com после $ПРОИСХОЖДЕНИЕ ., или же пример.com. где угодно, или @ после $ORIGIN пример.com., или даже пример после $ORIGIN ком., это не имеет значения. Все эти случаи равны. Вероятно, вы ожидаете увидеть вариант "@", но BIND может решить записать его как любой из этих вариантов, так что будьте готовы распознать их все. И вы не можете заставить его использовать какой-то конкретный вариант, извините.

Еще одним предостережением может быть то, что вы читаете файл зоны после обновления, не замораживая его. Обратите внимание на файл «jnl» рядом с файлом зоны; это журнал, в котором впервые сохраняются ваши обновленные данные. Только когда вы делаете rndc заморозить example.com данные записываются в файл зоны (но зона потом блокируется для обновлений, для разблокировки нужно сделать оттепель операции или перезагрузите сервер). Правильный способ проверить, обновлена ​​​​зона или нет, - выполнить фактический DNS-запрос с копать землю или же хозяин или же нслукап, как вам нравится:

хост -v example.com
Patrick Mevzek avatar
флаг cn
Это прописано в документации, в ней есть такой пример: `update add newhost.example.com 86400 A 172.16.1.1`. Однако это также зависит от того, использовали ли вы ранее прагму `zone` или нет.
Nikita Kipriyanov avatar
флаг za
Да, раньше у меня была прагма зоны, и у меня есть ключ TSIG. (Я отразил это в ответе, добавил свой полный скрипт `nsupdate`, который работает.) Также обратите внимание: в вашем примере * нет * конечной точки в имени RR, как я и предлагаю. Я думаю, что эта точка является корнем проблемы O.P.
флаг tr
Это локальный DNS, единственный IP, обновляющий его сам DNS-сервер. Я не знаю, что такое ключ TSIG, но я предполагаю, что он предназначен для аутентификации, я его никоим образом не использую. Снял точку и все равно не приходят обновления: сервер 10.0.0.6 зона example.com обновить удалить example.com 604800 A обновить добавить example.com 604800 A 192.0.2.1 Отправить Я заставил его удалить запись «@ A 5.5.5.5» в $ORIGIN example.com и вставил новую запись в «$ORIGIN». файла зоны. Но он не удалит новую запись и не обновит ее.
флаг tr
Это также не обновит запись, отправив по отдельности или все сразу: сервер 10.0.0.6 зона example.com обновить добавить example.com 604800 A 192.0.2.3 обновить добавить example.com. 604800 А 192.0.2.3 обновить добавить @ 604800 A 192.0.2.3 обновить добавить. 604800 А 192.0.2.3 Отправить Чтобы было ясно, запись находится в "$ORIGIN". часть файла зоны как "A 5.5.5.5". В левой части записи нет символа @ или точки. Хотелось бы других идей, что попробовать.
Nikita Kipriyanov avatar
флаг za
Никогда не используйте символ "@" в `nsupdate`. Он не предназначен для использования внутри DNS-запроса, единственное определенное использование для него — это удобный заполнитель в файле зоны BIND, чтобы не переназначать $ORIGIN туда и обратно. https://datatracker.ietf.org/doc/html/rfc1035#section-5.1 Вы можете определить зону полностью без нее, точно так же, как вы определили запись SOA. Также обратите внимание, что "апексная" запись, имя которой совпадает с именем зоны, является обычной записью в зоне, ничего особенного, кроме этого совпадения. (У меня сложилось впечатление, что вы не совсем понимаете, что такое @.)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.