Программа 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:

1
2
nameserver 127.0.0.1
nameserver 000.00.000.000

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

1
# chattr +i /etc/resolv.conf

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#не читаем 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

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

1
2
3
4
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

`