Окт
10
2009

Создание своей доменной зоны или настройка DNS-сервера BIND9

Цель: создать собственную доменную зону *.dev Сделать возможным пользование ею по сети. Т.е. чтобы с другого компа по сети можно было открывать сайты типа http://example.dev, http://mysite.dev… Где example.dev и mysite.dev – это name-based виртуальные хосты. Причем каждый раз при создании нового виртуального хоста мне не хочется дополнительно вносить информацию об этом хосте ни в /etc/hosts, ни в конфигурацию dns-сервера bind.
Для начала я опишу процесс установки и настройки bind, а ниже для примера приведу свой пример настройки name-based виртуальных хостов.

Установка и конфигурирование DNS-сервера BIND9

Установка bind9

Тут всё довольно просто:

sudo apt-get install bind9

Настройка bind9

А тут уже веселее.

Редактируем файлик /etc/bind/named.conf.options Я ниже привожу полное его содержание. С выделением жирным добавленных строк:

acl "home" {192.168.1.0/24; 127.0.0.1;};
options {
	directory "/var/cache/bind";

	auth-nxdomain no;    # conform to RFC1035
	listen-on-v6 { any; };
	allow-query {"home";};
};
  • acl «home» {192.168.1.0/24; 127.0.0.1;}; – объявляем группу, c ip-адресов которой разрешим делать запросы к нашему dns серверу. Для диапазона 192.168.1.0-255 указываем 192.168.1.0/24
  • allow-query {«home»;}; – разрешаем запросы к нашему dns от группы home

Теперь в файл /etc/bind/named.conf дописываем объявление нашей новой зоны

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

Теперь создаём файл /etc/bind/db.dev с таким содержимым:

$TTL 1h
@ SOA dev. root.dev. (
    2009050500  ; Serial
    3h          ; Refresh
    1h          ; Retry
    1w          ; Expiry
    1d          ; TTL
)

@ NS ns1.dev.
@ NS ns2.dev.

@ A 192.168.1.10
* CNAME @
  • 192.168.1.10 – это ip моего web-сервера. В принципе это просто моя рабочая машина с установленным веб-сервером и dns-сервером. Но в случае если dns-сервер и web-сервер – это две разные машины, то тогда вместо 192.168.1.10 указываем ip веб-сервера, на котором и находятся наши сайты.

Перезагружаем bind:

sudo /etc/init.d/bind9 restart

Осталось только указать адрес нашего dns сервера для других машин-клиентов (если у вас как и у меня веб-сервер и dns-сервер установлены на той же машине, на которой и работаете, то следующее настройки и для неё надо сделать). Если в сети используется DHCP (лично у меня adsl-модем работает как dhcp-сервер), то на DHCP-сервере в качестве основного dns для раздачи установите ip вашего сервака с bind’ом. Если же ip на всех машинах статически задаётся, то там в качестве основного dns указываем наш сервер.
Если машина-клиент тоже работает под linux, то укажите dns в файле /etc/network/interfaces Типа такого получится:

iface eth0 inet static
       address 192.168.1.2
       netmask 255.255.255.0
       dns-nameservers 192.168.1.10 213.184.225.37 213.184.224.254

Тут после 192.168.1.10 следуют через пробел dns-сервера моего провайдера.
после этого надо перезапустить этот сетевой интерфейс:

sudo ifconfig eth0 down
sudo ifconfig eth0 up

А для надёжности можно и вобще networking перезагрузить: sudo /etc/init.d/networking restart

Пример настройки name-based виртуального хоста

Я использую вот такой конфиг:

<VirtualHost *:80>
    ServerName example.dev
    ServerAlias www.example.dev
    DocumentRoot /var/www/hosts/example/public_html
    <Directory /var/www/hosts/example/public_html>
        AllowOverride All
        Allow from all
    </Directory>
    ErrorLog /var/www/hosts/example/logs/error_log
    CustomLog /var/www/hosts/example/logs/access_log combined
</VirtualHost>

Это у меня находится в файле /etc/apache2/sites-avaliable/example И включаю я этот хост командой:

sudo a2ensite example
sudo /etc/init.d/apache2 reload

В принципе можно было этот конфиг и просто включить в файл /etc/apache2/httpd.conf

Заключение

Ну вот вроде бы и всё. Теперь можно смело создавать виртуальные хосты. И не надо никакой дополнительной информации вносить в /etc/hosts И можно с другого компа легко и быстро получить доступ к нашим сайтам в зоне *.dev

Если есть предложения или замечения – пишите.
PS с начальной настрйокой bind мне помогла статья Быстро поднимаем DNS-сервер (BIND9) под debian

25 Comments to "Создание своей доменной зоны или настройка DNS-сервера BIND9"

  1. pikcher wrote:

    так почему же все таки не надо вносить информацию в /etc/hosts?

  2. yas wrote:

    в /etc/hosts ничего не надо вносить потому что ты ведь настраиваешь dns-сервер и теперь хост, на котором размещается определённый ресурс ты получаешь от dns сервера. Ну считай аналогично, как в инете. У тебя ведь не прописаны в /etc/hosts по какмому ip искать каждый сайт. Эта вся инфа тянется с dns серверов.

  3. pikcher wrote:

    сделал как у тебя написано. Создал свою зону lan

    $TTL 90
    @ IN SOA lan. root.lan(
    и т.д.
    )
    @ IN NS ns.lan
    @ IN A 192.168.0.122(ip машины на которой утсновлен bind, на ней же стоит apache и находятся виртуальные хосты)

    * CNAME @

    дальше создал sites-available/test.conf

    ServerName test.lan
    DocumentRoot /var/www/test
    и т.д.

    в файле sites-available/default прописано

    ServerName lserver.lan
    DocumentRoot /var/www
    и т.д
    a2ensite и все как положено сделал, хосты видно

    при заходе на test.lan вижу корневую папку /var/www/test
    при заходе на lserver.lan вижу ту же саму папку
    если с другого компа набрать http://192.168.0.122/ то опять вижу ту же самую папку, а не /var/www
    и если нарнать что-то.lan, то опять попадаю в папку /var/www/test

    пробовал прописывать в /etc/hosts
    127.0.0.100 test.lan
    и в файле db.lan
    test IN A 127.0.0.56
    но то же самое, все хосты смотрят в одну и ту же папку

  4. pikcher wrote:

    127.0.0.100 test.lan
    и в файле db.lan
    test IN A 127.0.0.100

  5. yas wrote:

    2pikcher: ты там точки не везде написал. может из-за этого проблемы. напиши вот так:

    $TTL 1h
    @ IN SOA lan. root.lan. (
    и т.д.
    )
    @ IN NS ns.lan.
    @ IN A 192.168.0.122
    * CNAME @

    Ну и плюс в конфигах виртуальных хостов у тебя прописаны ErrorLog и CustomLog? если да, то посмотри, что туда пишется.

    ну и ты указал свой комп с dns-сервером в качестве dns-сервера на клиентской машине? вывели cat /etc/resolv.conf

  6. pikcher wrote:

    DocumentRoot /var/www/hosts/example/public_html

    обычно пишут в Directory то же самое что и в document root чтобы описать правила просмотра папки
    у тебя с каким смыслом они разные?

  7. pikcher wrote:

    точки стоят это я так написал здесь.

  8. pikcher wrote:

    так ведь проблема не в прописании dns на клиентской машине, я это сделал, в resolf.conf тоже прописал, видно машину, но как я описал странно идет преобразование, видно что-то одно или root сервера или папку test

  9. yas wrote:

    насчет DocumentRoot и Directory – это я очепятался тут. должны быть одинаковыми. я поправил в статье. пасиб)

  10. yas wrote:

    видимо что-то с настройками виртуальных хостов тогда. сбрось сюда текст:
    cat /etc/apache2/sites-available/test.conf
    cat /etc/apache2/sites-available/default

    И на всякий случай: после a2ensite test.conf default ты запускал /etc/init.d/apache2 reload ? в папке /etc/apache2/sites-enabled/ появились символические ссылки на твои файлы test.conf и default?

  11. yas wrote:

    pikcher, как успехи? решилась проблема? в чём был трабл?

  12. pikcher wrote:

    проблему решил! Да, это все настройки виртуальных хостов.
    Неправильно писал
    вместо

    ServerName virtualhostname
    я писал

    ServerName virtualhostname
    когда это исправил все заработало. Вместо * можно писать IP адрес сервера.

  13. pikcher wrote:

    у тебя режутся теги
    вместо
    VirtualHsot *:80
    ServerName virtualhostname
    я писал
    VirtualHost virtualhostname:80
    ServerName virtualhostname

  14. yas wrote:

    пунятн. ну я рад, что всё получилось! ;)
    оффтопик: кстати, если у тебя есть теперь live и dev сайт, между которыми тебе иногда надо переключаться побыстрому, то могу порекомендовать плагин для ff: server switcher. мега штука! =) лично мне такого плагина оч не хватало. и осталось только для chrome найти аналогичный и всё будет здорово)

  15. Oleg wrote:

    Ни как не могу сделать. Помогите плиз!

  16. Deadhummer wrote:

    А как быть, если я подключен к сети dom.ru, и у меня нет постоянного айпи?

  17. кка wrote:

    иии… не работает!

  18. yas wrote:

    2кка: по столь «информативному» комменту врядли получится тебе что-то подсказать.

  19. Алексей wrote:

    Помогите разобратса и создать???

  20. FEEL wrote:

    Ребят, при создании доменной зоны, её будут видеть все компьютеры с сети интернет или только локальная сеть?
    З.Ы. вопрос тупой, но всё же… (:

  21. yas wrote:

    @FEEL: те, у кого будет прописан твой днс сервер (или другой днс сервер, который так же знает про твой днс сервер) и будут видеть твою доменную зону. Я делал у себя *.dev зону, на всех компьютера в моей локальной сети (внутри квартиры) прописывал (или же DHCP им устанавливал) в качестве одного из dns серверов мой сервак с настроенным bind. И тамким образом со всех компов дома я мог открыть мои проекты в доменной зоне *.dev

  22. alex wrote:

    Спасиб за статью,
    У меня возникли проблемы, помогите решить. После того как сделал все что сказано в статье и пытаюсь открыть в браузере виртуальный хост апача example.dev он не открывает (Server not found).
    Что я сделал не так? На сервере настроин DHCP, сетка работает корректно
    Вот мои все настройки (сервер имеет 192.168.10.1 IP)

    Настройки сервера:
    ——————————–
    /etc/resolv.conf
    domain example.net
    search example.net
    nameserver 127.0.0.1
    nameserver 217.29.116.2
    nameserver 217.29.116.1
    ————————————-
    /etc/bind/named.conf.local
    zone «dev» IN {
    type master;
    file «/var/lib/bind/forward.db»;
    };
    ————————————–
    /var/lib/bind/forward.db
    $TTL 1h
    @ SOA dev. root.dev. (
    2009050500 ; Serial
    3h ; Refresh
    1h ; Retry
    1w ; Expiry
    1d ; TTL
    )

    @ NS ns1.dev.
    @ NS ns2.dev.

    @ A 192.168.10.1
    * CNAME @
    ———————————————
    Виртуал хост апачевский настроен так

    ServerName example.dev
    ServerAlias http://www.example.dev
    DocumentRoot /home/gate1/www/site1

    AllowOverride All
    Allow from all

    ————————————————–
    /etc/network/interfaces
    auto eth0
    iface eth0 inet dhcp

    auto eth1
    iface eth1 inet static
    address 192.168.10.1
    netmask 255.255.255.0
    ————————————————–

  23. alex wrote:

    НУ и на линуксовом клиенте:
    /etc/network/interfaces
    auto lo
    iface lo inet loopback

    auto eth0
    iface eth0 inet dhcp

    auto disable
    iface disable inet manual

  24. дмитрий wrote:

    Здравствуйте помогите пожалуйста создать доменную зону мой логин в скайп azazaz11933

  25. ziman wrote:

    Наверное глупый вопрос. Хочу спросить будет ли работать если после установки bind скинуть все конфигурационные файлы с рабочего сервера, без редактирования конфигов. Не считая сетевые настройки. Спасибо заранее.

Leave Your Comment