FakeResolve - или «псевдоразрешение» - это режим работы DNS сервера, позволяющий подменить, либо блокировать разрешение определённых имён либо целых доменов. По такому принципу, например, работают все сервисы «безопасных DNS», попросту запрещая разрешение имён доменов из «небезопасного» списка.

Так же это хороший способ избавиться от паразитного трафика (рекламы, ага) в вашей локальной сети.

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

Псевдозона

Начнём с создания нашей «псевдозоны». Создайте файл /var/lib/bind/fakeresolve.hosts со следующим содержимым:

$TTL 1W
@       SOA     ns.localhost. admin.localhost. 1 1W 1H 1D 1D
        NS      ns.localhost.
        A 0.0.0.0
        AAAA ::
*       CNAME @
Если вам интересна подробная расшифровка, обратитесь к соответствующим RFC.

В нашей псевдозоне мы указываем, что время жизни у записей в зоне одна неделя (1W), сервером, отвечающим за неё, является несуществующий ns.localhost., адресом зоны является несуществующий 0.0.0.0 (и соответствующий ему IPv6 адрес из всех нулей) и что все поддомены этой зоны являются алиасами самого домена. Так же мы не задаём имя зоны явно, используя шаблон «@», означающий «текущее имя зоны».

Не забудьте исправить права доступа к файлу зоны!

# chown bind:bind /var/lib/bind/fakeresolve.hosts

Привязка к BIND

Для загрузки зоны сервером, создайте файл /etc/bind/named.conf.fakeresolve со следующим содержанием:

zone "apps.skype.com" {
        type master;
        file "/var/lib/bind/fakeresolve.hosts";
        };

И исправьте файл /etc/bind/named.conf.local, добавив в него в самом конце строку

include "/etc/bind/named.conf.fakeresolve";

Осталось поправить права на вновь созданный файл и попросить BIND перезагрузить конфигурацию.

# chown bind:bind /etc/bind/named.conf.fakeresolve
# rndc reload
server reload successful

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

# tail /var/log/syslog
…
Feb 10 01:39:46 server named[1925]: zone apps.skype.com/IN: loaded serial 1

Обратите внимание на пометку «serial 1». Если вы по каким-то причинам ошиблись при составлении файла зоны, при последующих его редактированиях вам необходимо будет изменять (увеличивать) серийный номер зоны (первая цифра в строчке SOA). Хотя обычно в этом нет нужды, так как файл предельно прост и мне не приходит в голову, что ещё можно было бы туда добавить.

Пара слов в заключение

Все зоны, от которых вы хотите избавиться раз и навсегда, отправляйте в один файл хостов. Серверу без разницы, сколько зон читать из одного файла. Макрос @ сделает всё за вас.

Если вам надо перекрыть часть внешней зоны (например, cloud.example.org. на самом деле хостится у вас в локалке и вы хотите сохранить для пользователей возможность обращаться к нему по этому имени даже в локальной сети), не смешивайте подобные конфигурации в одном конфигурационном файле. Создайте отдельный файл (например, named.conf.redirects) либо пишите эти перекрывающие зоны прямо в named.conf.local.