CEX.io

воскресенье, 8 января 2012 г.

Установка и настройка dnsmasq (DNS, DHCP, BOOTP/PXE, TFTP сервер)

Общую информацию о dnsmasq можно найти перейдя по этой ссылке.

1. Установка dnsmasq происходит достаточно легко (немного сложнее, если устанавливать из исходного кода)

- основанные на Debian дистрибутивы, такие как Ubuntu
    $ sudo apt-get install dnsmasq

- основанные на Fedora дистрибутивы и Cent OS
    $ su
    # yum install dnsmasq

- семейство *BSD, если установлена Ports коллекция
    $ cd /usr/ports/dns/dnsmasq/
    $ su
    # make install clean
или, если вы предпочитаете добавить пакет
    $ su
    # pkg_add -r dnsmasq
    $ ipkg install dnsmasq

dnsmasq скрипт устанавливается в /etc/init.d и создаются символьные ссылки с runlevel 2-5 и запускается автоматически в основанных на Debian дистрибутивах, таких как Ubuntu.
В основанных на Fedora дистрибутивах, требуется самостоятельно создать символьные ссылки на соответствующих уровнях запуска. Более простой путь выполнить эту задачу, это использовать команду chkconfig например, как показано ниже.
   $ su
   # chkconfig dnsmasq on
   # /etc/init.d/dnsmasq start

в *BSD dnsmasq скрипт устанавливается в /usr/local/etc/rc.d для того, чтобы скрипт запускался во время загрузки нужно добавить следующую строку в /etc/rc.conf
   dnsmasq_enable="YES"
затем запускаем dnsmasq
   $ su
   # /usr/local/etc/rc.d/dnsmasq start

 в системах основанных на OpenWrt/NSLU2 и Optware
dnsmasq скрипт устанавливается в /opt/etc/init.d

для запуска скрипта при загрузке системы необходимо создать
символьную ссылку в /etc/init.d/
   $ cd /etc/init.d/
   $ ln -s /opt/etc/init.d/S52dnsmasq S52dnsmasq


2. Настройка dnsmasq также не представляет особых сложностей

   Настройки можно изменять двумя путями, либо передать их через командную строку,
либо установить их в файле dnsmasq.conf. Наименование настроек(в не сокращенном варианте) передаваемых через командную строку и указываемых в файле dnsmasq.conf совпадают. Как правило выбирают второй вариант, поскольку он наиболее наглядный и позволяет добавлять комментарии к каждой настройке с помощью символа '#'.
Основные варианты расположения файла dnsmasq.conf
в зависимости от платформы, следующие:
   - /etc/dnsmasq.conf
   - /usr/local/etc/dnsmasq.conf
   - /opt/etc/dnsmasq.conf

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

   # добавить файл конфигурации myfile.conf
   # к настройкам (строк может быть >1)
   # если указать вместо имени файла "-" ,
   # то настройки будут получены из устройства stdin
   conf-file=/etc/dnsmasq/myfile.conf

   # добавить настройки из всех файлов,
   # находящихся по умолчанию в папке /etc/dnsmasq/conf.d,
   # кроме файлов .bak, а также заканчивающихся символом ~,
   # либо начинающиеся с ".", либо начинающиеся и
   # заканчивающиеся символом "#" пропускаются всегда!
   # общая форма: conf-dir=[,......]
   conf-dir=/etc/dnsmasq/conf.d,bak

Общие настройки сервиса лучше начать со следующих строк

   # чтобы изменить идентификаторы пользователя UID, GID
   # для процесса dnsmasq укажите следующие опции
   user=dnsmasq
   group=dnsmasq

   # укажите, где будет располагаться идентификатор процесса
   pid-file=/var/run/dnsmasq.pid

   # назначение приемника событий для dnsmasq
   # по умолчанию события отправляются в
   # syslog(DAEMON, и в LOCAL0)
   # "/" - если начинается с этого символа,
   # то запись логов будет вестись в файл
   # "-" - то логи отправляются в стандартное устройство stderr
   # сигнал  SIGUSR2 используется для операции
   # закрытия/открытия файла логов,
   # что позволяет не перезапускать сервис dnsmasq при ротации логов
   log-facility=/var/log/dnsmasq.log
 
   # для целей отладки можно записывать каждый
   # пересылаемый  DNS запрос
   log-queries
 
   # асинхронная запись логов
   log-async=25

Можно добавить следующие две опции, чтобы заставить dnsmasq фильтровать DNS запросы из локальной сети, чтобы они никогда не достигали публичных DNS серверов.

   # никогда не пересылать простые текстовые запросы
   # (без точки или без части домена)
   domain-needed

   # никогда не пересылать не маршрутизированные адреса
   bogus-priv

   # уберите комментарий, если требуется блокировать
   # все SRV запросы. Не используйте эту настройку,
   # если используете Kerberos, SIP, XMMP и Google-talk и т.п.
   # SRV записи указанные в srv-host=
   # не блокируются этим параметром
   #filterwin2k

   # по умолчанию dnsmasq пересылает запросы на любой DNS сервер
   # из заданных в файле /etc/resolv.conf
   # следующая опция заставляет dnsmasq выполнять запросы
   # в строгом порядке который определяется порядком записей
   # в файле  /etc/resolv.conf
   strict-order

   # по умолчанию dnsmasq "слушает" DNS запросы со всех
   # интерфейсов в системе, если в системе несколько интерфейсов
   # (eth0,eth1,...и т.д.), но только один физически подключен к
   # локальной сети, например только eth0
   interface=eth0
   # укажем номер порта (по умолчанию 53)
   #port=53
   # не предоставлять DHCP или TFTP сервисы на указанном
   # интерфейсе, но это не отключает DNS сервис
   no-dhcp-interface=lo
 
   # позволять запускать более одной копии процесса
   bind-interfaces
 
   # позволяет получать разные имена из файла /etc/hosts
   # при DNS запросах, в зависимости от интерфейса
   # с которого принят этот запрос
   localise-queries
 
   # пересылать запрос сразу на все вышестоящие DNS серверы
   all-servers

   # отклонять ответы от вышестоящих DNS серверов
   # с IP адресами локальной сети (блокировать DNS атаки)
   stop-dns-rebind
 
   # отключить проверки для 127.0.0.0/8
   rebind-localhost-ok

   # очищать DNS кэш
   clear-on-reload

   # чтобы отключить чтение /etc/resolv.conf
   # или любого другого файла, то уберите комментарий
   #no-resolv

   # для указание альтернативного имени
   # отличного от /etc/resolv.conf используйте
   #resolv-file=/etc/myresolv.conf

   # если вы не хотите, чтобы dnsmasq просматривал
   # изменения файла /etc/resolv.conf или других подобных файлов
   # и перечитывал их то уберите комментарий с опции
   #no-poll

   # чтобы отключить кэширование, ошибочных DNS запросов,
   # т.е. неудачных запросов имя-адрес, удалите комментарий
   #no-negcache

   # установить размер кэша, по умолчанию 150
   #cache-size=250

   # настройки времени жизни кэша в секундах
   # 7200=2h (два часа)
   local-ttl=7200
   neg-ttl=14400
   max-ttl=86400

   # уберите комментарий, если не требуется читать /etc/hosts
   #no-hosts

   # следующие две опции не обязательны, но если они
   # используются, то dnsmasq будет добавлять имя
   # заданного домена к именам определенным
   # в dnsmasq.conf и /etc/hosts

   # автоматически добавлять домен(home.net)
   # к простым именам в hosts файле
   expand-hosts

   # настройка не обязательна, но если указана,
   # то происходит следующее
   # 1. позволяет DHCP хостам иметь FQDN имена,
   #     если часть домена совпадает
   # 2. устанавливает DHCP опцию "domain" для всех
   #     систем настраиваемых по DHCP
   # 3. устанавливает часть домена для настройки expand-hosts
   domain=home.net

   # добавим список вышестоящих DNS серверов

   # разрешим приложениям на машине с установленным dnsmasq
   # использовать этот DNS сервис
   nameserver 127.0.0.1

   # Список публичных DNS серверов тут

   # google OpenDNS
   server=8.8.8.8#53
   server=8.8.4.4#53

   # Dnsadvantage
   server=156.154.70.1#53
   server=156.154.71.1#53

   # OpenDNS
   server=208.67.222.222#53
   server=208.67.220.220#53

   # Norton
   server=198.153.192.1#53
   server=198.153.194.1#53

   # GTEI DNS (теперь Verizon)
   server=4.2.2.1#53
   server=4.2.2.2#53
   server=4.2.2.3#53
   server=4.2.2.4#53
   server=4.2.2.5#53
   server=4.2.2.6#53

   #cox.net
   nameserver 68.105.28.11
   nameserver 68.105.29.11
   nameserver 68.105.28.12

   # можно использовать запросы к шлюзу вашей сети,
   # если включен DNS relay, и если адреса публичных серверов
   # определены в вашем шлюзе
   #nameserver 192.168.10.1

   # включение режима: authoritative
   dhcp-authoritative

   # расположение файла аренды адресов
   dhcp-leasefile=/var/lib/dnsmasq.leases

   # максимальное количество назначений адресов
   dhcp-lease-max=256

   # записывать дополнительную отладочную информацию
   log-dhcp

   # игнорировать запросы от неизвестных хостов
   # увеличивает безопасность подсети
   dhcp-ignore=tag:!known

   # читать информацию отображения MAC-адрес-имя
   # из файла /etc/ethers
   #read-ethers

   # отключить динамическое назначение адресов
   # для заданной подсети
   #dhcp-range=192.168.10.0,static,infinite

   # разрешить динамическую аренду адресов
   dhcp-range=192.168.10.10,192.168.10.254,12h

   # статическое назначение IP адреса, по MAC
   # +назначение имя машине, а также времени жизни
   dhcp-host=11:22:33:44:55:66,mypc,192.168.10.111,infinite

   # сообщить маску подсети
   dhcp-option=1,255.255.255.0

   # сообщить адрес шлюза клиентским машинам
   # по умолчанию шлюзом назначается машина с DHCP сервисом
   dhcp-option=3,192.168.10.1


3. Заключительные шаги

   Когда вы закончили изменение настроек в файлах
dnsmasq.conf, /etc/resolv.conf, и /etc/hosts
осталось перезапустить dnsmasq, с помощью следующих команд:

   $ /etc/init.d/dnsmasq restart

если вы используете *BSD системы:

   $ /usr/local/etc/rc.d/dnsmasq restart

На последнем этапе, можно использовать linux утилиту dig
для проверки работоспособности сервиса:
   
   $ dig isaleksey.blogspot.com

Либо более простую и доступную на многих системах nslookup:

   $ nslookup isaleksey.blogspot.com

ссылки:

3 комментария:

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

Всё хорошо разжёвано, спасибо!
Только, почему-то ругается на опцию "nameserver 127.0.0.1" в конфиге, не запускается. Закоментировал - заработало.
Хорошо, что есть опция --test - можно сначала протестировать конфиги на пригодность, без запуска самого dnsmasq.

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

Подскажите, как с включенной опцией dhcp-ignore добавлять новых клиентов?

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


[Подскажите, как с включенной опцией dhcp-ignore добавлять новых клиентов?]

вот так:
dhcp-host=01:02:03:04:05:06,TESTPC,10.0.1.100,infinite

или немного сложнее:
dhcp-host=set:mypc,TESTPC,00:01:02:03:04:05,06:07:08:09:10:11,10.0.1.100,infinite
TESTPC имеет 2 MAC адреса