В интернете имеется достаточно мануалов на данную тему, но пытаясь настроить по ним DNS сервер я столкнулся с рядом проблем, поэтому была написана данная статья с собственными рабочими настройками.
Устанавливаем bind:
#apt-get install bind9
Основные файлы конфигурации находятся в папке /etc/bind.
Если нам нужно чтобы наш сервер был кеширующим то добавляем в файл /etc/bind/named.conf.options следующую запись:
forwarders { 0.0.0.0; 0.0.0.0; }; |
0.0.0.0 заменяете на адреса основного DNS сервера.
Параметр listen-on указывает какой адрес должен прослушивать сервер, по умолчанию стоит any, но при желании можно изменить:
listen-on { 127.0.0.1; 86.111.91.19; }; |
Если у нас будет своя доменная, например example.com, то приступим к ее настройке.
Создадим файл /etc/bind/myzones.conf
В конец файла /etc/bind/named.conf добавим строку:
include "/etc/bind/myzones.conf";
Отредактируем файл с нашими зонами /etc/bind/myzones.conf и добавим туда новую запись:
zone "example.com" { type master; file "/etc/bind/db.example"; }; |
Файл /etc/bind/db.example хранит настройки отдельной зоны. Создадим его и добавим следующую запись:
$TTL 86400 ; (1 day) @ IN SOA localhost. root.localhost.( 2011010601 ; Serial 10800 ; Refresh(3 hours) 900 ; Retry (15 minutes) 604800 ; Expire (1 week) 86400 ; Negative Cache TTL (1 day) ); @ IN NS localhost. @ IN A 86.111.91.19 www IN CNAME example.com. |
Здесь важно точно расставить все знаки - после доменных имен обязательно должны стоять точки.
Перезапускаем сервер:
#rndc reload |
И проверяем
# nslookup > example.com Server: 127.0.0.1 Address: 127.0.0.1#53 Name: example.com Address: 86.111.91.19 |
Основная настройка завершена, все должно работать.
Но еще остается вопрос безопасности. Чтобы обезопасить себя, желательно изменить рабочие папки сервера.
Останавливаем процесс:
#/etc/init.d/bind9 stop |
Отредактируем файл /etc/default/bind9. Строку
OPTIONS="-u bind"
|
Заменим на
OPTIONS="-u bind -t /var/lib/named"
|
Создадим новые директории:
#mkdir -p /var/lib/named/etc #mkdir /var/lib/named/dev #mkdir -p /var/lib/named/var/cache/bind #mkdir -p /var/lib/named/var/run/bind/run |
Переместим основной каталог с конфигурацией в новый:
#mv /etc/bind /var/lib/named/etc |
Создадим символическую ссылку на новую директорию на случай обновления:
ln -s /var/lib/named/etc/bind /etc/bind |
Создадим девайсы и выставим права на директории:
#mknod /var/lib/named/dev/null c 1 3 #mknod /var/lib/named/dev/random c 1 8 #chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random #chown -R bind:bind /var/lib/named/var/* #chown -R bind:bind /var/lib/named/etc/bind |
Что бы не возникло проблем с доступом необходимо изменить файл /etc/apparmor.d/usr.sbin.named перед этим остановив сервис
/etc/init.d/apparmor stop |
Старые пути к каталогам заменяем на новые. Вот так он выглядит после редактирования:
# vim:syntax=apparmor # Last Modified: Fri Jun 1 16:43:22 2007 #include /usr/sbin/named { #include #include capability net_bind_service, capability setgid, capability setuid, capability sys_chroot, capability sys_resource, # /etc/bind should be read-only for bind # /var/lib/bind is for dynamically updated zone (and journal) files. # /var/cache/bind is for slave/stub data, since we're not the origin of it. # See /usr/share/doc/bind9/README.Debian.gz #/etc/bind/** r, старый путь /var/lib/named/etc/bind** r, #новый путь /var/lib/bind/** rw, /var/lib/bind/ rw, /var/cache/bind/** rw, /var/cache/bind/ rw, # gssapi /etc/krb5.keytab kr, /var/lib/named/etc/bind/krb5.keytab kr, # ssl /etc/ssl/openssl.cnf r, # dnscvsutil package /var/lib/dnscvsutil/compiled/** rw, /proc/net/if_inet6 r, /proc/*/net/if_inet6 r, /usr/sbin/named mr, /var/lib/named/var/run/named/named.pid w, /var/lib/named/var/run/named/session.key w, # support for resolvconf /var/run/named/named.options r, # some people like to put logs in /var/log/named/ instead of having # syslog do the heavy lifting. /var/log/named/** rw, /var/log/named/ rw, } |
Запускаем сервисы:
# /etc/init.d/apparmor start # /etc/init.d/bind9 start |
Все должно работать.
listen-on-v6 - это для ipv6
ОтветитьУдалитьПоэтому для ipv4 нужно писать:
listen-on
Исправил. Спасибо)))
ОтветитьУдалитьПодскажите пожалуйста, у меня 2 сетевые карты (1 на модем для нета, 2-я для внутренней сети) DNS на сетку внутреннюю тоесть нужен, но чтото глючит , когла первую сетевуху включаешь((((
ОтветитьУдалитьlisten-on { адрес }; Указываете адрес интерфейса на котором должен работать.
УдалитьА на первой сетевой настройки сети статические или DHCP?
В файле /etc/resolv.conf должен быть указан ваш ДНС:
nameserver 127.0.0.1
/etc/resolv.conf там указаны только DNS ники виртуальной машины))). А nameserver 127.0.0.1 - это же одно и то же что и localhost ??? и свой внутренний ip же можно поставить на котором DNS-ник свой поднят??? я так понял. А так работает вроде все, только не нравятся названия 2 го ит д уровня, неужели нельзя просто сделать, как под виндой когда настраиваешь (windows server -> DNS server), чтобы просто было , например \\server или \\printer
Удалитьребят все настроил конечно, но… Как сделать так, чтобы за место допустим принтера \\printer.example.com писать просто \\printer и получать доступ???? как сделать чтобы по первому уровню только заходило????
ОтветитьУдалитьв файле зоны добавьте запись:
Удалитьprinter IN A х.х.х.х
где х.х.х.х-ваш адрес
/etc/bind/db.example в этот файл же???
УдалитьЕсли зона example.com как у вас то получается следующее:
Пример записи: printer IN A 192.168.10.25 ; Можно создать ДНС запись сетевого принтера который находится по адресу 192.168.10.25
доступ к нему по след ссылке получается \\printer.example.com , а я хочу чтобы просто \\printer
доброго времени суток !
ОтветитьУдалитьсделал всё как написано в статье.... но при запуске apparmor (# /etc/init.d/apparmor start) происходит ошибка: AppArmor parset error for /etc/apparmor.d/urs.sbin.named in /etc/apparmor.d/urs.sbin.named at line 3: Coult not open '/urs/sbin/named'
подскажите что не так... буду признателен !