Тема: [Linux] DNS-сервер

Threaded View

  1. [Linux] DNS-сервер

    Зачем:
    А затем. Кэширование - раз. Управление запретами - два. Возможность держать свои зоны - три. Модно - четыре.
    А если серьезно, то собственный DNS - штука полезная. Даже если рассматривать простейший случай, рекурсивный-кэширующий, так имеем как минимум снижение отклика при запросах и снижение нагрузки на канал, особенно если подвязаться к DNS-серверам провайдера. А если поднимать свой собственный DNS-сервер, то тут все флаги в руки - от собственноручного управления подконтрольными зонами и моментального их изменения, до блокировок нежелательного простыми командами.

    А еще дернулся было описывать простейший биллинг с зеркалами всякой вкусности, так и встал на том шаге, что слишком сильно привык к тому, что DNS есть и работает по всей локальной сети… Не получилось перепрыгнуть через этот шаг.

    Disclaimer:
    Я не самый большой специалист по DNS и претендовать на детально-подробное изложение не могу. Претендую лишь на то, что "все работает". В свое оправдание могу сказать, что есть мнение, что те несколько человек, которые действительно понимают, как работает система DNS - перечислены в писке авторов пакета bind.

    Установка:
    Я привел свою систему к следующему состоянию:
    # emerge -pav bind bind-tools
    [ebuild R ] net-dns/bind-tools-9.7.0_p1 USE="ssl xml -doc -idn -ipv6" 0 kB
    [ebuild R ] net-dns/bind-9.7.0_p2-r1 USE="berkdb dlz geoip ldap mysql ssl threads xml -doc -idn -ipv6 -odbc -postgres -resolvconf -sdb-ldap (-selinux) -urandom" 0 kB


    Описанные далее примеры могут работать и на других версиях, но читать changelog для них и делать правильный откат по настройкам я делать не буду. Не люблю движение вниз по версиям.

    Настройка (вариант1):
    Для начала построим простейший кэширующий DNS-сервер, который ничего не умеет, только лишь обрабатывать запросы исключительно с локальной сети (192.168.0.0/24), активно пользуясь при этом DNS-серверами провайдера (адреса 1.2.3.4 и 5.6.7.8 ).

    Для этой простой задачи вполне хватит вот такого универсального, version-free так сказать, named.conf :
    Код:
    options {
        directory "/var/bind";
        allow-query { 192.168.0.0/24; localhost; };
        allow-recursion { 192.168.0.0/24; localhost; };
        allow-transfer { 192.168.0.0/24; localhost; };
        version "handmade";
        forward first;
        forwarders {
            1.2.3.4;
            5.6.7.8;
        };
        query-source address * port 53;
        pid-file "/var/run/named/named.pid";
    };
    zone "." IN {
        type hint;
        file "named.ca";
    };
    Обращаю внимание на то, что стилизация конфига под Си обязывает внимательно и тщательно следить за скобками и точками с запятыми - сколько в свое время было пролито крови из-за отсутствующего байта…

    Если после всех правок перезапустить демон named - получим искомое. Т.е. скромный и маленький DNS-сервер, который умеет обслуживать локальную сеть. А если впишем в /etc/resolv.conf первую строчку как
    nameserver 127.0.0.1
    , то и сам себя - тоже.

    В небольшое заключение - пара моментов, на которых слегка тормознемся:
    1. Кэш трансляций BIND хранит в оперативке. Само собой, что после перезапуска демона кэш теряется.
    2. Проверку работоспособности кэширования можно сделать, например, так:
    localhost # dig @localhost icq.com
    ;; Query time: 350 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Tue Jun 8 11:34:57 2010
    ;; MSG SIZE rcvd: 138

    localhost # dig @localhost icq.com
    ;; Query time: 1 msec
    ;; SERVER: 127.0.0.1#53(127.0.0.1)
    ;; WHEN: Tue Jun 8 11:35:25 2010
    ;; MSG SIZE rcvd: 138

    3. Как дела у демона с безопасностью - да фик его знает. Умные люди говорят разное. Правда, те примеры эксплоитов, что встречаются в сети, лично у меня не работали. Что не помешало никоим образом засунуть демон в chroot и регулярно обновлять.
    4. Как за-chroot-тить BIND - да просто. Внимательно прочитать сообщения лога portage, там прямые указания.

    Но, если бы это - было бы все, мне бы коллеги в лицо плюнули. Ибо подобный конфиг можно запросто найти в первом же запросе гугла… Или во втором, не знаю.
    Поэтому, дабы оправдать надежды, зайдем несколько дальше - сделаем на базе простого рекурсивного сервера некий шаблон, который и будем уже с течением времени навешивать и усложнять. Ну и, чтобы совсем в грязь не падать, воспользуемся почти всеми основными плюшками, что придумали разработчики:

    localhost bind # cat named.conf
    Код:
    //список узлов, с которых будет разрешен трансфер зон
    acl "wanarray" { 192.168.0.0/24; };
    //список доверенных адресов
    acl "lanarray" { 127.0.0.0/8; 192.168.0.0/24; };
    
    options {
            directory "/var/bind";
            pid-file "/var/run/named/named.pid";
            listen-on-v6 { none; };
            allow-query { lanarray; };
            allow-query-cache { lanarray; };
            allow-recursion { lanarray; };
            allow-transfer { wanarray; };
            forward first;
            forwarders {
                    1.2.3.4;
                    5.6.7.8;
            };
            query-source address * port 53;
    };
    //man-овского примера логгирования в штатном режиме вполне хватает для понимания
    logging {
            channel default_log {
                    file "/var/log/named/named.log" versions 5 size 50M;
                    print-time yes;
                    print-severity yes;
                    print-category yes;
            };
            category default { default_log; };
            category general { default_log; };
    };
    
    //описание прав для внутренней зоны видимости, 
    //пока тут только служебное
    view "internal" in {
            match-clients { lanarray; };
            recursion yes;
            additional-from-auth yes;
            additional-from-cache yes;
    
            zone "." in {
                    type hint;
                    file "/var/bind/root.cache";
            };
    
            zone "localhost" IN {
                    type master;
                    file "pri/localhost.zone";
                    allow-update { none; };
                    notify no;
                    allow-query { any; };
                    allow-transfer { none; };
            };
    
            zone "127.in-addr.arpa" IN {
                    type master;
                    file "pri/127.zone";
                    allow-update { none; };
                    notify no;
                    allow-query { any; };
                    allow-transfer { none; };
            };
    };
    //описание прав для внешних респондентов,
    //и тут пока пусто
    view "public" in {
            match-clients { any; };
            recursion no;
            additional-from-auth no;
            additional-from-cache no;
            zone "." in {
                    type hint;
                    file "/var/bind/root.cache";
            };
    };
    //Один из рекомендованных приемов сокрытия 
    //аппаратных и программных сведений
    view "chaos" chaos {
            match-clients { any; };
            allow-query { none; };
            zone "." {
                    type hint;
                    file "/dev/null";  // or any empty file
            };
    };
    Заострю внимание читателя, что правке подлежал только /etc/bind/named.conf. Все остальные, служебные файлы зон и корневых серверов, правке не подлежали. Пока не подлежали.

    Собственно, на этом простое рекурсивное и заканчивается. За тем, что имеем полное право добавить в автозагрузку:
    rc-update add named default
    Последний раз редактировалось atos, 08-06-2010 в 16:31

  2. Одобрили:
    gandjubazzz  (17-06-2010),   Jag Mort  (17-06-2010),   wildman  (17-06-2010)  

Информация о теме

Users Browsing this Thread

Пользователей, читающих тему - 1. (зарегистрированных - 0, гостей - 1)

Пользователей, прочитавших эту тему : 0

Действия :  (Просмотреть прочитавших)

Нет прочитавших тему.

Ваши права в разделе

  • Вы не можете создавать новые темы
  • Вы не можете отвечать на сообщения
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •