Posts Tagged ‘ DNS

Debian Jessie: DNS Server — установка и настройка Bind9

Это заметка из цикла стетей моего небольшого HowTo по Debian Jessie.

Для начала установим необходимые пакеты:

gw~$ sudo apt-get install bind9 bind9-host bind9utils

А также добавим bind9 в автозагрузку:

gw~$ sudo systemctl enable bind9

Дальше настройка.
Опишу несколько вариантов, чтоб дать возможность каждому понять что и как настраивать, а вы уже сами выбирайте что вам больше подходит:
1. Кэширующий DNS сервер
2. Внутренние зоны
3. Внешние зоны
4. Передача/прием зон (настройка режима master/slave)

Поехали … Читать полностью

FreeBSD 9.x — Настройка Master/Slave named (Bind9)

Хорошо когда чтолибо работает автоматически и так как хочется! Меньше рутины — больше времени для веселья!
Есть 2 сервера с FreeBSD, на них установлен Bind9 (во FreeBSD он зовется named) и задача — настроить на них Bind в режиме Master/Slave, для того чтобы любые изменения зон на Master автоматически транслировались на Slave. Согласитесь, негоже одни и те же настройки повторять на разных серверах, когда они могу синкаться автоматически 🙂

Bind Master host — 111.111.111.111
Bind Slave host — 99.99.99.99

Чтобы не повторяться с путями, переходим в директорию bind-а:

root@master:~ # cd /etc/namedb

Не люблю когда все навалено в одну директорию скопом, поэтому для ключей я создал отдельную директорию:

root@master:/etc/named# mkdir keys

Генерация ключа — простая штука, в help-е dnssec-keygen можете найти все типы поддерживаемых ключей, я выбрал HMAC-SHA512

root@master:/etc/namedb# dnssec-keygen -K keys -a HMAC-SHA512 -b 512 -n HOST -r /dev/urandom master.key
Kmaster.key.+163+63477
root@master:/etc/namedb#

тут, -K keys — директория куда сохранится сгенереный ключ
-a HMAC-SHA512 — тип шифрования
-b 512 — размер
-n HOST — тип ключа, в данном случае на хост
-r /dev/urandom — место одкуда берем случайную последовательность символов
master.key — название ключа, может быть каким хотите, это особой роли не играет

Сам сгенеренный файл нам не нужен, нам нужен только ключ, чтобы его найти смотрим файлик .private, интересуют строка Key.
К примеру, у меня так:

root@master:/etc/namedb# cat keys/Kmaster.key.+163+63477.private
Private-key-format: v1.3
Algorithm: 165 (HMAC_SHA512)
Key: P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==
Bits: AAA=
Created: 20141028083403
Publish: 20141028083403
Activate: 20141028083403
root@master:/etc/namedb#

Создаем файлик, куда поместим ключ нашего master сервера:

root@master:/etc/namedb# vim keys/my.keys

формат такой:

key "master.key" {
  algorithm HMAC-SHA512;
  secret "P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==";
};

Подключаем этот файл в конфиг named, для этого открываем главный конфиг named.conf

root@master:/etc/namedb# vim named.conf

и добавляем строчку (куда добавлять — не имеет значения, я добавил непосредственно перед частью конфига с master зонами, чтоб было на виду):

include "/etc/namedb/keys/my.keys";

Теперь создадим простенькую зону для проверки правильной работы сервиса, я использовал вот такую зону для тестов:

root@master:/etc/namedb# cat master/black13-org-ua.db
$TTL 604800 ; 1 hour default TTL
black13.org.ua. IN      SOA     ns1.black13.org.ua.     admin.black13.org.ua.   (
                                2014102801 ; Serial
                                8H ; Refresh
                                1H ; Retry
                                1W ; Expire
                                1D ) ; minimum, seconds
;
; DNS Servers
                IN      NS      ns1.black13.org.ua.
                IN      NS      ns2.black13.org.ua.
; MX Records
;                IN      MX 10   mx.black13.org.ua.
;                IN      MX 20   mail.example.org.
                IN      A       155.12.21.155
; Machine Names
localhost       IN      A       127.0.0.1
ns1             IN      A       111.111.111.111
ns2             IN      A       99.99.99.99
;mx              IN      A       88.88.88.88
;mail            IN      A       192.168.1.5

; Aliases
www             IN      CNAME   black13.org.ua.

root@master:/etc/namedb#

Теперь те зоны которые хотим передавать на slave-сервер (я тренировался на тестовой black13.org.ua) нужно настроить вот так:

zone "black13.org.ua" {
    type master;
    file "/etc/namedb/master/black13-org-ua.db";
    notify yes;
    allow-transfer { 99.99.99.99; key "master.key";};
    allow-update { none; };
};

И чтоб применить изменения — перегружаем named (bind):

root@master:/etc/namedb# service named restart
Stopping named.
Waiting for PIDS: 1835.
Starting named.
root@master:/etc/namedb#

С мастером все!

Настройка slave сервера тоже не сложная!
Сначала тоже самое … переходим в директорию /etc/namedb и создаем директорию keys:

root@slave:~ # cd /etc/namedb
root@slave:/etc/namedb# mkdir keys

Тектовым редактором создаем файл ключа:

root@slave:/etc/namedb# vim keys/master.key

Формат на Slave-сервере чуть другой чем на мастере, ключ такойже:

key "master.key" {
  algorithm HMAC-SHA512;
  secret "P6dUIUT5pfdgYtsnN90ePPeWqV1l3695RS56dBPsn3EmYDkpdQ5ts9Ym8ZqKkDezRAm8s9ljZjpvU1rTUuTssA==";
};
server 111.111.111.111 {
  keys { master.key; };
};

Теперь в главном конфиге named.conf нужно включить конфигурацию ключа:

include "/etc/namedb/keys/master.key";

и в этом же конфиге пример зоны:

zone "black13.org.ua" {
    type slave;
    file "/etc/namedb/slave/black13-org-ua.db";
    masters { 111.111.111.111; };
    allow-notify { 111.111.111.111; };
};

Обратите внимание что на slave нужно размещать файлы зон в директории /etc/namedb/slave, иначе нарветесь на ошибку:

Oct 29 11:21:03 slave named[68349]: dumping master file: /etc/namedb/master/tmp-7f25W0C4p4: open: permission denied

Все! Настройка закончена.
Перегружаем named (bind):

root@slave:/etc/namedb# service named restart
Stopping named.
Waiting for PIDS: 1743.
Starting named.
root@slave:/etc/namedb#

И вот он результат! Если вы все сделали верно, на slave-сервере в директории /etc/namedb/slave появится файлик black13-org-ua.db с вот таким содержимым:

root@slave:/etc/namedb# cat slave/black13-org-ua.db
$ORIGIN .
$TTL 604800     ; 1 week
black13.org.ua          IN SOA  ns1.black13.org.ua. admin.black13.org.ua. (
                                2014102801 ; serial
                                28800      ; refresh (8 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.black13.org.ua.
                        NS      ns2.black13.org.ua.
                        A       155.12.21.155
$ORIGIN black13.org.ua.
localhost               A       127.0.0.1
ns1                     A       111.111.111.111
ns2                     A       99.99.99.99
www                     CNAME   black13.org.ua.
root@slave:/etc/namedb#

А теперь самое веселое … на мастере поменяйте чтолибо в файлике black13-org-ua.db (смените либо добавьте HOST A,CNAME,TXT или что угодно), увеличте на 1 параметр «serial» и перегрузите named. На slave это изменение применится автоматически без каких либо вмешательств со стороны админа 🙂

Хай щастить!

Bind9 в режиме forwarding в Debian Squeeze

Както давным-давно я настраивал аналогичный сервис в OpenBSD. По аналогии той статьи только что настроил bind в Debian.
Ничего сверхестесственного делать ненужно 🙂
Сначала просто ставим bind9 штатным средством apt

root@gw > apt-get install bind9

Потом редактируем 2 конфига. Файлик номер один приводим к такому виду:

root@gw > vim /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0s placeholder.
        allow-query { clients; };
        allow-recursion { clients; };
        forward only;
        forwarders {
                194.183.162.193;
                194.183.162.130;
        };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { none; };
        version "";
        listen-on    { 192.168.240.1; 127.0.0.1; };
};

А в файлик номер два, просто для удобства, добавим группу clients наших будущих клиентов:

root@gw > vim /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
acl clients {
127.0.0.1;
192.168.240.0/24;
};

Вот и закончили конфигурить 🙂
Теперь просто перезапускаем сервис командой:

root@gw > service bind9 restart

Правим /etc/resolv.conf примерно до такого вида:

root@gw > cat /etc/resolv.conf
search mydomain.com.ua
#nameserver 194.183.162.193
#nameserver 194.183.162.130
nameserver 127.0.0.1
root@gw >

И проверяем работоспособность нашего новоиспеченного сервиса:

root@gw > dig meta.ua

; <<>> DiG 9.7.3 <<>> meta.ua
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40189
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;meta.ua.           IN  A

;; ANSWER SECTION:
meta.ua.        6534    IN  A   194.0.131.18

;; AUTHORITY SECTION:
meta.ua.        4970    IN  NS  ns4.top.net.ua.
meta.ua.        4970    IN  NS  ns5.top.net.ua.

;; ADDITIONAL SECTION:
ns4.top.net.ua.     235 IN  A   88.81.249.204
ns5.top.net.ua.     235 IN  A   88.81.254.204

;; Query time: 65 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Aug  3 18:44:31 2011
;; MSG SIZE  rcvd: 117

root@gw >

Как видите, нам ответил сервер 127.0.0.1#53(127.0.0.1) тоесть все работает на ура!
Если чтото идет нетак — смотрите логи в /var/log/daemon.log
Удачи 😉

OpenBSD — Настраиваем named в режиме Forwarding

Все что нам нужно для нормальной работы named в OpenBSD присутствует сразу после установки. Ничего я не доустанавливал — только чуток подправил конфиг «под себя» и named заработал как миленький 🙂

Сразу оговорюсь, что нужды у меня были весьма скромные — просто заставить работать named в режиме forwarding на DNS-сервера провайдера (в данном случае Cyfra).

Все что касается named в OpenBSD находится в директории /var/named. Переходим под root и идем туда:

root@gw:~# cd /var/named/
root@gw:/var/named#

Теперь смотрим что у нас тут есть:

root@gw:/var/named# ls -l
total 24
drwxr-xr-x  2 root  wheel  512 Mar 17 18:52 dev
drwxr-x---  2 root  named  512 Feb 14 00:16 etc
drwxr-xr-x  2 root  wheel  512 Jul 10  2009 master
drwxrwxr-x  2 root  named  512 Jul 10  2009 slave
drwxr-xr-x  2 root  wheel  512 Jul 10  2009 standard
drwxrwxr-x  2 root  named  512 Jul 10  2009 tmp
root@gw:/var/named#

Думаю понятно каждому что для настройки named надо идти в директориб etc — так и делаем:

root@gw:/var/named# cd etc/
root@gw:/var/named/etc#

Смотрим что за конфиги у нас тут есть:

root@gw:/var/named/etc# ls -l
total 28
-rw-r-----  1 root  named  1561 Jul 10  2009 named-dual.conf
-rw-r-----  1 root  named  1348 Jul 10  2009 named-simple.conf
-rw-r-----  1 root  named  1472 Feb 14 00:15 named.conf
-rw-r-----  1 root  named    77 Jan 16 09:35 rndc.key
-rw-r--r--  1 root  wheel  3002 Jul 10  2009 root.hint
root@gw:/var/named/etc#

Итак видим главный конфиг — named.conf Открываем его для редактирования любимым редактором, мне нравится vim:

root@gw:/var/named/etc# vim named.conf

И добавляем то что нам нужно для того чтобы named смог:

  • работать в режиме forwarding
  • принимал запросы от нашего сервера и клиентов из внутрисети

У меня после внесенных правок конфиг приобрел такой вид:

root@gw:/var/named/etc# cat named.conf
// $OpenBSD: named-simple.conf,v 1.9 2008/08/29 11:47:49 jakob Exp $
//
// Example file for a simple named configuration, processing both
// recursive and authoritative queries using one cache.

// Update this list to include only the networks for which you want
// to execute recursive queries. The default setting allows all hosts
// on any IPv4 networks for which the system has an interface, and
// the IPv6 localhost address.
// Для удобства создаем группу в которую входит сам сервер и клиенты внутрисети
acl clients {
127.0.0.1;
192.168.100.0/24;
};

options {
version "";     // Удаляем данные об версии named в ответах

listen-on    { 192.168.100.2; 127.0.0.1; }; // "слушаем запросы" только тут
listen-on-v6 { none; }; // Отрубаем IPv6

empty-zones-enable yes;
allow-query { clients; }; // Розрешаем запросы для нашей группы clients
allow-recursion { clients; }; // Розрешаем рекурсивные запросы для clients
forward first; // Запросы перенаправляем на DNS сервера провайдера Cyfra
forwarders { 62.80.160.130; 62.80.160.140; }; // Cyfra-вские DNS - servers
};

logging {
category lame-servers { null; };
};

// Standard zones
//
zone "." {
type hint;
file "etc/root.hint";
};

zone "localhost" {
type master;
file "standard/localhost";
allow-transfer { localhost; };
};

zone "127.in-addr.arpa" {
type master;
file "standard/loopback";
allow-transfer { localhost; };
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "standard/loopback6.arpa";
allow-transfer { localhost; };
};

include "/etc/rndc.key";

// Master zones
//
//zone "myzone.net" {
//      type master;
//      file "master/myzone.net";
//};

// Slave zones
//
//zone "otherzone.net" {
//      type slave;
//      file "slave/otherzone.net";
//      masters { 192.0.2.1; [...;] };
//};
root@gw:/var/named/etc#

Чтобы управлять named-ом с помощью утилитки rndc — необходимо вставить такой вот код в конфиг:

include "/etc/rndc.key";

Иначе rndc будет ругаться на отсутствие ключа.

С настройкой закончили 🙂 Ну какбы! Непомешает и проверить правильность конфига. Для проверки конфига named есть специальный скриптик — named-checkconf. Использовать его очень просто:

root@gw:~# named-checkconf /var/named/etc/named.conf
root@gw:~#

Если в ответ на такую команду тишина — значит все путем, конфиг не содержит синтаксических ошибок и может быть использован. Это не означает что он будет работать так как вы задумали, но дает уверенность что named с ним запустится 🙂

Запускаю named командочкой:

root@gw:/var/named/etc# named -4

Для того чтобы он автоматически запускался при старте сервера добавляем в /etc/rc.conf.local такую строчку:

root@gw:/var/named/etc# grep -i named /etc/rc.conf.local
### Enable Named ###
named_flags="-4"
root@gw:/var/named/etc#

Вот и все 🙂 Как видите — проще простого. Работает исправно и стабильно — пока глюков не наблюдал 🙂

Всем удачи!