BIND9 (методическое пособие)
Содержание
Архитектура DNS
root(.)
gTLD
ccTLD
TSIG протокол позволяет аутентифицировать передачу данных между DNS-серверами. Можно проверять подлинность данных при передаче зон, рекурсивных запросах, динамических обновлениях. Сами данные не шифруются, но подлинность проверяется. TSIG использует метки времени для предотвращения атаки повторения пакетов.
DNSSEC
Домены, поддомены, псевдо-поддомены, зоны прямые и обратные
Делегирование зон
Трансфер зон
Рекурсивный и нерекурсивный запрос
Stub-resolver. Тупиковый резолвер с кэшем поддерживает только рекурсивный запрос. (win: DNS-client)
nslookup
Пример dns запроса на сервер 10.13.0.101 - рекурсия разрешена:
root@netctrl-01:/etc/bind# nslookup www.ru. 10.13.0.101
Server: 10.13.0.101
Address: 10.13.0.101#53
Non-authoritative answer:
Name: www.ru
Address: 194.87.0.50
Пример dns запроса на сервер 10.13.0.101 - рекурсия запрещена:
root@netctrl-01:/etc/bind# nslookup www.ru. 10.13.0.101
Server: 10.13.0.101
Address: 10.13.0.101#53
** server can't find www.ru: REFUSED
Сервер имен BIND9
Управление
Проверяет конфиг сервера имен
named-checkconf
Перезагружает сервер имен
rndc reload
Перезагружает только изменившиеся зоны
rndc reconfig
Запуск
service bind9 start
Опции
Списки доступа
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
Обратная запись указывает на имя по ip адресу. Используется специальный домен .IN-ADDR.ARPA. Для IPv6 используется другой домен - IP6.ARPA. Поэтому обратные записи необходимо держать в разных файлах для ipv4 и ipv6.
Пример для IPv4:
$TTL 2d ; 172800 secs
$ORIGIN 23.168.192.IN-ADDR.ARPA.
@ IN SOA ns1.example.com. hostmaster.example.com. (
2003080800 ; serial number
12h ; refresh
15m ; update retry
3w ; expiry
3h ; minimum
)
IN NS ns1.example.com.
IN NS ns2.example.com.
2 IN PTR joe.example.com. ; FDQN
15 IN PTR www.example.com.
17 IN PTR bill.example.com.
74 IN PTR fred.example.com.
Пример для IPv6:
; reverse IPV6 zone file for example.com
$TTL 2d ; default TTL for zone 172800 secs
$ORIGIN 0.0.0.0.8.b.d.0.1.0.0.2.IP6.ARPA.
@ IN SOA ns1.example.com. hostmaster.example.com. (
2003080800 ; sn = serial number
12h ; refresh = refresh
15m ; retry = update retry
3w ; expiry = expiry
2h ; min = minimum
)
IN NS ns1.example.com.
IN NS ns2.example.net.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0 IN PTR ns1.example.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0 IN PTR mail.example.com.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0 IN PTR joe.example.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0 IN PTR www.example.com.
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";
};
};