Настройка dnsmasq: DHCP и DNS

Dnsmasq - это программа, поддерживающая работу сразу двух сетевых сервисов, DNS и DHCP. Dnsmasq как сервис имеет ряд преимуществ по сравнению с другими сервисами DNS и DHCP. Во-первых, настройка dnsmasq проста, во-вторых, он нетребователен к ресурсам, в-третьих, он реализует сразу два сервиса, в-четвертых, он гибок и позволяет, например, реализовать обращение по именам к компьютерам в локальной сети, причем сделать это просто и быстро. Именно поэтому он используется как на серверах, так и в embeded-системах, например, в роутерах, и отлично подходит для обеспечения работы небольших сетей.

Установка

Обычно dnsmasq устанавливается на машину, выполняющую роль сетевого шлюза, в небольших сетях обычно именно на нем работают сервисы DHCP и DNS. Поскольку dnsmasq присутствует в репозиториях многих дистрибутивов, его можно установить при помощи менеджера пакетов:

apt-get install dnsmasq

или

yum install dnsmasq

После этого можно приступать к настройке.

Настройка dnsmasq как DHCP

DHCP - это один из базовых сервисов в локальных сетях, благодаря которому отпадает необходимость конфигурировать настройки сети вручную. Он позволяет выдавать автоматически такие настройки как IP-адрес, адрес DNS-сервера и шлюза по-умолчанию, а также резервировать IP-адреса по MAC-адресам.

Для того, чтобы dnsmasq работал как DHCP-сервер, в конфигурационном файле /etc/dnsmasq.conf должны присутствовать следующие строки (они могут уже присутствовать в конфиге, их надо только раскомментировать и исправить):

domain=mydomain.com

Эта строка не обязательна, она нужна в том случае, если вы хотите, чтобы хосты, получающие адреса по DHCP, имели FQDN-имя, то есть полное имя, включающее имя домена.

interface=eth1

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

dhcp-range=192.168.0.20,192.168.0.100,24h

Интервал выдаваемых адресов и время аренды адресов (в данном случае 24 часа).

dhcp-host=80:15:AA:BB:CC:DD,192.168.0.10

Резервация IP-адреса по MAC-адресу, чтобы устройство с указанным MAC-адресом всегда получало указанный IP-адрес.

dhcp-option=1,255.255.255.0

Задать значение опции DHCP с номером 1. Опция с номером 1 - это маска подсети (netmask).

dhcp-option=3,192.168.0.1

Задать значение опции DHCP с номером 3. Опция с номером 3 - это шлюз по умолчанию (default gateway).

Этих опций в небольшой офисной или домашней сети обычно достаточно.

Список всех опций DHCP можно посмотреть на странице IANA (Internet Assigned Numbers Authority).

После задания настроек надо рестартовать сервис:

service dnsmasq restart

Теперь можно задавать настройки на компьютерах в сети на автоматическое получение адресов по DHCP.

Настройка dnsmasq как DNS

DNS - это второй базовый сервис, без которого в локальных сетях не обойтись, если, конечно, вы не планируете обращаться к компьютерам в локальной сети и Интернете по IP-адресам, в чем я сильно сомневаюсь. Dnsmasq работает как кэширующий DNS-сервер. У него есть одна полезная особенность. Он умеет использовать файл /etc/hosts как источник информации для DNS, что может быть очень полезно. Например, если есть какой-то локальный сервис, с которым работают пользователи в локальной сети, они могут к нему обращаться по имени, а не по адресу, адрес будет запрашиваться у DNS-сервера, который будет возвращать IP-адрес, к которому необходимо обращаться.

Настройка dnsmasq как DNS по сути не отличается от настройки как DHCP, поскольку все настройки хранятся в том же файле - /etc/dnsmasq.conf

Самое первое, что необходимо, - это название домена

domain=mydomain.com

Для определенной подсети можно указать отдельное имя домена:

domain=fin.mydomain.com,192.168.1.0/24

И точно так же можно указать имя домена для интервала адресов:

domain=fin.mydomain.com,192.168.1.10,192.168.1.30

Основная функция DNS-сервера - это преобразование доменных имен в IP-адреса и наоборот, но DNS-серверов даже в локальной сети может быть несколько. Поэтому может потребоваться указать для определенных доменов адреса DNS-серверов, на которые должны отравляться запросы:

server=/remoteoffice.org/192.168.3.10

Аналогично указывается сервер для обратной зоны:

server=/3.168.192.in-addr.arpa/192.168.3.1

В конфигурационном файле также можно указать соответствие имени IP-адресу.

Запись типа A  в прямой зоне DNS (сопоставляющей IP-адрес запрошенному имени):

address=/extdomain.net/127.0.0.1

На любое имя хоста *.extdomain.net возвращается адрес 127.0.0.1.

Запись типа CNAME:

cname=sambaserver,smb

Эта запись создает алиас для локального имени sambaserver, чтобы к нему можно было обращаться по более короткому имени smb.

По умолчанию dnsmasq использует файл /etc/hosts для сопоставления имен хостов IP-адресам, но это тоже можно изменить. Если вы не хотите использовать /etc/hosts, вы можете указать это при помощи опции

no-hosts

Если же вы хотите использовать совместно с /etc/hosts еще один файл аналогичной структуры, для этого есть опция

addn-hosts=/path/to/file

Кроме задания собственных записей DNS можно изменять информацию, получаемую от внешних DNS-серверов путем подмены полученного IP-адреса. Для замены одного адреса:

alias=1.2.3.4,5.6.7.8

Если при запросе доменного имени от внешнего DNS-сервера мы получим IP-адрес 1.2.3.4, то мы подменим его на адрес 5.6.7.8. Можно осуществлять подмену целыми подсетями:

alias=1.2.3.0,5.6.7.0,255.255.255.0

Такая запись подменит любой адрес из подсети 1.2.3.0/24 на адрес из подсети 5.6.7.0/24. Если же вам необходимо подменять определенный интервал адресов, то такая возможность тоже есть:

alias=10.0.0.10-10.0.0.40,192.168.0.0,255.255.255.0

Эта запись подменит адреса из интервала 10.0.0.10-10.0.0.40 на адреса 192.168.0.10-192.168.0.40

Для того, чтобы обращения к DNS шли именно на dnsmasq на том же сервере, где он сам работает, необходимо указать первой записью в /etc/resolv.conf следующую строку:

nameserver 127.0.0.1

Сам dnsmasq будет игнорировать эту запись, поскольку предполагает, что эта запись обозначает его собственный сервис, он начинает использование записей с указанием серверов имен со следующей записи, в которой указывается уже внешний DNS-сервер.

Во многих системах /etc/resolv.conf генерируется автоматически при получении адреса от провайдера по DHCP, поэтому если просто записать эту строчку руками, при переподключении основного сетевого интерфейса файл будет перезаписан и эта строка исчезнет. Этого можно избежать, если раскомментировать в файле /etc/dhcp/dhclient.conf (или /etc/dhcp3/dhclient.conf, в зависимости от системы) строчку

prepend domain-name-servers 127.0.0.1

Тогда даже при получении списка DNS-серверов по DHCP первой строчкой в /etc/resolv.conf будет строчка “nameserver 127.0.0.1”.

И еще одна опция, которая может вам пригодиться, если вы хотите использовать свой список DNS-серверов:

resolv-file=/path/to/file

Файл, который указывается в этой опции, должен иметь такую же структуру, как и /etc/resolv.conf. При наличии этой опции будет использован указанный файл вместо /etc/resolv.conf. И таких записей может быть больше одной.

А если необходимо просто указать несколько DNS-серверов, на которые будут форвардиться запросы, это можно сделать при помощи записи нескольких строчек с опцией server:

server=8.8.8.8
server=8.8.4.4
...
server=208.67.222.222
server=208.67.220.220

Вот, в общем, и всё. И не забывайте после изменения настроек рестартовать dnsmasq командой

service dnsmasq reload

Licensed under GPL v2

Repo link: https://github.com/mnorin/mnorin.github.io