BIND9 (методическое пособие)
Содержание
Архитектура DNS
root(.)
gTLD
ccTLD
TSIG
DNSSEC
Домены, поддомены, зоны прямые и обратные
Делегирование зон
Трансфер зон
Рекурсивный и нерекурсивный запрос
Stub-resolver. Тупиковый резолвер с кэшем поддерживает только рекурсивный запрос. (win: DNS-client)
Сервер имен BIND9
Управление
Проверяет конфиг сервера имен
named-checkconf
Перезагружает сервер имен
rndc reload
Перезагружает только изменившиеся зоны
rndc reconfig
Опции
Списки доступа
acl network1 {
1.2.3.0/24;
192.168.0.0/20;
};
acl GoodDns {
1.2.3.4;
};
Ограничение на трансфер зон и запросы
allow-transfer {
localhost;
GoodDns;
};
allow-query {
any;
};
Настройка зоны и подключение файла зоны
zone "example.com" {
type master;
file "/etc/bind/db.example.com.";
allow-query {
any;
};
};
Зона прямого просмотра
Зоны прямого просмотра делегируются нам владельцем родительского домена.
Пример файла зоны, для которой мы являемся мастером (SOA ns1.model.local.) Сервер ns.example.com. указан в качестве вторичного.
;
$ORIGIN model.local.
$TTL 1h
;
@ IN SOA ns1.model.local. hostmaster.model.local. (
2014023001 ; Serial Number
10800 ; refresh
3600 ; retry
604800 ; expire
86400 ) ; min TTL
;
IN NS ns1.model.local.
IN NS ns.example.com.
IN MX 10 mail1
;
gw IN A 10.13.0.1
; несколько имен на один адрес
ns1 IN A 10.13.0.2
net-ctrl-1 IN A 10.13.0.2
mail1 IN A 10.13.0.10
front2 IN A 10.13.0.11
back1 IN A 10.13.0.20
back2 IN A 10.13.0.21
; несколько адресов на одно имя - балансировка
back IN A 10.13.0.20
IN A 10.13.0.21
stor1 IN A 10.13.0.30
stor2 IN A 10.13.0.31
stor-vip IN A 10.13.0.40
front-vrrp IN A 10.13.0.50
www IN CNAME model.local.
bc IN A 10.13.0.255
;
; users
user1 IN CNAME back.model.local.
www.user1 IN CNAME back.model.local.
user2 IN CNAME back.model.local.
www.user2 IN CNAME back.model.local.
;
Зона обратного просмотра
Зона обратного просмотра управляется владельцем диапазона ip адресов.
Пример файла зоны обратного просмотра, для которой мы являемся мастером
;
$ORIGIN 0.13.10.IN-ADDR.ARPA.
$TTL 1h
;
@ IN SOA ns1.model.local. hostmaster.model.local. (
2014023001 ; Serial Number
10800 ; refresh
3600 ; retry
604800 ; expire
86400 ) ; min TTL
;
IN NS ns1.model.local.
;
2 IN PTR ns1.model.local.
101 IN PTR netctrl-01.model.local.
255 IN PTR bc.model.local.
;
Зоны по-умолчанию
Зона типа hint для домена точки со списком корневых серверов. Файл зона необходимо периодически обновлять с сервера ftp://ftp.internic.net/domain/named.cache
zone "." {
type hint;
file "/etc/bind/db.root";
};
Зоны замыкания на себя прямые, обратные и броадкастов.
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";
};
Пример прямой и обратной зоны замыкания на себя, входящих в дистрибутив BIND9
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
@ IN AAAA ::1
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
1.0.0 IN PTR localhost.
Типы ресурсных записей (RR)
SOA
SOA запись в файле зоны должна быть только одна. В файле она должна стоять первой. Запись SOA определяет какой сервер является владельцем зоны и какие на зону установлены параметры. После записи SOA надо обязательно указать IN NS запись с тем-же сервером, что и в заголовке.
Пример: домен example.com обслуживается серверами ns.example.com и ns.examle.net. После указания директивы $ORIGIN сервер автоматически допишет за нас все неполные dns имена (таким образом hostmaster читается как hostmaster.example.com). Имя сервера вне зоны пишется полностью.
$TTL 2d ; zone TTL default = 2 days or 172800 seconds
$ORIGIN example.com.
@ IN SOA ns hostmaster (
2003080800 ; serial number
1d12h ; refresh = 1 day 12 hours
15M ; update retry = 15 minutes
3W12h ; expiry = 3 weeks + 12 hours
2h20M ; minimum = 2 hours + 20 minutes
)
IN NS ns
IN NS ns.example.net. ; out-of-zone
...
; A record for the NS RR above
ns IN A 192.168.2.1
;
Пример 2: домен example.com обслуживается двумя серверами вне зоны. Для них указаны полные имена в записях IN NS. Т.к. домен обслуживается другими серверами никакие A записи не допускаются.
$TTL 2d ; zone TTL default = 2 days or 172800 seconds
$ORIGIN example.com.
@ IN SOA ns.example.net. hostmaster.example.com. (
2003080800 ; serial number
1d12h ; refresh = 1 day 12 hours
15M ; update retry = 15 minutes
3W12h ; expiry = 3 weeks + 12 hours
2h20M ; minimum = 2 hours + 20 minutes
)
IN NS ns.example.net. ; out-of-zone name server
IN NS ns.example.org. ; out-of-zone name server
NS
Инфраструктурная запись, указывающая имя сервера имен для данного домена. Формат
owner-name ttl class rr target-name
example.com. IN NS ns1.example.com.
Согласно стандарту, каждый публичный домен должен иметь минимум 2 сервера имен. Частный домен может обслуживаться и одним сервером.
Если NS сервер для нашего домена находится в нашем домене, то мы обязаны указать A-запись для этого сервера (glue-record). Если NS сервер лежит вне домена - A-запись указывать не нужно.
Пример: NS записи для основного домена и для делегированного поддомена с указанием glue-records.
$TTL 2d ; default TTL is 2 days
$ORIGIN example.com.
@ IN SOA ns1.example.com. hostmaster.example.com. (
2003080800 ; serial number
2h ; refresh = 2 hours
15M ; update retry = 15 minutes
3W12h ; expiry = 3 weeks + 12 hours
2h20M ; minimum = 2 hours + 20 minutes
)
IN NS ns1.example.com.
IN NS ns2.example.com.
; обязательно указываем адреса этих серверов
ns1 IN A 192.168.0.3
ns2 IN A 192.168.0.4
; переключение на поддомен
$ORIGIN us.example.com.
@ IN NS ns3.us.example.com.
IN NS ns1.example.com.
; обязательно указываем на сервер поддомена
ns3.us.example.com. A 10.10.0.24
A, AAAA
A-запись указывает на ip адрес для данного имени хоста. Опционально указать особо ttl.
Пример: различные вариации записи
$TTL 2d ; zone default = 2 days or 172800 seconds
joe IN A 192.168.0.3 ; одинаковые ip
www IN A 192.168.0.3
; можно указать домен полностью
www.example.com. A 192.168.0.3
fred 3600 IN A 192.168.0.4 ; указан другой ttl
ftp IN A 192.168.0.24 ; разные ip для одного имени
IN A 192.168.0.7
mail IN A 192.168.0.15 ; разные ip для одного имени
mail IN A 192.168.0.32
mail IN A 192.168.0.3
squat IN A 10.0.14.13 ; другая подсеть
AAAA-запись используется для IPv6 адресов
ws1-29 A 10.0.10.29
AAAA 2002:d4c0:4090::d110:1011
Когда одному имени сопоставлено много адресов, в обратной записи для адреса нужно выдрать только одно имя.
MX
Инфраструктурная запись указывающая на имя почтового сервера для домена. Если имя сервера в этом-же домене - требуется еще А-запись с ip адресом почтового сервера.
Почтовых серверов для домена можно указать несколько с разными приоритетами.
Пример: почтовые сервера для домена и поддомена в одном файле
$TTL 2d ; zone default = 2 days or 172800 seconds
$ORIGIN example.com.
example.com. IN SOA ns1.example.com. root.example.com. (
2003080800 ; serial number
2h ; refresh = 2 hours
15M ; update retry = 15 minutes
3W12h ; expiry = 3 weeks + 12 hours
2h20M ; minimum = 2 hours + 20 minutes
)
; почтовый сервер для адресов вида user@example.com
IN MX 10 mail.example.com.
; почтовые сервера для поддомена user@us.example.com
us IN MX 10 mail.us.example.com.
us IN MX 20 mail.example.com.
; A-запись для основного почтового сервера
mail IN A 192.168.0.5
; Переключение на поддомен
$ORIGIN us.example.com.
; A-запись для почтового сервера поддомена
mail IN A 10.10.0.29
CNAME
Запись CNAME используется для указания псевдонима или ссылки одного имени на другое. Если сервер вернул клиенту CNAME в ответ на запрос, то клиенту придется повторно делать запрос на разрешение CNAME. Используется для удобства администрирования при наличии многих имен у одного сервера.
Примеры различных псевдонимов в домене example.com.:
joe IN A 192.168.254.3
www IN CNAME joe
www IN CNAME joe.example.com.
ftp IN CNAME www.example.com. ; паровоз
bill IN CNAME fred.another.com. ; перенаправление на имя в другом домене
;
IN A 192.168.254.8
www IN CNAME example.com.
PTR
SRV
Директивы сервера bind
$TTL $ORIGIN
View - ограничение видимости зон
Использование ограничения видимости позволяет применять различные опции по отношению к различным клиентам. Опция вступают в действие в зависимости от ip адреса клиента - источника запроса.
Это позволяет использовать разные данные по одной и той-же зоне для разных клиентов. Для внутренних клиентов мы должны разрешить рекурсивные запросы, для внешних - запретить.
Конфигурация зон /etc/bind/named.conf
; список доступа - наши внутренние клиенты
acl internal {
10.13.0.0/24;
localhost;
};
; область видимости для внутренних клиентов
view "internal-view" {
; клиент - соответствует списку доступа
match-clients { internal; };
; разрешена рекурсия для внутренних клиентов
recursion yes;
; зона видима только для внутренних клиентов
zone "model.local" in {
type master;
file "/etc/bind/db.model.local";
};
; зона видима для внутренних клиентов иначе, чем для внешних
; файл зоны свой
zone "model.example.net" in {
type master;
file "/etc/bind/db.model.example.net.internal";
};
; обратная зона для внутренних клиентов тоже своя
zone "0.13.10.in-addr.arpa" in {
type master;
file "/etc/bind/rev.10.13.0.internal";
};
; дефолтные зоны сервера
include "/etc/bind/named.conf.default-zones";
};
; область видимости, доступная всем прочим клиентам
view "external-view" {
match-clients { any; };
; запрет рекурсии
recursion no;
; зона видится внешними клиентами не так, как внутренними
; файл зоны свой
zone "model.example.net" in {
type master;
file "/etc/bind/db.model.example.net";
};
; обратная зона видится внешними клиентами не так, как внутренними
; файл зоны свой
zone "0.13.10.in-addr.arpa" in {
type master;
file "/etc/bind/rev.10.13.0";
};
};