Установка и примеры настройки Dnsmasq

Thank you for reading this post, don't forget to subscribe!

Dnsmasq лег­кий в настрой­ке и исполь­зо­ва­нии сер­вер DNS. Поми­мо послед­не­го, так­же поз­во­ля­ет под­нять сер­ви­сы DHCP и TFTP.

Про­грамм­ный про­дукт нашел широ­кое при­ме­не­ние для сле­ду­ю­щих задач:

  • Опе­ра­тив­ный мони­то­ринг недо­ступ­но­сти узла, если внеш­нее соеди­не­ние прервано.
  • Пере­опре­де­ле­ние IP-адре­са для узла.
  • Кэши­ро­ва­ние запро­сов к дру­гим NS-серверам.
  • Кон­вер­та­ция запро­сов из IPv4 в IPv6 и наоборот.

Может быть уста­нов­лен на систе­мы семей­ства UNIX — Lunux (Debian, Ubuntu, Rocky Linux, CentOS и так далее), BSD, Mac OS. Так­же явля­ет­ся встро­ен­ным DNS-сер­ви­сов для неко­то­рых про­ши­вок роу­те­ров (напри­мер, DD-WRT и OpenWRT). Уста­но­вить dnsmasq мож­но из репо­зи­то­рия опе­ра­ци­он­ной систе­мы (если под­дер­жи­ва­ет­ся) или ска­чать исход­ник с офци­аль­нио­го сай­та. Так­же про­ект выло­жен на GitHub.

Доку­мен­та­цию мож­но про­чи­тать так­же на офи­ци­аль­ном сайте.

Подроб­нее о Dnsmasq на Вики­пе­дии.

Установка, настройка системы и запуск

1. Уста­нов­ка выпол­ня­ет­ся немно­го, по-раз­но­му, в зави­си­мо­сти от выбран­но­го дис­три­бу­ти­ва Linux. Рас­смот­рим при­ме­ры систем на базе Deb и RPM.

а) Для Debian / Ubuntu (Deb):

apt install dnsmasq

б) Для Rocky Linux / CentOS (RPM):

yum install dnsmasq

2. После уста­нов­ки раз­ре­шим авто­за­пуск сервиса.

Вво­дим команду:

systemctl enable dnsmasq

Для систем на базе RPM так­же необ­хо­ди­мо запу­стить сервис:

systemctl start dnsmasq

3. Настра­и­ва­ем бранд­мау­эр. Нам необ­хо­ди­мо открыть UDP порт 53.

Как пра­ви­ло, исполь­зу­ет­ся 2 систе­мы управ­ле­ния netfilter — iptables и firewalld. Рас­смот­рим обе.

а) При исполь­зо­ва­нии iptables (как пра­ви­ло, для систем на базе Deb):

iptables -I INPUT -p udp --dport 53 -j ACCEPT

И сохра­ня­ем правило.

б) При исполь­зо­ва­нии firewalld (как пра­ви­ло, для систем на базе RPM):

firewall-cmd --permanent --add-port=53/udp

firewall-cmd --reload

4. Про­ве­ря­ем рабо­то­спо­соб­ность сер­ви­са. На любом из ком­пью­те­ров в сети дела­ем запрос при помо­щи nslookup:

nslookup test.ru 192.168.0.15

* где 192.168.0.15 — адрес в сети наше­го сер­ве­ра, куда мы уста­но­ви­ли dnsmasq.

Мы долж­ны полу­чить ответ на подобие:

Server:        192.168.0.15
Address:    192.168.0.15#53

Non-authoritative answer:
Name:    test.ru
Address: 92.53.96.18

Наш dnsmasq уста­нов­лен и готов к даль­ней­шей настройке.

Примеры настройки dnsmasq

Пере­хо­дим к основ­ной части инструк­ции. При­ве­дем при­ме­ры исполь­зо­ва­ния и соот­вет­ству­ю­щей настрой­ки dnsmasq.

1. Перевод запросов на другой DNS-сервер для определенного домена

Пред­по­ло­жим, у нас есть зада­ча — пере­во­дить все запро­сы для имен с доме­ном consul на дру­гой DNS-сер­вер, кото­рый нахо­дит­ся в нашей сети. Так­же, дан­ный сер­вер слу­ша­ет не на стан­дарт­ном для NS-сер­ве­ра пор­ту (53), а на пор­ту 8600. Кста­ти, это реаль­ный при­мер рабо­ты при настрой­ке кла­сте­ра consul.

Созда­ем кон­фи­гу­ра­ци­он­ный файл:

vi /etc/dnsmasq.d/consul

В него доба­вим одну строку:

server=/consul/127.0.0.1#8600

* в дан­ном при­ме­ре мы будем пере­во­дить все запро­сы для доме­на consul на сер­вер 127.0.0.1 (в этом при­ме­ре локаль­ный сер­вер, но может быть любой) и порт 8600.

Что­бы настрой­ки всту­пи­ли в силу, пере­за­пус­ка­ем dnsmasq:

systemctl restart dnsmasq

2. Настройка кэширования

По умол­ча­нию, dnsmasq рабо­та­ет как кэши­ру­ю­щий сер­вер. Мы же под­ре­дак­ти­ру­ем настройки.

Созда­ем кон­фи­гу­ра­ци­он­ный файл:

vi /etc/dnsmasq.d/cache

cache-size=10000
all-servers
no-negcache

* где:

  • cache-size — раз­мер кэша (коли­че­ство хостов).
  • all-servers — зада­ет пове­де­ние, при кото­ром наш сер­вер будет отправ­лять запрос всем доступ­ным ему сер­ве­рам DNS и при­ни­мать ответ от того, кто пер­вый ему ответит.
  • no-negcache — не кэши­ро­вать нега­тив­ные ответы.

Что­бы настрой­ки всту­пи­ли в силу, пере­за­пус­ка­ем dnsmasq:

systemctl restart dnsmasq

3. Подмена IP-адресов

Есть несколь­ко вари­ан­тов под­ме­ны IP-адре­сов в dnsmasq. Для настрой­ки созда­дим файл:

vi /etc/dnsmasq.d/replacement

В зави­си­мо­сти от ситу­а­ции, при­ме­ня­ем один из вари­ан­тов, опи­сан­ных ниже.

а) Под­ме­на одно­го адреса:

alias=1.1.1.1,2.2.2.2

* в дан­ном при­ме­ре если наш сер­вер полу­чит ответ 1.1.1.1, он его заме­нит на 2.2.2.2.

б) Под­ме­на адре­сов в подсети:

alias=1.1.1.0,2.2.2.0,255.255.255.0

* в дан­ном при­ме­ре все адре­са из под­се­ти 1.1.1.0/24  будут заме­не­ны на соот­вет­ству­ю­щие адре­са под­се­ти 2.2.2.2/24.

в) Диа­па­зо­ны:

alias=1.1.1.100-1.1.1.200,192.168.0.0,255.255.255.0

* в дан­ном при­ме­ре адре­са в диа­па­зоне от 1.1.1.100  до 1.1.1.200  будут пере­опре­де­ле­ны в адре­са в диа­па­зоне от 192.168.0.100  до  192.168.0.200.

После вне­се­ния необ­хо­ди­мых строк, нуж­но пере­за­гру­зить сервис.

Выпол­ня­ем команду:

systemctl restart dnsmasq

Это, дале­ко, не все воз­мож­но­сти dnsmasq. По мере необ­хо­ди­мо­сти, они будут допол­нять­ся в дан­ной инструкции.