пятница, 27 февраля 2009 г.

Быстро поднимаем DNS-сервер (BIND9) под debian

Итак, после небольшого перерыва решил написать небольшую заметку на тему DNS. Не буду рассказывать теорию(в Интернете ее полно). Перейдем сразу к делу.

Дано:
локальная сеть 192.168.0.0/24
сервер: debian 5. Предположим, что у него ip 192.168.0.1
Требуется: поднять dns-сервер, таким образом, что бы для внутренней локалки были как свой домен, так и root-DNS Интернета. Домен 1-го уровня: пусть будет ex. Тогда хосты будут иметь имена test.ex, h1.ex и т.п. Жирным выделено то, что было добавлено к стандартному конфигу.
Решение(все действия из-под root или через sudo; здесь примеры конфигов, и то что нужно поправить в них для решения нашей задачи):
debian:/#apt-get install bind9
debian:/etc/bind# cat ./named.conf.options
acl "corpnets" {192.168.0.0/24; 127.0.0.1;};
options {
directory "/var/cache/bind";
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
allow-query {"corpnets";};
};
debian:/etc/bind# cat ./named.conf
include "/etc/bind/named.conf.options";

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";
};

zone "ex." {
type master;
file "/etc/bind/db.ex";
};

zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.ex.rev";
};


include "/etc/bind/named.conf.local";
debian:/etc/bind# touch ./db.ex
debian:/etc/bind# cat ./db.ex
;
; BIND reverse data file for broadcast zone
;
$TTL 604800
@ IN SOA ex. root.ex. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.ex.

ns A 127.0.0.1
nikitar A 192.168.0.70
debian A 192.168.0.167
debian:/etc/bind# touch ./db.ex.rev
debian:/etc/bind# cat ./db.ex.rev
;
; BIND reverse data file for broadcast zone
;
$TTL 604800
@ IN SOA ex. root.ex. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.

70 PTR nikitar.ex
167 PTR debian.ex
debian:/etc# cat /etc/resolv.conf
search ex
nameserver 127.0.0.1

debian:/etc# /etc/init.d/bind9 restart
Stopping domain name service...: bind9.
Starting domain name service...: bind9.


Все. Теперь можно пинговать nikitar.ex и ya.ru.


http://www.biocontrol.ru

14 комментариев:

Анонимный комментирует...

Не очень понятно что вы этим хотели сказать.
Лично я предпочитаю хорошо комментировать свои конфиги, даже для себя лично, самому же если что будет легче разобраться. Вот почему:

cat ./db.ex
cat ./db.ex.rev
выдают в заголовке комментарий
BIND reverse data file for broadcast zone
это неправильно. Вы разберетесь. Другой человек не факт.

> listen-on-v6 { any; };
вы используете ip_v6 ?

И еще интересно, если у вас количество хостов будет зашкаливать за 250 машин как вы будете просматривать такую базу? Через cat как то не очень удобно imho

Анонимный комментирует...

Вот всегда найдутся чудо-критики. Не нравится - напишите лучше. Ну забыл человек удалить строчку listen-on-v6 { any; };

А по поводу cat, то less еще никто не отменял. Когда у человека будет 250 машин, он будет ее использовать, а пока можно и cat'ом :)

Никита комментирует...

Согласен, напишите свою статью. Никаких проблем. Задача была поднять dns за 15 минут. Мной она достигнута. Если перед админом встанет такая срочная задача, он не будет сидеть и изучать маны. Он сначала поставит сервер с минимальными конфигами, которые я здесь выложил. А потом, когда "минимум" заработает, будет изучать.

Анонимный комментирует...

Большое спасибо, оч помогло !
Особенно то что у вас в правильном месте стоит "acl "corpnets" {192.168.0.0/24; 127.0.0.1;};"
я раньше ставил внутрь опций и соответственно работало криво и не везде :)Спасибо!

Анонимный комментирует...

2Никита Привет! У меня почему то после всех изменений, которые ты в статье описал, вообще bind пропал. При попытке рестартить выдает вот это:

Stopping domain name service...: bindrndc: connect failed: 127.0.0.1#953: connection refused
failed!
Starting domain name service...: bind failed!

Подскажи пажалста в чем дело!

Никита комментирует...

Логи покажи после запуска бинда

Unknown комментирует...

Никита, отличная статья, всё понятно написано, но у меня вопрос по следующим двум строкам:

70 PTR nikitar.ex
167 PTR debian.ex

Что значат эти числа перед PTR?

Никита комментирует...

Это "ip адреса". PTR - это как бы реверс зона

Анонимный комментирует...

Хорошая статья!
все работает без косяков!

А можно продолжить тему и "засунуть" это дело в chroot окружение?

Никита комментирует...

Да можно. Посмотрите тут http://www.linux.org/docs/ldp/howto/Chroot-BIND-HOWTO.html

Unknown комментирует...

TO
Stopping domain name service...: bindrndc: connect failed: 127.0.0.1#953: connection refused
failed!
попробуй запусти
nsupdate, named-checkconf, named-checkzone
проверь зоны, посмотри что пишет, в моём случае были ошибки в файлах зоны, ругался даже на то что не было перенесения строки в конце файла.
как пользоваться этими утилитами посмотри в гугле или help

Игорь комментирует...

Настроил, но почему то с другой машины на которой приписал мой dns сервер, не находиятся машины которые я прописал в bind. Т.е. я настроил bind по статье, все нормально bind перегружается, с этой машины все пингуется. На машине в сети прописываю мой dns сервер. При пинге с машины из сети, если я пингую ya.ru то пакет с этой машины на мой dns на порт 53 идет и возвращается, но команда пинг не пишет ip адрес ya.ru. Если я пингую локльную машину которую прописал в bind то пакет не идет на мой dns сервер. Что не так не понимаю.

bagrat комментирует...

вот здесь ошибка кстати неприятная:
debian:/etc/bind#cat db.ex.rev
...
70 PTR nikitar.ex
167 PTR debian.ex

надо так
70 PTR nikitar.ex.
167 PTR debian.ex.

иначе 192.168.0.7 будет ресолвится как nikitar.ex.0.168.192.IN-ADDR.ARPA. а не как nikitar.ex

Diks3D комментирует...

отличный пост, не совсем так сделал, как описал автор, но много извлек полезного для своей конфигурации. Сократило кучу разных моментов, в частности настройку локальных почтовых клиентов ( на мозилке тандерберд ) на соединение с корпоративным локальным сервером.