Назад | Перейти на главную страницу

Быстрое распространение изменений внутреннего DNS в OS X

Сегодня утром мы обнаружили, что (из-за перехода) одна из наших записей DNS для важной службы неверна. Он был изменен на нашем основном DNS-сервере, но клиенты на дополнительных сайтах не видят этого изменения. (Наша сеть почти полностью работает с серверами OS X 10.5 и клиентами OS X 10.5).

Назову несколько машин для примера:

На клиенте (который выполняет поиск DNS через вторичный сервер) при проверке того, как все настроено, я получаю:

nslookup service.ourdomain.com
** server can't find service.ourdomain.com: NXDOMAIN

nslookup service.ourdomain.com secondary
** server can't find service.ourdomain.com: NXDOMAIN

nslookup service.ourdomain.com primary
(returns appropriate information about how to contact the service)

Когда я вхожу в

Я получил:

nslookup service.ourdomain.com
(returns appropriate information about how to contact the service)

nslookup service.ourdomain.com secondary
** server can't find service.ourdomain.com: NXDOMAIN

nslookup service.ourdomain.com primary
(returns appropriate information about how to contact the service)

Я в недоумении. Вторичный, похоже, знает, где находится служба, но не возвращает значения при запросе. (Конечно, записи DNS могут быть полностью независимыми или то, что он возвращает при запросе доменного имени, но все же - похоже, он должен знать!)

Я попытался очистить DNS на вторичном сервере и на клиенте. (dscacheutil -flushcache). Я также остановил и перезапустил DNS на вторичном сервере. (sudo serveradmin stop dns и sudo serveradmin start dns)

На нашем основном сайте мой коллега перезагрузил основной сайт и клиента, чтобы имя разрешилось правильно. К сожалению, у нас есть 14 вторичных сайтов, и я бы предпочел не перезагружать серверы, которые делятся файлами, в течение дня, если это возможно, но сделаю это, если это решит проблему.


По запросу:

host -C ourdomain.com   # [with names substituted]:
ourdomain.com SOA record primary.ourdomain.com. admin.ourdomain.com. 2009121410 21600 3600 604800 345600

[Я понятия не имею, что такое admin.ourdomain.com - не думаю, что у нас есть ящик с таким именем; Я точно не могу пинговать. Однако основной DNS-сервер отображается правильно.]


Также по запросу, вот вывод dig service.ourdomain.com @secondary (с заменой имени):

; <<>> DiG 9.4.3-P1 <<>> service.ourdomain.com @secondary
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 19207
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;service.ourdomain.com. IN  A

;; AUTHORITY SECTION:
ourdomain.com.      10800   IN  SOA primary.ourdomain.com. admin.ourdomain.com. 2009121409 21600 3600 604800 345600

;; Query time: 3 msec
;; SERVER: [IP of secondary]#53([IP of secondary])
;; WHEN: Mon Dec 14 10:34:11 2009
;; MSG SIZE  rcvd: 88

И выход dig service.ourdomain.com @primary:

; <<>> DiG 9.4.3-P1 <<>> service.ourdomain.com @primary
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47885
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;service.ourdomain.com. IN  A

;; ANSWER SECTION:
service.ourdomain.com. 10800    IN  A   [IP of service]

;; AUTHORITY SECTION:
ourdomain.com.      10800   IN  NS  primary.ourdomain.com.

;; ADDITIONAL SECTION:
primary.ourdomain.com.  10800   IN  A   [IP of primary]

;; Query time: 8 msec
;; SERVER: [IP of primary]#53([IP of primary])
;; WHEN: Mon Dec 14 10:34:18 2009
;; MSG SIZE  rcvd: 92

Наиболее разительные отличия заключаются в том, что вторичный не ответил, а первичный сказал: «;; ВНИМАНИЕ: рекурсия запрошена, но недоступна».

Ваш вторичный сервер пытается рекурсивно ответить (RD - желаемая рекурсия, RA - рекурсия доступна), но не работает (NXDOMAIN), в то же время обслуживая SOA авторитетно записывать (AA - авторитетный ответ).

Кажется, у вас здесь немного странная смесь ... нам нужно установить, как ваш вторичный сервер знает о зоне ( SOA запись), но не знает о записи в зоне.

Я бы пошел по рекомендации Майкла - нажмите серийный номер на главном устройстве, а затем перезапустите BIND на вторичном, чтобы убедиться, что его кеш очищен.

Не зная вашей конфигурации, я бы предположил, что это проблема кеширования или проблема распространения DNS.

Не зная, какой домен вы используете, я не могу проверить его отсюда. Я лично не понимаю, почему люди пропускают такую ​​важную информацию, но они часто это делают.

  • Попробуйте "host -C yourdomain.com" и скажите мне, что вы видите. Если вы видите разные записи SOA с разными серийными номерами, вам необходимо исправить распространение DNS. ЕСЛИ вторичный сервер не указан в записях NS для этой зоны, добавьте строку «также-уведомление», если выполняется BIND.

  • Попробуйте изменить серийный номер на главном устройстве, чтобы убедиться, что он был изменен правильно, а также для проверки распространения.

  • Попробуйте установить лучшее время отрицательного кеширования, которое намного меньше, скажем, 600 (10 минут) или около того. Это одно из значений в записи SOA.

  • Попробуйте «копать hostname.yourdomain.com @secondaryserver» и посмотреть, что он вернет. Сделайте то же самое на начальном. Если они отличаются, то это слом.

  • Если каждый из этих сайтов, которые возвращают неверные данные, имеет огромное время кеширования, вы должны иметь возможность подключиться к ним по ssh и просто перезапустить сервер имен, а не перезагружать каждый сайт полностью. BIND быстро перезапустится, если это то, что используется.

Вы можете вручную принудительно перенести зону, используя rndc утилита. Выполните эту команду на всех своих вторичных DNS-серверах:

rndc -p 54 retransfer mydomain.example.com IN com.apple.ServerAdmin.DNS.public

Вы также можете использовать эту утилиту для перезагрузки конфигурации без перезапуска. названный.

rndc -p 54 reload