Настройка Bind9
|  | Рассмотрим примерный конфигурационный файл кеширующего DNS-сервера для отдельно стоящего сервера. Кэширующий сервер имён – это сервер имён, не отвечающий ни за какую зону. Он просто выполняет запросы от своего имени и сохраняет результаты для своего последующего использования. О сетевом сервисе DNS и настройке BIND9 еще можно почитать в Главе 25 Руководства FreeBSD. По умолчанию во FreeBSD используется одна из версий программы BIND (Berkeley Internet Name Domain), являющейся самой распространенной реализацией протокола DNS. | 
DNS – это протокол, при помощи которого имена преобразуются в IP-адреса и наоборот. FreeBSD в настоящее время поставляется с сервером DNS – BIND9, предоставляющим расширенные настройки безопасности, новую схему расположения файлов конфигурации и автоматические настройки для chroot(8). К тому же BIND9 считается наименее уязвимой для внешних атак (FreeBSD автоматически запускает named в ограниченном окружении (chroot(8))). Эта версия DNS-сервера поддерживает списки управления доступом для запросов, передачи зон подчиненным (вторичным) DNS-серверам, а также динамические обновления своих зон с вышестоящих (первичных) DNS-серверов. Этой версией поддерживается стандарт динамических обновлений и уведомления об изменениях зоны, а так же он использует механизм инкрементальной передачи зоны, позволяющий подчиненным DNS-серверам запрашивать у вышестоящих DNS-серверов только изменения зональных данных. Это позволяет намного ускорить передачу зон.
На момент написания статьи я настраивал BIND 9.6.1-P1 на сервере под управлением FreeBSD 7.2-RELEASE.
 # cat /etc/namedb/named.conf
// так выглядит комментарий
acl self { 127.0.0.1; }; // задаем переменную self, в которой перечислим ip-адреса нашего сервера,\
                                      на которых будет работать bind
acl trust { self; }; // задаем переменную, в которой перечислим ip-адреса, с которых будет разрешено\
                                      посылать запросы через наш DNS-сервер
// секция глобальных параметров
options {
        directory       "/etc/namedb"; // рабочий каталог bind, относительно которого ниже мы будем обозначать\
                                      остальные каталоги
        pid-file        "/var/run/named/pid"; // pid-файл
        dump-file       "/var/dump/named_dump.db"; // расположение dump-файла корневой зоны при временной потере\
                                      доступа ко всем корневым серверам
        statistics-file "/var/stats/named.stats"; // расположение файла статистики
        listen-on       { self; }; // указываем bind на каких интерфейсах работать
        listen-on-v6    { none; }; // запрещаем использовать IPv6
        version         "Hello, pal!"; // здесь вы можете указать версию вашего bind (для безопасности рекомендуют\
                                      этого не делать)
        allow-query     { self; }; // от кого разрешаем принимать запросы
        forwarders      { 12.34.56.78; }; // для снижения нагрузки на свой сервер вы можете указать тут DNS-сервера\
                                      своего провайдера
        };
...
	Теперь предлагаю немного отвлечься от настройки файла named.conf. Предлагаю вам рассмотреть интересный способ удаленного администрирования вашим DNS-сервером – утилита rndc. Для того, чтобы начать ей пользоваться, вам необходимо создать для нее конфигурационный файл и секретный ключ, с помощью которых она будет взаимодействовать с вашим bind. Для это задачи существует команда rndc-confgen.
    Выполняя команду:
# rndc-confgen
вы получите на стандартном выводе что-то вроде:
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "34f88008d07deabbe65bd01f1d233d47";
        };
options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
        };
 # End of rndc.conf
 #
 # Use with the following in named.conf, adjusting the allow list as needed:
 # key "rndc-key" {
 #       algorithm hmac-md5;
 #       secret "34f88008d07deabbe65bd01f1d233d47";
 #       };
 #
 # controls {
 #       inet 127.0.0.1 port 953
 #               allow { 127.0.0.1; } keys { "rndc-key"; };
 #       };
 # End of named.conf
	Незакомментированную часть вывода помещаете в файл /etc/namedb/rndc.conf
# cat /etc/namedb/rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "34f88008d07deabbe65bd01f1d233d47";
        };
options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
        };
	Закомментированную часть вывода команды rndc-confgen помещаете в конфигурационный файл /etc/namedb/named.conf:
...
key "rndc-key" {
        algorithm hmac-md5;
        secret "34f88008d07deabbe65bd01f1d233d47";
        };
controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
        };
...
	В результате работы команды rndc-confgen в каталоге /etc/namedb/ должен появиться файл rndc.key, со следующим содержимым:
 # cat /etc/namedb/rndc.key
key "rndc-key" {
        algorithm hmac-md5;
        secret "34f88008d07deabbe65bd01f1d233d47";
        };
	Если у вас уже существовал там ключ, удалите его и замените новым.
Во всех случаях строчка secret “34f88008d07deabbe65bd01f1d233d47”; у вас должна быть одинаковой! Значение secret сгенерировала команда rndc-confgen.
Проверить сделанную вами работу вы сможете, когда полностью настроите свой DNS-сервер и запустите его. Тогда, при выполнении команды:
# rndc status
если вы увидите что-то похожее на:
version: 9.6.1-P1 (Hello, pal!) CPUs found: 2 worker threads: 2 number of zones: 14 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running
— значит утилита rndc успешно подключилась к вашему bind, авторизовалась с помощью ключа, который мы только что создали, и запросила у bind статус DNS-сервера, что вам и показали.
Существует множество полезных ключей, с помощью которых данная утилита позволит вам мониторить и управлять вашим DNS-сервером. Достаточно запустить ее без аргументов и вы увидите доступные команды и помощь по ним. (Советую сразу же создать дамп-файл командой rndc dumpdb).
Продолжим пояснения по конфигурационному файлу /etc/namedb/named.conf:
...
zone "." {
        type hint;
        file "named.root"; //как получить актуальный файл корневой зоны написано ниже
        };
zone "0.0.127.in-addr.arpa" {
        type master;
        file "master/localhost.rev";
        notify no;
        };
...
	Файл localhost.rev выглядит примерно так:
 # cat /etc/namedb/master/localhost.rev
$TTL    3600
@       IN      SOA     host.your_domain.ru.       root.host.your_domain.ru.  (
                                2009110601      ; Serial
                                3600            ; Refresh
                                900             ; Retry
                                3600000         ; Expire
                                3600 )          ; Minimum
        IN      NS      host.your_domain.ru.
1       IN      PTR     localhost.your_domain.ru.
	Следующими настройками мы будем собирать и записывать логи bind в различные фалы. Формат секции записи логов по каналам имеет вид:
channel имя-канала {
     ( file имя-файла
         [ versions ( число | unlimited ) ]
         [ size максимальный-размер ]
       | syslog syslog_facility
       | stderr
       | null );  // мы тут будем указывать имя файла, в который будем писать логи этого канала (относительно\
                    рабочего каталога); количество версий файлов логов; размер файла, при котором\
                    происходит перенумерация файла лога. если количество версий указано не будет, логирование\
                    прекратиться по достижению указанного размера файла.
     [ severity (critical | error | warning | notice |
                 info | debug [ уровень ] | dynamic ); ] // фильтр логов, кукую именно информацию мы будем заносить\
                    в этот канал
     [ print-category yes-или-no; ] // заносим или нет в лог тип категории события
     [ print-severity yes-или-no; ] // заносим или нет в лог тип "серьезности" собфтия
     [ print-time yes-или-no; ] // заносим или нет в лог время события
   };
	Итак – это мои настройки в файле /etc/namedb/named.conf:
...
logging { // параметры логирования
        channel default_ch { // обозначаем канал логирования default_ch
                file "/var/log/named.log" versions 3 size 800k;
                severity info;
                print-time yes;
                print-category yes;
        };
        channel security_ch { // обозначаем канал логирования security_ch
                file "/var/log/security.log" versions 3 size 800k;
                severity info;
                print-time yes;
                print-category yes;
        };
        channel transfer_ch { // обозначаем канал логирования transfer_ch
                file "/var/log/transfer.log" versions 3 size 800k;
                severity info;
                print-time yes;
                print-category yes;
        };
        channel lame-ch { // обозначаем канал логирования lame-ch
                file "/var/log/lamers.log" versions 3 size 800k;
                severity info;
                print-time yes;
                print-category yes;
        };
        category lame-servers { lame-ch; }; // пишем в канал lame-ch события от "кривых" DNS-серверов
        category default { default_ch; }; // пишем в канал default_ch все, для чего нет собственного канала
        category security { security_ch; }; // пишем в канал security_ch о событиях безопасности
        category xfer-in { transfer_ch; }; // пишем в канал transfer_ch об отдаче зон
        category xfer-out { transfer_ch; }; // пишем в канал transfer_ch о приеме зон
        category notify { transfer_ch; }; // пишем в канал transfer_ch уведомления и факты регистрации
        };
	Теперь, после окончания настройки bind, вам осталось только с помощью команды wget или fetch получить актуальный файл корневой зоны (named.root) с сервера:
# fetch ftp://ftp.internic.net/domain/named.root
и положить его в каталог /etc/namedb/ с заменой существующего. Желательно периодически повторять эту процедуру, или настроить эту операцию через cron.
Теперь настало время запустить наш DNS-сервер:
/etc/rc.d/named start
Проверяем работу утилитой rndc, как было описано выше.
Для начала выполните команду:
# ps -ax | grep named 476 ?? Is 0:01,19 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s 704 ?? Is 0:00,04 /usr/sbin/named -t /var/named -u bind 1022 p0 R+ 0:00,00 grep named
Если вы видите примерно это же – то процесс запущен.
Для пущей уверенности можно выполнить следующую команду (если она у вас есть):
# lsof -i tcp | grep LISTEN | grep named named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN)
Теперь надо настроить наш сервер на работу с только что установленным DNS-сервером. Для этого вам необходимо внести изменения в файл /etc/resolv.conf. Приведите его к следующему виду:
# cat /etc/resolv.conf domain your_domain.ru nameserver 127.0.0.1
В комплекте с сервером BIND9 поставляются утилиты DNS dig, host и nslookup для исследования доменного пространства. С их помощью мы проверим, как работает только что настроенный и запущенный вами DNS-сервер.
Утилита host позволяет получать значения RR указанного типа для указанного доменного имени. Формат вызова:
host [ -управляющие-ключи ]  [ -ключи-запроса ] доменное-имя-или-адрес [ опрашиваемый-сервер ].
По умолчанию, используется сервер, описанный при настройке клиентской библиотеки. Доменные имена считаются абсолютными и список поиска не используется. Более подробная информация на man host.
Утилита dig позволяет получать значения RR указанного типа для указанного доменного имени в формате файла зоны. В виде комментариев выдается масса вспомогательной информации, в т.ч. интерпретация пакета, полученного в ответ на запрос. Формат вызова:
dig [ @опрашиваемый-сервер ] [ -опции-dig ] доменное-имя [ тип-записи ] [ класс-записи ] [ +опции-запроса ]
По умолчанию, используется сервер, описанный при настройке клиентской библиотеки. Доменные имена считаются абсолютными и список поиска не используется. В качестве требуемого типа записи можно использовать также псевдотипы AXFR (зона передается только от уполномоченного сервера), ixfr=опорный-номер-версии и ANY, по умолчанию: A. В одной командной строке можно сделать несколько запросов.
Утилита nslookup объявлена устаревшей и навязчиво напоминает об этом при каждом запуске (даже документация не поставляется, отсутствует команда help и некоторые другие). Формат вызова:
nslookup [ -ключи ] доменное-имя [ опрашиваемый-сервер ]
Выполните команду:
 # dig @127.0.0.1 ya.ru
; <<>> DiG 9.6.1-P1 <<>> @127.0.0.1 ya.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; >>HEADER<< opcode: QUERY, status: NOERROR, id: 51090
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;ya.ru.                         IN      A
;; ANSWER SECTION:
ya.ru.                  2843    IN      A       213.180.204.8
ya.ru.                  2843    IN      A       77.88.21.8
ya.ru.                  2843    IN      A       93.158.134.8
;; AUTHORITY SECTION:
ya.ru.                  2843    IN      NS      ns1.yandex.ru.
ya.ru.                  2843    IN      NS      ns5.yandex.ru.
;; ADDITIONAL SECTION:
ns1.yandex.ru.          79700   IN      A       213.180.193.1
ns5.yandex.ru.          79701   IN      A       213.180.204.1
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Dec  4 14:04:11 2009
;; MSG SIZE  rcvd: 146
	Если в результате ее работы вы видите примерно тоже самое – значит вам DNS-сервер отработал команду правильно.
Теперь выполните команду:
# host ya.ru ya.ru has address 77.88.21.8 ya.ru has address 93.158.134.8 ya.ru has address 213.180.204.8 ya.ru mail is handled by 10 mx.yandex.ru.
Если ваш DNS-сервер ответил примерно таким образом – значит он работает правильно!
Если данные команды не вернули никаких результатов, надо смотреть лог /var/log/messages на предмет ошибок, которые заносит туда ваш bind. Анализируя их, постарайтесь понять, с чем связана некорректная работа DNS-севера. Основным недосмотром является неправильная настройка сетевых файерволов.
В заключении хочу сказать о некоторых встроенных в bind командах диагностики.
- named-checkzone – проверяет синтаксис и целостность файлов зон. Такие же проверки выполняются каждый раз перед их загрузкой bind’ом. Но считаю полезным все-таки это делать перед их загрузкой сервером имен.
- named-compilezone – выполняет более строгие проверки, чем named-checkzone, т.к. в результате ее работы сформируется дамп актуальных зон, который в свою очередь будут использоваться named.
- named-checkconf – утилита проверки файла-конфигурации named.conf
Удачи!

 
    









Здравствуйте. У меня в локальной сети три компа, к нету имеет доступ только один и хочу чтобы так всё и осталось, но нужно оббновлять антивирусник, тему как это делать нашёл тут:http://wiki.drweb.com/index.php/%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%97%D0%B5%D1%80%D0%BA%D0%B0%D0%BB%D0%BE_%D0%BD%D0%B0_http_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5_%D0%B4%D0%BB%D1%8F_Dr.Web_7
Апач настроил прописал на своём и на компах в сети адреса DNS сервера, но не могу сам DNS сервер настроить. Подскажите как мне это сделать, или если можно настроики для BIND. Заранее благодарен.