Dnsmasq — лёгкий, легко конфигурируемый DNS, DHCP и TFTP сервер, спроектированный обеспечивать доменными именами (и опционально DHCP и TFTP) небольшие сети. Он может обеспечивать именами локальные машины, которые не имеют глобальных DNS-записей. DHCP сервер интегрирован с DNS сервером и даёт машинам с IP-адресом доменное имя, сконфигурированное раннее в конфигурационном файле. Dnsmasq поддерживает привязку IP-адреса к компьютеру или автоматическую настройку IP-адресов из заданного диапазона и BOOTP для сетевой загрузки бездисковых машин.

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

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

`