avatar Ubuntu Настройка кеширующего DNS сервера (BIND) для локальной сети.

Назначение DNS это перевод доменных имен, легко запоминаемых человеком в IP адреса которые понимают компьютеры, этот процесс называется-Разрешение имен.
Что нам даст установка собственного кеширующего DNS сервера?!
Это немного ускорит отклик сайтов + Linux не очень хорошо воспринимает имена NetBios, а ведь иногда приходится находить компьютеры или принтеры внутри локальной сети, а хочется это делать по именам.
Запоминать IP адреса- не удобно, а постоянно лазить к журнал работы DHCP сервера- тоже не наш метод. Вот для таких случаев и нужен DNS в локальной сети.
Сама установка пакета bind9 не отличается сложностью, затыки, обычно возникают на стадии его конфигурирования, т.к. после легко читаемых конфигурационных файлов системы, на человека сваливается непонятный синтаксис, кстати, очень похожий на язык программирования С. Т.к. сервер будет работать внутри локальной сети, то не имеет смысла переносить его в chroot окружение и вся настройка занимает совсем немного времени.
На этом, лирическую часть, можно завершить, переходим к установке и настройке.
Установим DNS сервер Bind9:
sudo apt-get install bind9

После завершения, закачки и установки, нам необходимо отредактировать его конфигурационный файл:
sudo nano /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-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};


Секция forwarders, отвечает за то, куда будет передаваться DNS запрос на разрешение имени, в случае если его нет в собственной базе. Последнее время меня совсем не радует, работа этих серверов у провайдера по этому можно подключить сторонние например гугловские, запомнить IP очень легко 8.8.8.8, на его примере я и буду вести настройку, но никто не мешает использовать, те что вам нравятся больше.

Редактируем секцию, для начала с нее нужно снять комментарии и добавить сторонние DNS, если есть необходимость добавить несколько серверов, например на тот случай если сервер google не выдержит ваших запросов и поломается :), то IP других серверов можно написать в столбик, тогда можно добиться более значительной отказоустойчивости.
forwarders {
          8.8.8.8;
          193.58.251.251;   //Российская служба DNS -SkyDNS
       };

В эту секцию лучше вписать IP того сервера который у вас указан в файле /etc/resolv.conf или вписать туда в секцию nameserver этот IP
Сохраняем изменения и выходим
Перезапускаем сервер и проверяем
Набираем в командной строке nslookup mail.ru
Должно выдать:

Non-authoritative answer:
Name:        mail.ru
Addresses:  94.100.191.202

Это говорит о том, что наш сервер не является, главным в обслуживании этой зоны (mail.ru), но запросы добавил в кеш!
Теперь нужно создать ДНС зону для нашей сети чтобы машины могли находить различные сетевые сервисы — могут быть, например, сетевые принтеры, они могут быть как самостоятельными так и расшаренными на других рабочих станциях.
Нашу зону можно назвать orgname –т.е. название организации.
Первым делом создаем зону, для этого отредактируем named.conf.local

sudo nano /etc/bind/named.conf.local

и добавим в него следующее:
zone "orgname" {
    type master;
    file "/etc/bind/db.orgname";
 };

Сохраняем и выходим
Теперь нам необходимо создать файл настройки зоны
sudo nano /etc/bind/db.orgname

и вставляем в него следующее:
(Прошу отнестись внимательно к синтаксису конфигурационного файла, даже точки имеют значение)

@ IN SOA orgname. root.orgname.    (
        20101015        
        4h              ; время обновления -4 часа
        1h              ; повтор каждый час
        1w              ; как долго хранить информацию -1 неделю
        1d    )         ; TTL (время жизни ) записи - 1 день

@   IN    NS    orgname.        ; имя сервера имен
@   IN    A  192.168.10.1       ; A - запись - IP адрес нашего ДНС сервера который обслуживает эту зону, @ означает что это корневая зона.
*   IN    CNAME  @             
                                
printer IN A 192.168.10.25      ; Можно создать ДНС запись сетевого принтера который находится по адресу 192.168.10.25


Теперь, при добавлении нового сетевого устройства, вам необходимо сделать 2 вещи:
1) Зарезервировать IP адрес на DHCP сервере, о том, как это сделать, можно прочитать в статье- Настройка DHCP сервера
2) Создать DNS зону для этого IP, вида devicename IN A XXX.XXX.XXX.XXX. Где: devicename-сетевое имя устройства; XXX.XXX.XXX.XXX-его IP адрес который зарезервирован на DHCP сервере.

теперь нам необходимо отредактировать файл resolv.conf

sudo nano /etc/resolv.conf


и вписать туда:

nameserver 127.0.0.1


все что там было можно закоментировать поставив #

перезапускам сервер

sudo reboot


Сделано это для того чтобы сервер искал все в собственной базе, а уже потом BIND будет перенаправлять запросы к серверу 8.8.8.8 IP которого вписан в директиве forwarders.

Теперь можно проверять работоспособность:

Если тестирование происходит из под Windows:
ping devicename.orgname


Если тестируем из под Linux:
ping devicename.orgname -c 4

Должны пойти пинги на тот IP который вы указали вместо XXX.XXX.XXX.XXX

На этом настройку DNS сервера можно завершить.
Если возникла необходимость, интегрировать работу DNS с DHCP сервером, то можно воспользоваться статьей: Настройка DNS+DHCP сервера для локальной сети+динамическое обновление DNS зон

49 комментариев

avatar
Статья хорошая(лучше пока не видел), настроил, но мутновато! Автору спасибо!
avatar
А что, конкретно, мутновато? И какие сложности возникли?
avatar
Теперь, при добавлении нового сетевого устройства, вам необходимо сделать 2 вещи: и поехали… и что то не совсем точно перекликается эта статья и настройка dhcp сервера. Статья написана не для гиков — написана доходчиво! Но хотелось бы с Биндом по подробнее) + днс сервер я повесил на 192.168.0.1 в dhcpd.conf и в /etc/network/interfaces gateway у меня 192.168.0.1/ gateway+dhcp+dns — роли сервера.
потом: /etc/bind/db.zonder
@ IN SOA zonder. root.zonder. (
20101015
4h;
1h;
1w;
1d );

@ IN NS zonder.;
@ IN A 192.168.0.1; — адрес указал который указывал dhcpd.conf option domain-name-servers 192.168.0.1; # IP DNS-сервера

* IN CNAME @
— потом:
на человека сваливается непонятный синтаксис, кстати, очень похожий на язык программирования С
согласен видел С++, написал три програмки-! ки! для консоли: комменты в С идут после косых что видно отсюда /etc/bind/named.conf.options так и есть, НО! /etc/bind/db.orgname после точек с запятой идут комменты, точки находятся в табуляции от написанных настроек.Вопрос точки с запятой являются окончанием выражения? или обозначением комментов?
avatar
Попробую рассказать подробнее.
Чтобы сразу было понятно -службы DNS и DHCP работают независимо друг от друга! И им безразлично что делает другая служба и работает она вообще.
Если на этот IP мы повесим не принтер, а ПК -без принтера, но при этом, оставим запись вида Printer.orgname на DNS, не изменив настройки клиентов, то отправка на печать завершится ошибкой-принтера то нет по указанному адресу. Вот для того чтобы принтер всегда получал один и тот же IP и необходимо его резервирование на DHCP, непосредственно за этим устройством.
Если мы имеем постоянный IP за этим устройством, мы можем его добавить в DNS. Cлужбе DNS, также безразлично, что за устройство висит на этом IP, она не занимается проверкой, ей даже безразлично включено это устройство в сеть или нет. Она просто сопоставляет присланное имя и сверяет его с базой, если к этому имени привязан IP то его и отправляют клиенту.
Но если IP не зарезервировать за определенным MAC адресом, то он будет доставаться, кому ни попадя, и работа службы печати будет невозможна! Пока IP не достанется нашему принтеру, а когда это произойдет-вопрос сложный.
Это что касалось взаимодействия служб.
По поводу выдачи серверов ДНС клиентам с помощью DHCP.
DHCP сервер выдает клиенту адрес DNS сервера, можно выдать адрес гугловсгого сервера, а можно и собственного. Если мы даем клиентам через DHCP, сервер гугла, то тут все понятно, все запросы идут на 8.8.8.8, но если мы даем наш DNS, то все запросы на разрешение имен начинают идти к нему. Наш сервер сверяет их со своей базой если имя и IP в ней найдены, то клиенту выдается IP и все нормально. Но если в базе ничего не найдено, то запрос пересылается (процесс называется форвардинг) более вышестоящему серверу который определяется в секции:

forwarders {
8.8.8.8;
};

Далее схема прежняя -гугловский сервер ищет в своей базе имя и если оно там есть, присылает нашему серверу IP, эти данные, в свою очередь, наш сервер добавляет в кеш и после этого начинает отдавать всем клиентам при повторном запросе. Что экономит время.

По поводу синтаксиса файла db.orgname
IN SOA orgname. root.orgname. (
20101015
4h; время обновления -4 часа
1h; повтор каждый час
1w; как долго хранить информацию -1 неделю
1d ); TTL (время жизни ) записи — 1 день

Точка с запятой- комментарий. Начало выражения – (, а его завершение — )

К сожалению мне пока не удалось найти способа добавлять данные (имена ПК) из DHCP сервера в DNS, так как это реализовано в Active Directory, в автоматическом режиме, хотя возможно плохо искал.

avatar
А как узнать и поменять сетевое имя машины (ubuntu) и домена?
avatar
у кого есть возможность помочь с настройкой сервера по teamviewer. пока «играюсь» на виртуалках, ДХЦП вроде получилось а вот с ДНС проблемы. да и еще куча вопросов.
Очень срочно надо поднять сервер в школе, а с этим делом я не сильно знаком. Аська 443629266.
Если кому не трудно помогите.
комментарий был удален
avatar
Здравствуйте попытался поднять DNS по Вашей статье и что-то не получилось.
если делать nslookup на сервере
nslookup mail.ru
Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
Name: mail.ru
Address: 94.100.191.201
nslookup HP4014
Server: 127.0.0.1
Address: 127.0.0.1#53

** server can't find HP4014: NXDOMAIN
Похоже гдето не правильно сделал в файле /etc/bind/db.orient
DHCP не подымал. Пока статикой обойдусь.
Файлы конфигурации:
/etc/bind/named.conf.local
zone «orient» {
type master;
file "/etc/bind/db.orient";
};

файл /etc/bind/db.orient
@ IN SOA orient. root.orient. (
20101015
4h; время обновления -4 часа
1h; повтор каждый час
1w; как долго хранить информацию -1 неделю
1d ); TTL (время жизни ) записи — 1 день

@ IN NS orient.
@ IN A 192.168.10.10
* IN CNAME @

HP4014 IN A 192.168.10.6
HP2605 IN A 192.168.10.4
FILE IN A 192.168.10.2
mail.orient IN A 192.168.10.5
avatar
если вы поднимаете доменную зону orient, то при поиске имени HP4014 необходимо указывать HP4014.orient, а то система не понимает куда ей лезть за разрешением имени данной зоны. Второе, почему необходимо указывать имя полностью-необходимость указывать ДНС суффикс, если в сети работает DHCP сервер, то ДНС суффикс orient он бы раздавал всем клиентам сети и к имени HP4014, автоматически добавлялся ДНС суфикс orient. В результате получилось бы то что вы запросили, но только прозрачно для вас, но запрос имел бы вид HP4014.orient
avatar
Добрый день. У меня аналогичная проблема как и у vmcovalenko.
Ubuntu Server 12.04, BIND 9.8.1-P1.
Результат работы dig:

root@Oberon:/# dig @127.0.0.1 sedna.tseo

; <<>> DiG 9.8.1-P1 <<>> @127.0.0.1 sedna.tseo
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 45508
;; flags qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY:0, ADDITIONAL:0

;;QUESTION SECTION:
;sedna.tseo        IN    A

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN Wed May 30 12:21:10 2012
;; MSG SIZE rcvd: 28


Я полный новичок, только вчера начал осваивать BIND. Как понять в чем дело? Где можно посмотреть лог-файл DNS сервера? Конфиги для BIND уже перепроверял n-ое количество раз, 2 раза настраивал с нуля — результат один и тот же.
avatar
Начал с "чистого листа" — все получилось. Не знаю почему не работало до этого.
Теперь dig выдает следующее:

evg@Oberon:/# dig @127.0.0.1 sedna.tseo

; <<>> DiG 9.8.1-P1 <<>> @127.0.0.1 sedna.tseo
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 55173
;; flags qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY:1, ADDITIONAL:0

;;QUESTION SECTION:
;sedna.tseo        IN    A

;; ANSWER SECTION:
sedna.tseo.            604800 IN    CNAME    tseo.
tseo.                  604800 IN    A        192.168.0.210

;; AUTHORITY SECTION:
tseo.                  604800 IN    NS        tseo.

;; Query time: 6 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN Wed May 30 13:02:30 2012
;; MSG SIZE rcvd: 72
avatar
Я так понял, у вас все заработало!
avatar
а я, обычно, в качестве кэширующего dns-сервера использую dnsmasq. иногда его же и в качестве dhcp-сервера тоже.
но если необходимо поддерживать свои dns-зоны, то ставлю еще и bind. но кэш, обычно, у dnsmasq.
avatar
Очень интересно было бы взглянуть на данный функционал, а главное на аргументы, за его использование!
avatar
ребят все настроил конечно, но… Как сделать так, чтобы за место допустим сервера \\server.orgname писать просто \\server и получать доступ????
avatar
orgname это DNS суффикс, который можно раздавать с помощью DHCP вот вам для примера, кусок конфига настройки DHCP сервера

subnet 192.168.0.0 netmask 255.255.255.0 {   # подсеть и маска
range 192.168.0.5 192.168.0.254; # указываем диапазон IP адресов, которые будут выдаваться клиентам
option domain-name-servers 192.168.0.2; # IP DNS-сервера
option domain-name "orgname"; # можно задать название своей сети (ДНС суффикс) 
option routers 192.168.0.1;  # адрес шлюза или маршрутизатора через который мы выходим в Интернет.
  option broadcast-address 192.168.0.255;  #широковещательный адрес который находится последним в диапазоне IP данной подсети
 default-lease-time 600; # время аренды IP адреса в сек.
  max-lease-time 7200;  # максимальное время аренды IP адреса
}


Вам нужна строка
option domain-name "orgname"; # можно задать название своей сети (ДНС суффикс)


Туда можно добавить название своей сети, теперь к именам типа server, автоматически будет добавляться .orgname
avatar
Спасибо большое за ответ. Настрою DHCP тоже по вашей статье (2 дня в интернете рылся, все статьи кривые были). Ваша статья ток рабочей оказалась и еще одну нашел, подобную, но чую она на основание вашей написана))).
Ответьте еще пожалуйста на пару моих вопросов:
1. Надо создать VPN туннель между сетями (Ubuntu desktop используется как сервер, то есть за ним сеть. И на другой стороне точно также.) Какое лучше программное обеспечение использовать??? Я уже и openVPN и платное… Надо что-то из бесплатного найти ((( Что порекомендуете?)
2. Удаленное управление всем этим хозяйством (сервером), либо удаленное управление рабочим столом, тоже через free ПО, либо через терминал или еще что-то можно… Сказали что OpenSSL как то используют для этого, но так я и не понял… Подскажите плз, если знаете. Заранее ОООгромное спасибо за ответ =).
avatar
Вот вам статья по настройке VPN сервера

А вот какие данные внутри каналла вы будете гонять- ваше дело, если сеть виндовая то RDP, если Linux то SSH вполне хватит, для удаленного управления хозяйством.
avatar
Контроллер Домена под ubuntu случаем не настраивали?? Так то очень нужная штука, но вот как…
avatar
Настраивал, но потом от него пришлось отказаться, стабильности работы я добиться от него не смог, возможно не умел готовить. Нормальное применение политик, и множество других мелких глюков. Лично мое мнение, что это потенциальный геморрой и в продакшн его не стоит пускать, а если у вас много свободного времени и ничем больше не интересно заниматься то тут работы-«по самые бакенбарды»! Уж лучше купить винду, тем более, покупают ее не из ваших денег, причем ответы на множество вопросов можно найти на технете. А взрывать мозг с настройкой самбы-увольте.

Если я не прав пусть меня поправят, но пока я не увижу нормально работающей реализации, то останусь при своем мнении.
avatar
Максим. В тему про удаленное управление. Я имел ввиду через интернет. Например из дому))). Где стоит сервер следующая топология сети: на ПК сервере стоит 2 сетевых интерфейса: et0 (связь с DSL2+ модемом, у которого свой адрес (и сети можно задать и DHCP, а главное присвоен статический внешний адрес)) и et1 (внутренняя сеть). На модеме можно настроить проброс портов (настройки файрвола ). На модем можно зайти хоть откуда по внешнему адресу 78.10.10.10 (попадаешь в менюшку модема). Чтоже можно использовать чтоб на сервак попасть… Очень меня выручаете вы кстате =)) спс за это!
avatar
Как минимум 2 варианта:
1) Модем установить в режиме моста, тогда из интернета можно будет подключаться напрямую к серверу
2) На модеме, фаерволле, есть функция DMZ в нее добавить ваш сервер, в это случае также можно подключаться на прямую.
Вариант №2, на мой взгляд, предпочтительнее.
avatar
Подскажите есть ли веб панель для управления ns записями для bind9
avatar
первое что приходит на ум Webmin
avatar
если cnfdbnm webmin после установки iredmail настройки слетят? И если пробросить 53 порт на сервер bind9 будет отдавать днсы которые на нем в интернет?
avatar
Вот вы мне как раз и расскажите :)
Если пробросить порт, то конечно будет, если это фаерволлом не запрещено
avatar
Но выставлять кеширующий DNS в интернет плохая и не нужная идея.
Там и без вашего DNS их навалом, а забивать память у него начнут довольно сильно…
avatar
Ок придется ставить виртуалку и пробовать на ней )). А если не кешируюший? Мне надо для своих проектов хостинг организовать а все известные фришние нс сервера у регистратора org.ua забанены.
avatar
Дык бесплатных навалом dnsexit.com хотя бы.
Интересное у вас там кино происходит, а регистратору не все равно… Ну если все забанено, тогда только свой или использовать у регистратора, но DNS нужно настраивать только с возможностью ручного добавления зон и запретить трансфер зон, поместить его в чрут. В общем, там много нюансов. Но все это делается.
Первое правило-безопасность!
avatar
Спасибо.
Будет возможность напишите про это статью )))
пошел ковырять виртуалку.
avatar
Я тут, чувствую, наобещаю всем, с три короба… ))
avatar
Максим, а почему у вас нет вот этого параметра $TTL — кеширования положительных ответов в файле зоны или он не столь важен?
avatar
Вы про это в документации к BIND прочитали или на другом сайте скопипастили?
avatar
Просто статей много про bind попадалось и ещё я изучал содержимое папки bind — например в зоне db.local этот параметр стоит и в некоторых статьях он присутствует…
avatar
Значит его точное предназначение вы не знаете? :)
avatar
Всё понял — пошёл качать DNS и BIND (5-е издание) — так оно называется вроде? )))
avatar
Подскажите. На работе 1 сервак Ubuntu 10.04 и 12 компов (на win7) и 5 принтеров (сетевые), а интернет от маршрутизатора подходит к компам и к серваку по локалки и все настройки он автоматом выдает. Хочу на Ubunte DNS поднять что б все компы работали в одном домене. Подскажите вот как лучше сделать, что б все работало не мешаю друг другу?
avatar
Просто делайте чтобы маршрутизатор выдавал клиентам, IP адрес вашего внутреннего DNS сервера и все кино…
avatar
Маршрутизатор стоит Билайна. На все офисное здание (примерно от него компов 100 работает).
avatar
Впервые слышу чтобы билайн производил маршрутизаторы…
Значит нужно крутить настройки DHCP на маршрутизаторе чтобы он выдавал IP вашего внутреннего DNS.

Или вариант №2
----internet-->router(beeline)--->Шлюз ubuntu(DNS,DHCP)--->|клиентские ПК|
avatar
как настроить DNS без DHCP? Как я понимаю надо в /etc/bind/db.orgname прописать статические IP адреса рабочих станций? если да, то можете пример синтаксиса выложить. И как прописать домен, имя машины я задал ubuntuserver, как сделать так, что бы машина понимала, что она ubuntuserver.lab.demo?
avatar
howitmake.ru/blog/ubuntu/96.html только не настраивайте обновление зон DHCP сервером
avatar
спасибо!
DNS поднял
avatar
Как настроить dns сервер если он на ubuntu вместе с lamp подключен через роутер?
Возможно ли так организовать хостинг сайта?
avatar
вполне…
avatar
А как настроить (такой вариант хостинга) dns сервер? допустим есть уже настроинЫй dns без роутера, что надо перенастроить?
комментарий был удален
комментарий был удален
Есть что добавить? Регистрируйся и оставляй комментарии!