Настройка DNS (Bind). Разделение через view.
В этой статье описана настройка dns bind (view). Данная настройка может пригодиться, где в качестве внешнего и внутреннего dns используется один сервер. И есть необходимость разделить доменную зону (например: mycompany.com).
Для чего это может понадобиться?
Для примера, предположим есть почтовый сервер mail.mycompany.com у которого 2 интерфейса. Один смотрит в локальную сеть eth0: 10.10.0.2, второй в интернет eth1: 195.48.77.2 (ip выбран случайно). Необходимо при обращении из локальной сети по имени mail.company.com получить внутренний 10.10.0.2, а при обращении с инета соответственно 195.48.77.2
Установка и настройка DNS
Устанавливать будем bind9 на ubuntu-server 14.04 LTS
root@dns:~# aptitude install bind9 bind9utils
Для настройки опишем параметры которые нам понадобятся:
- view — Утверждение view позволяет выдавать различные ответы на один и тот же запрос в зависимости от того, кто спрашивает. То есть вид доменного пространства будет зависеть от точки зрения. Берётся первый подходящий вид в зависимости от адреса клиента (match-clients)
- notify (yes no explicit) — посылать DNS NOTIFY при изменении зоны, для которой сервер уполномочен, серверам из NS и also-notify; explicit — посылать только серверам из списка also-notify
- recursion (yes, no) — обслуживать рекурсивные запросы
- allow-transfer {список-шаблонов-адресов}; — от кого принимать запросы на передачу зоны
- allow-recursion {список-шаблонов-адресов}; — от кого принимать рекурсивные запросы
- acl имя-acl {список-шаблонов-адресов}; — определяет именованный список-шаблонов-адресов
Все файлы конфигурации находятся в папке /etc/bind/ файлы зоны в папке /var/lib/bind/
root@dns:~# ls -l /etc/bind total 52 ... -rw-r--r-- 1 root bind 3748 Jan 28 09:31 named.conf ... root@dns:~# ls -l /var/lib/bind/ total 92 -rw-r--r-- 1 root root 53 Jan 20 10:07 bind9-default.md5sum -rw-r--r-- 1 bind bind 224 Jan 28 13:45 mycompany.com.int -rw-r--r-- 1 bind bind 224 Jan 28 13:45 mycompany.com.ext
Файлы нашей зоны для внутренней (mycompany.con.int) сети и для внешней (mycompany.com.ext).
mycompany.com.ext
root@dns:~# cat /var/lib/bind/mycompany.com.ext $ORIGIN . $TTL 38400 ; 10 hours 40 minutes mycompany.com IN SOA ns1.mycompany.com. admins.mycompany.com. ( 2016012001 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 38400 ; minimum (10 hours 40 minutes) ) NS ns1.mycompany.com. NS ns2.mycompany.com. ns1 A 195.48.77.2 ns2 A 195.48.77.3 mail A 195.48.77.2 ftp A 195.48.77.3
mycompany.com.int
root@dns:~# cat /var/lib/bind/mycompany.com.int $ORIGIN . $TTL 38400 ; 10 hours 40 minutes mycompany.com IN SOA ns1.mycompany.com. admins.mycompany.com. ( 2016012001 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 604800 ; expire (1 week) 38400 ; minimum (10 hours 40 minutes) ) NS ns1.mycompany.com. NS ns2.mycompany.com. ns1 A 10.10.0.2 ns2 A 10.10.0.3 mail A 10.10.0.2 ftp A 10.10.0.3
Главный файл конфигурации /etc/bind/named.conf для master сервера
include "/etc/bind/named.conf.options"; acl "int" { 10.0.0.0/8; 127.0.0.1; }; //Вид для внутренней сети view "internal" { notify yes; match-clients { "int"; }; //Обозначим slave-сервер которому разрешено скачивать зону allow-transfer { 10.10.0.3;}; recursion yes; allow-recursion { int; localhost;}; zone "mycompany.com" { type master; file "/var/lib/bind/mycompany.com.int"; }; zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; }; //Вид для внешней сети view "external" { match-clients { any;}; allow-recursion { localhost;}; //Обозначим slave-сервер которому разрешено скачивать зону allow-transfer { 195.48.77.3;}; notify yes; zone "mycompany.com" { type master; file "/var/lib/bind/mycompany.com.ext"; }; zone "." { type hint; file "/etc/bind/db.root"; }; };
Главный файл конфигурации /etc/bind/named.conf для slave сервера локальной сети. Для slave сервера внешней сети желательно запретить рекурсию
allow-recursion {localhost;};
include "/etc/bind/named.conf.options"; recursion yes; allow-recursion {any;}; zone "mycompany.com" { type slave; file "/var/lib/bind/mycompany.com.int"; masters {10.10.0.2;}; allow-update { 10.10.0.2;}; }; zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; };
Более подробно данная реализация хорошо описана в журнале «Системный администратор» №5(54) 2007.
Как отключить IPv6 в BIND
Иногда bind пытается резолвить некоторые имена в формате ipv6.
В логах пишет:
Feb 18 10:13:18 dns named[994]: message repeated 27 times: [ error (network unreachable) resolving 'xgu.ru/A/IN': 2a02:2278:70eb:298:89:184:64:78#53] Feb 18 10:13:26 dns named[994]: error (network unreachable) resolving 'xgu.ru/A/IN': 2a02:2278:70eb:298:89:184:64:78#53 Feb 18 10:13:26 dns named[994]: error (network unreachable) resolving 'xgu.ru/A/IN': 2a02:2278:70eb:298:89:184:64:78#53 e
Ну и по скольку у меня в сети IPv6 не используется, то желательно его отключить.
В ubuntu и debian это делается в файле /etc/default/bind9, необходимо добавить -4 в OPTIONS
например:
cat /etc/default/bind9 # run resolvconf? RESOLVCONF=no # startup options for the server OPTIONS="-u bind -4"
Заодно можно включить поддержку многопроцессорности параметром -n [кол-во ядер]
OPTIONS="-u bind -4 -n 2"