Кратко

  • Изначальная репликация DNS заставляла вторичный сервер через интервалы REFRESH опрашивать SOA первичного. Это берегло нагрузку, но делало временное расхождение ответов нескольких авторитетных серверов штатным состоянием.
  • DNS NOTIFY не устанавливал новую зону. Он побуждал вторичный сервер проверить serial; IXFR мог затем передать упорядоченные удаления и добавления от уже имеющейся у клиента версии.
  • Быстрый путь остался ограничен модульной арифметикой serial, возвратом к AXFR, устойчивым хранением, полной обработкой, атомарной активацией и необязательной TSIG-аутентификацией. Сигнал ускорял проверку, но не заменял её.

Минуты, когда авторитетные серверы не соглашались друг с другом

Несколько авторитетных серверов защищают зону от отказа одной машины или линии. Но сразу после изменения возникает долг репликации: пока копии не догнали первичную, равноправные авторитетные ответы могут описывать разные версии настоящего.

RFC 1034 определил первичный сервер, где координировались изменения, и вторичные, которые периодически запрашивали SOA. Они сравнивали SERIAL и переносили зону, если версия первичного была новее. REFRESH задавал обычную проверку, RETRY — повтор после неудачи, EXPIRE — предел, после которого необновляемая копия должна перестать отвечать как авторитетная. RFC 1035 закрепил 32-битные поля и AXFR для полной передачи зоны.

Модель экономила работу. Неизменная зона требовала лишь небольших SOA-запросов. Вторичный сервер сохранял инициативу и знал, когда отказаться от копии, свежесть которой больше нельзя подтвердить. Цена состояла в том, что длительность расхождения стала параметром. Короткий интервал нагружал первичный даже в тишине; длинный оставлял старую версию в обращении.

Это не то же самое, что кэш рекурсивного резолвера. После полной сходимости авторитетных серверов резолвер может хранить старую RR до окончания TTL. До сходимости два пустых резолвера могут получить разные данные, обратившись к разным авторитетным узлам. NOTIFY и IXFR работают с этим первым уровнем расхождения.

Спрашивать часто или узнавать поздно

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

RFC 1996 прямо описал компромисс: длинные периоды снижают нагрузку мастера, но удлиняют несогласованность. DNS NOTIFY добавил прерывание рядом с опросом. Загрузив новую версию, мастер мог уведомить известный набор вторичных серверов о необходимости проверки.

Получатель не публиковал содержимое уведомления. Он спрашивал SOA у настроенного мастера, сравнивал serial и лишь при необходимости начинал перенос. Необязательные данные внутри NOTIFY считались незащищённой подсказкой. Отправитель мог приблизить момент проверки, но не мог сам переписать состояние чужого сервера.

По умолчанию уведомлялись серверы из NS RRset, кроме указанного в SOA MNAME. Оператор мог заменить список или включить скрытые вторичные серверы. Связи передачи должны были образовывать граф без циклов. Обновившийся secondary мог стать мастером для следующего уровня, распределяя нагрузку.

Стук не равен доставленной внутрь посылке

NOTIFY был best effort. По UDP мастер мог повторять сообщение до ответа или предела попыток. Вторичный сервер мог услышать одно изменение от нескольких upstream-узлов и должен был подавлять дубликаты во время обновления. Несколько стуков не должны порождать несколько параллельных переносов.

Ответ подтверждал получение, а не сходимость. Поддельный источник мог вызвать лишние SOA-запросы; старая реализация могла вернуть NOTIMP. При потере уведомления обычный REFRESH оставался путём восстановления. Поэтому выражение «push зоны» слишком сильное: отправлялась срочность, а не самовыполняющиеся авторитетные данные.

Число, продолжающееся после нуля

Решение требует порядка версий. После максимума 32-битный serial возвращается к нулю, и обычное сравнение целых сочло бы будущее более старым. RFC 1982 определил конечное пространство последовательности.

Сложение модульно и ограничено. Близкие значения можно упорядочить через ноль; для пары, разделённой ровно половиной пространства, порядок не определён. За период EXPIRE serial не должен продвигаться более чем на 2^31−1, иначе старая реплика способна показаться новой.

Serial не является датой, подписью или правом собственности. Он не сообщает автора правки и её корректность. Это узкое свидетельство относительной позиции в допустимой последовательности. Для репликации его достаточно, пока оператор не превращает поле в обычные часы или более широкое полномочие.

Передать правку, а не весь архив

NOTIFY сократил обнаружение. RFC 1995 ввёл IXFR для сокращения переноса. Клиент включает SOA и serial своей копии. Если сервер сохранил историю, он отвечает упорядоченными сериями удалённых и добавленных записей до текущей версии.

Изменение RR выражается удалением старой формы и добавлением новой. SOA ограничивают каждую смену, а различия идут от состояния клиента к состоянию сервера. Это не патч без контекста, а маршрут от X к Y. Клиент заменяет зону только после обработки всей цепочки.

Сервер не обязан хранить историю вечно. Он может удалять старые различия, особенно если IXFR окажется больше AXFR, и очищать информацию старше EXPIRE. Промежуточные поколения можно уплотнить. Если начальный serial клиента больше неизвестен, возвращается полная зона.

Такой возврат — условие надёжности. Разница требует общей начальной точки и сохранённого пути. AXFR восстанавливает общий полный статус после очистки журнала, долгого отключения или крупного изменения. Оптимизация факультативна, возможность сойтись — нет.

Сначала пережить перезапуск

RFC 1995 потребовал сохранить новую версию в устойчивом хранилище до её раздачи через IXFR или AXFR. Иначе мастер мог распространить данные, упасть и вернуться без поколения, которое уже приняли вторичные. Ускорение создало бы постоянную несогласованность.

RFC 5936 уточнил сторону клиента AXFR. Зону принимают отдельно, проверяют и активируют атомарно. При сбое продолжает обслуживаться прежняя валидная версия. IXFR следует тому же принципу: неполная цепочка различий не может превратиться в частично опубликованные авторитетные данные.

Таким образом, быстрый путь проходит разные ворота: уведомление, доказательство версии, перенос кандидата и активацию после полной проверки. Самое раннее сообщение не вправе перепрыгнуть остальные этапы.

Аутентифицировать путь, а не истину

Передача зоны способна раскрыть данные и непосредственно изменить ответы другой авторитетной площадки. RFC 5936 рекомендует контроль доступа и целостности. RFC 8945 определяет TSIG — защиту DNS-транзакций общим секретом и кодом аутентификации.

В многочастном TCP-переносе MAC можно связать цепочкой и обнаружить вмешательство. Получатель узнаёт, что сторона владеет согласованным ключом. TSIG не шифрует канал, не распределяет секреты и становится сложным при большом числе пар.

Главное ограничение: TSIG подтверждает транзакцию, а не истинность зоны. Взломанный или ошибающийся мастер может криптографически правильно отправить неверные данные. Успешный MAC не доказывает юридическое владение именем, институциональное согласие или фактическую верность RR. Точечная защита не должна превращаться в всеобщее полномочие.

Тихое разделение власти

NOTIFY и IXFR похожи на оптимизацию производительности, но отвечают на вопрос распределённой авторитетности: как один оператор ускоряет изменение у другого, не управляя его исполнением? Действие разделено на малые утверждения: произошло изменение; моя серия Y; от твоего X к Y ведут эти различия; без общей истории вот полная копия; транзакция пришла от держателя согласованного секрета.

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

Ошибки тоже сходятся быстрее. Плохая правка способна охватить все площадки раньше первой жалобы; короткий журнал создаёт волну AXFR после долгого простоя; неверный serial замораживает реплики. Ускорение не отменило операционное управление, а перенесло проверку и обратимость до распространения.

Зона научилась стучать. Вторичный сервер стал просыпаться раньше, но сам остался ответственным за то, открыть ли дверь, принять ли полную посылку и что затем объявлять авторитетным.

Источники и пределы доказательств

RFC 1034 и RFC 1035 устанавливают опрос, таймеры SOA и AXFR. RFC 1982 определяет арифметику serial. RFC 1995 задаёт IXFR и полный возврат. RFC 1996 описывает NOTIFY и настроенный граф. RFC 5936 требует целостной атомарной активации. RFC 8945 определяет TSIG и его границы.

Документы не дают единой мировой даты внедрения, универсальных настроек или измеренного глобального времени сходимости. Они подтверждают архитектурный вывод: сигнал, свидетельство версии, перенос и локальное исполнение остались разными функциями.