BIND9 имеет очень интересный функционал DNS, который не описан в каких-либо официальных спецификациях RFC. Называется он – Response Policy Zone. Если говорить подробнее, RPZ позволяет переопределять ответы DNS для доменных имен так, как вам хочется. Клиенту может быть возвращено сообщение, что домен не существует или можно вернуть совсем другой адрес – например адрес локального сервера, на котором размещена дефолтная страничка с информацией о политиках, запрещающих посещение данного ресурса (как на счет блокировки vk.com в корпоративной сети?).
В этой статье поговорим как настроить этот замечательный (для админа, но не всегда для юзера) функционал.
Если вам интересно подробнее изучить задачи администрирования BIND9, рекомендую обратиться к соответствующему тегу на моем блоге.
Содержание
Настройка Response Policy Zone в BIND9
Помимо настройки сервиса также расскажу об основных нюансах работы RPZ и ситуациях, которые могут вам встретиться.
Окружение
Предполагаю, что сервер BIND9 у вас уже установлен и возможно даже настроен. Если нет, вы можете это сделать на основе моих предыдущих статей (Сервер пересылки на BIND9 и Настройка представлений (View) в BIND9). Настоятельно рекомендую настроить утилиту rndc. Это крайне желательно, но на самом деле не обязательно.
В любом случае в конце статьи обязательно будет секция с итоговыми конфигами, чтобы вы не запутались.
Настройка
Для настройки функционала RPZ основная секция конфигурации options {} обязательно должна содержать директиву response-policy:
1 2 3 4 5 6 |
options { ... response-policy { zone "rpz" policy given; }; }; |
Всего может быть задано до 32 зон. Политика – policy – переопределяет алгоритм ответов для записей, которые содержатся внутри файлов зон:
- given – политика по умолчанию, не требуется прописывать в явном виде (выше в конфиге указана для наглядности). Для каждой записи выполняет действия, определенные внутри файла зоны;
- disabled – отключает все действия, определенные в файле зоны, но логирует “попадание” запросов;
- passthru – отвечать на запросы так, как будто нет никаких политик RPZ;
- drop – не возвращает клиенту никакого ответа, в итоге он получит ответ connection timed out;
- nxdomain – будет возвращен ответ о не существующем домене – NXDOMAIN;
- nodata – будет возвращен ответ об отсутствии данных – NODATA;
- tcp-only – отправляет урезанное сообщение, что вынуждает клиента выполнить повторный запрос, но уже по TCP;
- cname domain – будет возвращать запись CNAME с указанным доменом в ответ на запрос любой записи внутри файла зоны.
Следующим шагом нужно задать зону точно также, как это делается в обычных случаях. Например зона может быть внутри представления:
1 2 3 4 5 6 7 8 9 10 |
view "local" { ... zone "rpz" { type master; allow-transfer { "none"; }; allow-query { "none"; }; file "/etc/bind/rpz/local.zone"; }; ... }; |
Имя зоны должно совпадать с именем внутри директивы response-policy. Также указанная зона “rpz” должна содержаться в каждом представлении, если у вас их несколько. Иначе получите ошибку наподобие этой:
1 |
/etc/bind/named.conf.options:28: 'rpz' is not a master or slave zone |
Ну а теперь рассмотрим возможное содержимое файла зоны /etc/bind/rpz/local.zone:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
$TTL 86400 $ORIGIN rpz. @ 1D IN SOA localhost. hostmaster.localhost ( 2019060801 ; serial 3H ; refresh 15 ; retry 1w ; expire 3h ; nxdomain ttl ) @ IN NS localhost. ;; NXDOMAIN mail.corp.bissquit.com CNAME . ;; NODATA top.bissquit.com CNAME *. ;; Unchanged blog.bissquit.com CNAME rpz-passthru. ;; Nothing www.bissquit.com CNAME rpz-drop. ;; Truncated ns1.bissquit.com CNAME rpz-tcp-only. ;; Modified adfs.bissquit.com A 1.2.3.4 bissquit.com MX mail.bissquit.com mail.bissquit.com A 5.6.7.8 |
Хоть в файле и присутствуют записи SOA и NS, они служат лишь для формальной совместимости, ведь зоны RPZ по сути имеют вид и свойства самых обычных зон и поддерживают передачи.
Тестирование
Самое время протестировать как работает функционал RPZ, который мы только что настроили. Итак, по очереди запросим каждое имя, заданное в зоне local.zone.
1. Начнем с CNAME-записи:
1 |
dig @192.168.1.14 -t CNAME mail.corp.bissquit.com |
192.168.1.1 – адрес нашего днс-сервера. Результат запроса (status: NXDOMAIN):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
; <<>> DiG 9.10.3-P4-Debian <<>> @192.168.1.14 -t CNAME mail.corp.bissquit.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 45263 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;mail.corp.bissquit.com. IN CNAME ;; AUTHORITY SECTION: bissquit.com. 10800 IN SOA ns1.bissquit.com. hostmaster.bissquit.com. 2019060801 10800 15 604800 10800 ;; Query time: 0 msec ;; SERVER: 192.168.1.14#53(192.168.1.14) ;; WHEN: Thu Jun 27 20:22:29 MSK 2019 ;; MSG SIZE rcvd: 102 |
2. Следующий запрос:
1 |
dig @192.168.1.14 -t CNAME top.bissquit.com |
Результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
; <<>> DiG 9.10.3-P4-Debian <<>> @192.168.1.14 -t CNAME top.bissquit.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 18359 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;top.bissquit.com. IN CNAME ;; AUTHORITY SECTION: bissquit.com. 10800 IN SOA ns1.bissquit.com. hostmaster.bissquit.com. 2019060801 10800 15 604800 10800 ;; Query time: 0 msec ;; SERVER: 192.168.1.14#53(192.168.1.14) ;; WHEN: Thu Jun 27 20:25:43 MSK 2019 ;; MSG SIZE rcvd: 96 |
3. Запрос:
1 |
dig @192.168.1.14 blog.bissquit.com |
Результат (status: NOERROR – возвращен реальный публичный адрес доменного имени blog.bissquit.com):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
; <<>> DiG 9.10.3-P4-Debian <<>> @192.168.1.14 blog.bissquit.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61201 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;blog.bissquit.com. IN A ;; ANSWER SECTION: blog.bissquit.com. 599 IN A 178.162.51.81 ;; Query time: 26 msec ;; SERVER: 192.168.1.14#53(192.168.1.14) ;; WHEN: Tue Jul 02 15:29:54 MSK 2019 ;; MSG SIZE rcvd: 62 |
4. Запрос:
1 |
dig @192.168.1.14 www.bissquit.com |
Ответ (connection timed out):
1 2 3 4 |
; <<>> DiG 9.10.3-P4-Debian <<>> @192.168.1.14 www.bissquit.com ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached |
5. Запрос:
1 |
dig @192.168.1.14 ns1.bissquit.com |
С ответом в этом случае все несколько сложнее, ведь мы должны убедиться в том, что сервер вынуждает клиента обратиться именно по tcp, хотя по умолчанию используется udp. Проверить это можно с помощью tcpdump, перехватив трафик с сервера. Команда будет иметь вид (запускать с сервера bind):
1 |
tcpdump tcp port 53 |
Если вывод от tcpdump пришел, значит обращение идет именно по tcp. В противном случае используется udp и вывод tcpdump будет пустой (убедитесь в этом на запросах других записей):
1 2 3 4 5 6 7 8 9 10 11 12 |
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 15:54:36.172085 IP 192.168.1.28.35837 > 192.168.1.14.domain: Flags [S], seq 1765376658, win 29200, options [mss 1460,sackOK,TS val 682125707 ecr 0,nop,wscale 5], length 0 15:54:36.172113 IP 192.168.1.14.domain > 192.168.1.28.35837: Flags [S.], seq 2898089234, ack 1765376659, win 28960, options [mss 1460,sackOK,TS val 512640394 ecr 682125707,nop,wscale 6], length 0 15:54:36.172306 IP 192.168.1.28.35837 > 192.168.1.14.domain: Flags [.], ack 1, win 913, options [nop,nop,TS val 682125707 ecr 512640394], length 0 15:54:36.172307 IP 192.168.1.28.35837 > 192.168.1.14.domain: Flags [P.], seq 1:48, ack 1, win 913, options [nop,nop,TS val 682125707 ecr 512640394], length 4740424+ [1au] A? ns1.bissquit.com. (45) 15:54:36.172347 IP 192.168.1.14.domain > 192.168.1.28.35837: Flags [.], ack 48, win 453, options [nop,nop,TS val 512640394 ecr 682125707], length 0 15:54:36.172766 IP 192.168.1.14.domain > 192.168.1.28.35837: Flags [P.], seq 1:64, ack 48, win 453, options [nop,nop,TS val 512640395 ecr 682125707], length 6340424 1/0/1 A 178.162.51.81 (61) 15:54:36.173057 IP 192.168.1.28.35837 > 192.168.1.14.domain: Flags [.], ack 64, win 913, options [nop,nop,TS val 682125707 ecr 512640395], length 0 15:54:36.173771 IP 192.168.1.28.35837 > 192.168.1.14.domain: Flags [F.], seq 48, ack 64, win 913, options [nop,nop,TS val 682125707 ecr 512640395], length 0 15:54:36.174198 IP 192.168.1.14.domain > 192.168.1.28.35837: Flags [F.], seq 64, ack 49, win 453, options [nop,nop,TS val 512640395 ecr 682125707], length 0 15:54:36.174772 IP 192.168.1.28.35837 > 192.168.1.14.domain: Flags [.], ack 65, win 913, options [nop,nop,TS val 682125708 ecr 512640395], length 0 |
6. Ну а теперь самый любопытный момент – посмотрим какой ответ возвращает BIND9 на запрос MX-записи:
1 |
dig @192.168.1.14 -t MX bissquit.com |
Ответ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
; <<>> DiG 9.10.3-P4-Debian <<>> @192.168.1.14 -t MX bissquit.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57806 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 4 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;bissquit.com. IN MX ;; ANSWER SECTION: bissquit.com. 5 IN MX 10 mail.bissquit.com.rpz. ;; AUTHORITY SECTION: rpz. 86400 IN NS localhost. ;; ADDITIONAL SECTION: mail.bissquit.com.rpz. 86400 IN A 5.6.7.8 localhost. 604800 IN A 127.0.0.1 localhost. 604800 IN AAAA ::1 ;; Query time: 78 msec ;; SERVER: 192.168.1.14#53(192.168.1.14) ;; WHEN: Tue Jul 02 16:06:20 MSK 2019 ;; MSG SIZE rcvd: 161 |
Если вы заметили, то MX-запись ссылается имя mail.bissquit.com.rpz.. Почему так происходит и что с этим делать, разберемся в главе ниже.
Особенности работы
Ниже расскажу о некоторых нюансах работы, некоторые из них прямо или косвенно связаны с RPZ.
$ORIGIN в RPZ
Перед тем как рассматривать особенности работы, лишний раз стоит напомнить о важности указания переменной $ORIGIN, особенно внутри файлов зон RPZ. Вот что пишут об этом в документации 1:
While it is always good practice to use an $ORIGIN name in every zone file it is practically essential for RPZ domains. BIND9 will synthesize missing $ORIGIN names from the name used in the zone file but this can have unintended side effects and reduce flexibility in zone naming…
$ORIGIN содержит суффикс, который используется для получения fqdn из не полностью квалифицированных записей зоны (записи, у которых в конце нет точки 2), если вы вдруг забыли.
В ответе сервера на запрос MX содержатся следующие строчки:
1 2 |
;; ANSWER SECTION: bissquit.com. 5 IN MX 10 mail.bissquit.com.rpz. |
bissquit.com ссылается на странную запись mail.bissquit.com.rpz. На самом деле ничего странного в ней нет, поскольку в файле зоны все записи определены неявно (без точки в конце). Это значит, что в самый конец каждой записи будет дописано значение из переменной $ORIGIN (так и должно быть), либо имя файла зоны, если $ORIGIN пустая (а так лучше не делать).
Ничего страшного в таком поведении нет, ведь для клиента важно получить конечный адрес, на который ссылается запись mail.bissquit.com.rpz.. Он его получает чуть ниже (см. полный ответ бинда выше):
1 |
mail.bissquit.com.rpz. 86400 IN A 5.6.7.8 |
Хотя так может получаться не всегда. Почему, читайте ниже.
Additional section
Когда клиент запрашивает разрешение днс-записи у сервера, помимо основной секции ответа – ANSWER SECTION – он может получить также и дополнительную секцию – ADDITIONAL SECTION. Её цель – предоставить клиенту ответ по тем днс-записям, которые клиент может запросить сразу после получения основного ответа. Это особенно актуально для таких записей как MX, NS.
Днс-сервер “предугадывает” следующее действие клиента и просто сразу засовывает в ADDITIONAL SECTION разрешенные А-записи. Так проще всем.
Тем не менее бывают ситуации, когда ADDITIONAL SECTION может не содержаться в ответе сервера. Это нормальная ситуация, поскольку, строго говоря, наличие ADDITIONAL SECTION необязательно. Это заставит клиента разрешить А-записи, но уже в следующем запросе. Если бинд получит запрос на разрешение записи из зоны RPZ, он не растеряется и возвратит что надо:
1 |
dig @192.168.1.14 mail.bissquit.com.rpz. |
Ответ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
; <<>> DiG 9.10.3-P4-Debian <<>> @192.168.1.14 mail.bissquit.com.rpz. ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39281 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;mail.bissquit.com.rpz. IN A ;; ANSWER SECTION: mail.bissquit.com.rpz. 86400 IN A 5.6.7.8 ;; AUTHORITY SECTION: rpz. 86400 IN NS localhost. ;; ADDITIONAL SECTION: localhost. 604800 IN A 127.0.0.1 localhost. 604800 IN AAAA ::1 ;; Query time: 0 msec ;; SERVER: 192.168.1.14#53(192.168.1.14) ;; WHEN: Wed Jul 03 11:02:07 MSK 2019 ;; MSG SIZE rcvd: 133 |
А теперь представим ситуацию, когда между клиентом и биндом находится промежуточный сервер пересылки.
В большинстве случаев промежуточный сервер пересылки просто передаст ответ от бинда клиенту в том виде, в котором его отдаст бинд. Однако иногда может случиться так, что по каким-то причинам промежуточный сервер удалит ADDITIONAL SECTION из ответа бинда. Соответственно клиент должен будет запросить А-запись(и) у промежуточного сервера. В обычной ситуации запрос какой-либо несуществующей зоны (в моем случае .rpz) заставит промежуточный сервер сильно загрустить, правильного ответа клиенту он не вернет.
Существует три решение данной проблемы:
- Заставить клиента напрямую обращаться к бинду (самый простой и правильный вариант);
- Создать на промежуточном сервере зону-форвардер .rpz (это в моем случае, у вас будет другое имя).
- Прописать бинд в качестве форвардера на промежуточном сервере (этот вариант вообще не всегда возможен, да и гипотетически может создавать некоторое подобие “петель”)
Будьте аккуратны с ADDITIONAL SECTION.
Связанность записей внутри зоны RPZ
Записи внутри файла зоны могут быть связаны друг с другом логически. Будьте внимательны при редактировании зоны. Например если вы определили политику для записи вверху, а ниже пытаетесь создать для такого же доменного имени дополнительную запись:
1 2 3 |
bissquit.com CNAME rpz-passthru. bissquit.com MX 10 mail.bissquit.com |
… то непременно получите ошибку:
1 2 3 |
02-Jul-2019 15:22:41.487 general: error: dns_master_load: /etc/bind/rpz/local.zone:23: bissquit.com.rpz: CNAME and other data 02-Jul-2019 15:22:41.487 general: error: zone rpz/IN/local: loading from master file /etc/bind/rpz/local.zone failed: CNAME and other data 02-Jul-2019 15:22:41.487 general: error: zone rpz/IN/local: not loaded due to errors. |
Также будьте внимательны например при создании сложных записей, таких как MX. Сначала вы задаете собственно саму запись MX, а потом А-записи как в примере ниже:
1 2 |
bissquit.com MX mail.bissquit.com mail.bissquit.com A 5.6.7.8 |
Записи должны быть не полностью квалифицированными (без точек в конце), иначе днс-сервер будет возвращать некорректный ответ.
Порядок опроса серверов
Может показаться, что как только вы запрашиваете какую-либо запись из зоны RPZ у бинда, он сразу возвращает вам ответ. На самом деле на стороне сервера все выглядит сложнее. Перед возвращением ответа он сначала лезет к публичным серверам (указаны в форвардерах), чтобы узнать а нет ли у них той записи, которую запрашивает клиент. Это поведение хорошо иллюстрирует дамп трафика на 53 порту:
1 2 3 4 5 6 7 8 |
12:19:52.253626 IP 192.168.1.28.58596 > 192.168.1.14.domain: 57599+ [1au] MX? bissquit.com. (41) 12:19:52.253932 IP 192.168.1.14.34281 > dns.google.domain: 59304+ PTR? 14.1.168.192.in-addr.arpa. (43) 12:19:52.254216 IP 192.168.1.14.domain > 192.168.1.28.58596: 57599 1/1/4 MX mail.bissquit.com.rpz. 10 (161) 12:19:52.259999 IP dns.google.domain > 192.168.1.14.34281: 59304 NXDomain 0/0/0 (43) 12:19:52.260073 IP 192.168.1.14.45644 > dns.google.domain: 50974+ PTR? 28.1.168.192.in-addr.arpa. (43) 12:19:52.274906 IP dns.google.domain > 192.168.1.14.45644: 50974 NXDomain 0/0/0 (43) 12:19:52.275115 IP 192.168.1.14.45461 > dns.google.domain: 52424+ PTR? 8.8.8.8.in-addr.arpa. (38) 12:19:52.281080 IP dns.google.domain > 192.168.1.14.45461: 52424 1/0/0 PTR dns.google. (62) |
*1.14 – сервер BIND9, *1.28 – клиент, запрашивающий MX-запись bissquit.com. Обратите внимание, запрашивается в т.ч. и запись PTR. Не удивляйтесь, если обращения к записям внутри RPZ генерируют доп. днс-трафик наружу.
Алгоритмы поведения клиентов DNS
Разные клиенты ведут себя по-разному. Особенно заметно различие между Windows- и Linux- клиентами. Например если вы попытаетесь с Windows-машины обратиться к бинду с командой:
1 |
nslookup ns1.bissquit.com 192.168.1.14 |
То резолвер предпримет странную (на мой взгляд) попытку состряпать fqdn из запрашиваемого имени и всех дополнительных суффиксов по очереди.
Например у вас в системе заданы следующие сетевые настройки:
Перед запросом имени ns1.bissquit.com резолвер захочет узнать а нет ли у сервера имен ns1.bissquit.com.tratata.local, ns1.bissquit.com.localhost.localdomain и ns1.bissquit.com.bq.local.. В этом легко убедиться, заглянув в логи (либо перехватить сессию с помощью tcpdump, как удобно):
1 2 3 4 5 6 7 8 |
03-Jul-2019 12:35:17.833 queries: info: client 192.168.1.70#49425 (ns1.bissquit.com.tratata.local): view local: query: ns1.bissquit.com.tratata.local IN A + (192.168.1.14) 03-Jul-2019 12:35:17.843 queries: info: client 192.168.1.70#49426 (ns1.bissquit.com.tratata.local): view local: query: ns1.bissquit.com.tratata.local IN AAAA + (192.168.1.14) 03-Jul-2019 12:35:17.843 queries: info: client 192.168.1.70#49427 (ns1.bissquit.com.localhost.localdomain): view local: query: ns1.bissquit.com.localhost.localdomain IN A + (192.168.1.14) 03-Jul-2019 12:35:17.851 queries: info: client 192.168.1.70#49428 (ns1.bissquit.com.localhost.localdomain): view local: query: ns1.bissquit.com.localhost.localdomain IN AAAA + (192.168.1.14) 03-Jul-2019 12:35:17.852 queries: info: client 192.168.1.70#49429 (ns1.bissquit.com.bq.local): view local: query: ns1.bissquit.com.bq.local IN A + (192.168.1.14) 03-Jul-2019 12:35:17.868 queries: info: client 192.168.1.70#49430 (ns1.bissquit.com.bq.local): view local: query: ns1.bissquit.com.bq.local IN AAAA + (192.168.1.14) 03-Jul-2019 12:35:17.869 queries: info: client 192.168.1.70#49431 (ns1.bissquit.com): view local: query: ns1.bissquit.com IN A + (192.168.1.14) 03-Jul-2019 12:35:19.980 rpz: info: client 192.168.1.70#49431 (ns1.bissquit.com): view local: rpz QNAME TCP-ONLY rewrite ns1.bissquit.com via ns1.bissquit.com.rpz |
Linux-клиенты такое не вытворяют. Так что не паникуйте, если среди статистики запросов на вашем бинде начнет проскакивать аномально большое количество NXDOMAIN (как мониторить бинды я расскажу в следующих статьях).
Итоговые конфиги
Вроде бы обо всем рассказал, теперь пришло время поделиться конфигами в том виде, в котором у меня они остались на лабе к окончанию тестирования.
1. /etc/bind/named.conf:
1 2 3 4 |
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.acl"; include "/etc/bind/named.conf.logging"; include "/etc/bind/named.conf.local"; |
2. /etc/bind/named.conf.options:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
options { directory "/var/cache/bind"; dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; recursion yes; allow-query { localhost; acllist_local; }; allow-query-cache { localhost; acllist_local; }; forward only; forwarders { 8.8.8.8; 8.8.4.4; }; listen-on port 53 { 127.0.0.1; 192.168.1.14; }; response-policy { zone "rpz"; }; }; key "rndc-key" { algorithm hmac-md5; secret "D+W7c+OiTMTx1S0PnGSniA=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; |
3. /etc/bind/
1 2 3 |
acl acllist_local { 192.168.0.0/16; }; |
4. /etc/bind/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
logging{ channel channel_client { file "/var/log/named/client.log" versions 3 size 100m; severity dynamic; print-time yes; print-severity yes; print-category yes; }; channel channel_rpz { file "/var/log/named/rpz.log" versions 3 size 100m; severity dynamic; print-time yes; print-severity yes; print-category yes; }; channel channel_default { file "/var/log/named/default.log" versions 3 size 100m; severity dynamic; print-time yes; print-severity yes; print-category yes; }; channel channel_debug { file "/var/log/named/debug.log" versions 3 size 10m; severity dynamic; print-time yes; print-severity yes; print-category yes; }; category client{ channel_client; channel_debug; }; category rpz{ channel_rpz; channel_debug; }; category default{ channel_default; channel_debug; }; }; |
5. /etc/bind/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
view "local" { match-clients { acllist_local; }; zone "rpz" { type master; file "/etc/bind/rpz/local.zone"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "." { type hint; file "/etc/bind/db.root"; }; }; |
6. Файлы db.* идут в дефолтной конфигурации бинда и я их не менял.