Dnsmasq - лёгкая замена Bind и ISC DHCP

Материал из Викиадмин
Перейти к навигации Перейти к поиску

Программа Dnsmasq создана для замены «старушки» BIND (Berkeley Internet Name Domain), созданной Кевин Дунлар (Kevin Dunlap) почти 30 лет назад для UNIX-систем. Собственно, DNS (Domain Name Service) и BIND одновременно росли и вырастали, концепция DNS развивалась вместе BIND сервером. Даже понятия DNS и BIND считались неразделимыми. Но по мере развития Интернета BIND преподносил всё больше уязвимостей. Примерная схема работы заключалась в следующем. Ведь по сути DNS применяется в разрешениях имён сервисов для IP-адресов. При обращении к сервису, к примеру, yandex.ru, через браузер отправляется запрос к каком-то DNS-серверу, от которого браузер получает нужный IP-адрес, через который происходит соединение программы и сервиса.

Немного о DNS-серверах

Все зарегистрированные зоны (ru, ua и пр.) имеют собственные DNS-сервера, которым запрос происходит напрямую. Список DNS-серверов находится по адресу www.root-servers.org . При получении DNS-запроса система сверяется в своих настройках прежде чем отправить ответ пользователю. Напомним, что в файле /etc/resolv.conf заносятся все DNS-сервера с IP-адресами, причём провайдеровский сервер ставится первым, т.к. к нему идёт запрос быстрее.

nameserver 000.00.000.000

Дополнительными атрибутами файла /etc/resolv.conf являются search, domain. В search записывают домены, а в domain – полное имя. При ADSL файл принимает вид /etc/ppp/resolv.conf. Адреса и имена сохраняются в файле/etc/hosts.

127.0.0.1 localhost

Указание по работе с этим списком в файле /etc/host.conf.

order host bind

Dnsmasq экономит время

Соответствие между DNS и IP-адресами важно, кроме пользователя, другим про-граммам, поэтому использование конфигурируемого DNS-сервера значительно снизит время соединения с сервисами в Интернете или локальной сети. Применение Dnsmasq вполне оправдано, тем более этот сервер, спроектирован для выдачи до-менных имен (DHCP и TFTP) в малых и домашних сетях. Dnsmasq обеспечит имена для локальных машин, у которых нет DNS-записей в Интернете. DHCP сервер встроен в DNS сервер, что позволяет рабочим станциям с IP-адресом своё доменное имя, прописанное в файле конфигурации. Dnsmasq сохраняет привязку IP-адреса к ПК или автоматически выбирает IP-адрес из диапазона, а также служит BOOTP для загрузки бездисковых ПК в сеть. Dnsmasq применяют в Linux, BSD и Mac OS X. Настройки Dnsmasq

При пуске dnsmasq обращается к hosts, информация берётся как для DNS службы, так и службы DHCP. Для DHCP, программа dnsmasq может информацию о получив-ших IP-адрес машинах, автоматически писать в hosts. Сервер DHCP работает в стати-ческом и динамическом режиме выдачи IP-адресов, а также одновременную работу в нескольких сетях. Чтобы заработала функция кэширования DNS нужно в файл /etc/dnsmasq.conf, добавить:

   listen-address=127.0.0.1

Чтобы все машины локальной сети могли пользоваться сервером, добавляем:

   listen-address=192.168.1.1 # локальный IP-адрес сервера

Диапазон DNS прописывается в файле resolv.conf. Для этого записывают localhost в первую строку файла /etc/resolv.conf:

nameserver 127.0.0.1
nameserver 000.00.000.000

и т.д. После этого обращения DNS будут уходить к dnsmasq. Другие сервера получат за-прос при неудаче dnsmasq. Для защиты resolv.conf от переписывания вносим запись:

# chattr +i /etc/resolv.conf

Пример конфигурации

#не читаем resolv.conf, так как есть свои данные в конфиге ниже
no-resolv
#
localmx

#внешние сервера DNS, гугловские и т.д.
server=8.8.8.8#53
server=8.8.4.4#53
server=156.154.70.1#53
server=156.154.71.1#53
server=208.67.222.222#53
server=208.67.220.220#53
server=198.153.192.1#53
server=198.153.194.1#53

#на какой интерфейс смотреть. Раздавать адреса нужно было только по Wi-Fi. Вообще ограничения стоит вводить просто ради секурности
interface=wlan0
listen-address=10.0.0.1
bind-interfaces

#раздаём адреса (диапазон с 10 по 200)
dhcp-range=10.0.0.10,10.0.0.200

#прописываем некоторых статично на основе [MAC](/)
dhcp-host=00:1E:58:9A:E9:E8,COMPUTERNAME,10.0.0.2
dhcp-host=7c:61:93:93:5f:93,COMPUTERNAME2,10.0.0.3

#включаем загрузку по сети (большенству это не нужно, если вы не используете бездисковые станции)
dhcp-option=6,10.0.0.1,10.0.0.254
dhcp-option=4,10.0.0.1
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/

#размер кеша
cache-size=650

#логирование
log-queries
log-dhcp
log-facility=/var/log/dnsmasq.log
log-async=25

stop-dns-rebind
rebind-localhost-ok
#интересная опция, запрашиваем все сервера DNS сразу. Зачем - чтобы ответ был быстрее. Порождает лишний трафик.
all-servers
local-ttl=7200
neg-ttl=14400
max-ttl=86400
dhcp-lease-max=604800

#блокируем некоторые домены и рекламы
address=/.doubleclick/127.0.0.1
address=/.biz/127.0.0.1
address=/.cn/127.0.0.1

#прописываем то, что можно было бы внести в hosts, но для всех компьютеров в сети. Например, retracker.local
address=/retracker.local/10.0.0.1

# Не пересылать адреса из не маршрутизируемых сетей (192.168.0.0/16, 10.0.0.0/8 и т.п.)
bogus-priv

# Определить точный адрес для прослушивания
#listen-address=
# Не принимать DHCP запросы с интерфейса
#no-dhcp-interface=

# Не кэшировать негативные ответы от серверов
#no-negcache

# Установка хоста по умолчанию для записей MX при использовании опции localmx
#mx-target=wikiadmin.net

# Возвращает запись MX с хостом mx-target для всех локальных машин
#localmx

# Возвращает в записи MX себя для всех локальных машин
selfmx

Как посмотреть, кому какие данные были выданы

Очень просто, отдаём команду

   cat /var/lib/misc/dnsmasq.leases

и видим что-то такое:

1425999738 00:e0:7c:00:53:1c 10.0.0.24 PMP3670B *
1425998353 ec:55:f9:07:f8:1f 10.0.0.37 notebook 01:ec:55:f9:07:f8:1f
1425999899 48:5b:39:be:35:ff 10.0.0.20 PC 01:52:41:53:20:48:5b:39:be:35:ff:00:00:00:00:00:00
1426000125 cc:07:ab:98:d7:28 10.0.0.47 android-42af211bc30decb5 01:cc:07:ab:98:d7:28