Настройка DNS (Bind). Разделение через view.

Written by on . Posted in Linux

В этой статье описана настройка 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"

Leave a comment