Я пытаюсь окунуться в удивительный мир DNS.
Я создал файл зоны для example.com, который содержит:
@ A 1.2.3.4
* A 1.2.3.4
Однако я также настраиваю свой локальный DNS, local.example.com, в котором я создал отдельный файл зоны, содержащий следующее:
machine1 A 192.168.0.1
machine2 A 192.168.0.2
Когда я копаю machine1.local.example.com, он возвращает запись A 192.168.0.1, отлично.
К сожалению, badmachine.local.example.com возвращает 1.2.3.4, как и local.example.com.
Я не уверен, как лучше это предотвратить. Если я добавлю следующее в local.example.com, для двух приведенных выше примеров будут возвращены пустые записи A, как и желаемое мной поведение:
@ A
* A
Я хочу, чтобы something.example.com использовал подстановочный знак, ЗА ИСКЛЮЧЕНИЕМ чего-либо в поддомене local.example.com, на который я не хочу давать ответ, если не указано иное. По сути, мне нужна дикая карта с одним исключением.
Это разрешено? Это лучшая практика или я все делаю ужасно неправильно? Я использую PowerDNS с серверной частью BIND.
Спасибо за ваши мысли!
Во-первых, ваш комментарий к Крису S выше проясняет (действительно, изменяет) ваш исходный вопрос, и я надеюсь, что вы простите меня, редактируя его в свой исходный вопрос.
Во-вторых, как отмечали другие, нулевые записи не допускаются.
В-третьих, я думаю, что способ сделать то, что вы хотите, - это объявить local.example.com
чтобы быть правильным поддоменом:
local IN NS ns1.example.com
local IN NS ns2.example.com
перечисляя те же два сервера имен, которые вы сейчас запускаете для example.com (примечание: я не знаю PowerDNS, поэтому мои записи выше находятся в формате BIND). Затем на этих серверах имен (которые, как я полагаю, являются этим сервером имен) вы объявляете файл зоны для local.example.com, который содержит только те хосты, которые вы хотите разрешить, и без записи с подстановочными знаками.
Итак, когда люди смотрят вверх foo.example.com
, если его нет в списке, он будет соответствовать существующей записи с подстановочным знаком и вернет 1.2.3.4
(или что-то еще). Но когда люди смотрят вверх foo.local.example.com
, сервер имен записывает для local.example.com
будут возвращены, и произойдет дальнейшая рекурсия, при этом ваш сервер имен теперь просматривает файл зоны для local.example.com
, и говоря (в отсутствие конкретной записи для foo и подстановочный знак в local.example.com) «нет, такой записи нет».
Вам следует посмотреть на конкретное поведение сервера, на котором вы работаете, потому что эта функция не реализована последовательно:
Процитируем RFC 4592: многие реализации DNS по-разному расходятся с исходным определением подстановочных знаков.
Подстановочные знаки на практике
То, что вы хотите, чтобы запись с подстановочными знаками выполнялась, правильно, поскольку я понимаю определение использования подстановочных знаков (лучше думать об этом как о значении по умолчанию в крайнем случае). Я постараюсь найти время, чтобы прочитать уточняющий RFC и обновить здесь ...
Я не могу придумать способ «обнулить» запись. Пустые записи A не допускаются.
Возможно *.example.com A 1.2.3.4
предотвратит переопределение записей .local.example.com? Похоже, PowerDNS не соответствует спецификации. Определение домена local.example.com должно предотвратить попадание подстановочного знака на что-либо в этом домене. Можете ли вы разместить файлы полной зоны? Это разрешило бы ряд небольших вопросов.
Было бы полезно знать, какие именно ответы вам нужны. Первые две строки, цитируемые в вашем вопросе, задают ответ по умолчанию для домена, а также ответ несопоставленной записи. Следовательно, example.com будет обслуживаться записью «@», а something-that-doesnt-exist.exmaple.com будет обслуживаться записью «*». В них нет необходимости, вы можете избавиться от обоих. Установка для них пустых значений является недопустимой конфигурацией (в большинстве систем).