Укрощаем dnsmasq

В этой статье будет рассмотрено несколько примеров по работе лёгкого DHCP/DNS-сервера dnsmasq. В частности, как задать нужные DNS сервера на роутере и как раздавать пользователям нужные настройки.

Тестовый стенд: LinkSys WRT54GL/160NL,  прошивка OpenWRT kamikadze/backfire

1) Устанавливаем правильные DNS сервера на роутере

Как пример, я столкнулся с тем, что не могу выставить нужные мне DNS-сервера на роутере. Как и многие системные администраторы я привычным образом редактирую /etc/resolv.conf на предмет указания нужных мне DNS-серверов. Все работает.

НО! Только до первой перезагрузки. После ребута роутера файл /etc/resolv.conf очищается и в него добавляется одна единственная запись:

nameserver 127.0.0.1

Это нам не подходит.

Подумал, может не прописаны DNS в настройках сети. Открываю файл /etc/config/network и вижу, что DNS сервера прописаны (это касается зоны wan):

option 'dns' '8.8.8.8'

Почему же тогда параметры не применяются? Ответ на этот вопрос даёт процесс dnsmasq, который входит в конфигурацию по умолчанию и запускается автоматически при старте ОС.

Если убрать из автозапуска процесс dnsmasq (для этого просто удаляем символическую ссылку S60dnsmasq из каталога /etc/rc.d/) то будет прописываться тот DNS сервер, который указан в /etc/config/network. Но при этом сам роутер не будет выступать в качестве DNS и DHCP серверов.

Если же вам нужны эти службы, то можно подправить скрипт запуска dnsmasq. Открываем файл /etc/init.d/dnsmasq и ищем такой блок:

start() {
include /lib/network
scan_interfaces
config_load dhcp
args=""
config_foreach dnsmasq dnsmasq
config_foreach dhcp_host_add host
config_foreach dhcp_boot_add boot
config_foreach dhcp_mac_add mac
config_foreach dhcp_vendorclass_add vendorclass
config_foreach dhcp_userclass_add userclass
config_foreach dhcp_circuitid_add circuitid
config_foreach dhcp_remoteid_add remoteid
config_foreach dhcp_subscrid_add subscrid
config_foreach dhcp_add dhcp
/usr/sbin/dnsmasq $args && {
rm -f /tmp/resolv.conf
DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
for DNS_SERVER in $DNS_SERVERS ; do
echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
done
}
}

И ищем строку

DNS_SERVERS="$DNS_SERVERS 127.0.0.1"

И меняем на такую

DNS_SERVERS="$DNS_SERVERS 8.8.8.8 8.8.4.4"

Теперь после перезагрузки в /etc/resolv.conf будут прописаны нужные DNS сервера.

2) Выдаём пользователям нужные настройки.

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

Открываем файл /etc/dnsmasq.conf и добавляем такие строки:

— для указания нужного шлюза по умолчанию:

dhcp-option=br-lan,3,10.60.68.17

— для указания нужных DNS серверов

dhcp-option=br-lan,6,50.50.58.57,8.8.8.8

— для указания нужного tftp-сервера

dhcp-option=br-lan,66,10.1.0.60

где br-lan — сетевой интерфейс, на котором работает dnsmasq

Если tftp-сервер находится не на роутере, то эта опция работать не будет. Вместо неё следует применять такую

dhcp-boot=pxelinux.0,tftp-server-name,10.1.0.60

где pxelinux.0 — имя файла для загрузки, tftp-server-name — имя tftp-сервера, 10.1.0.60 — адрес tftp-сервера.

Так же как альтернатива, можно использовать вместо числового указания, мнемоническое:

dhcp-option=option:router,12.18.1.1
dhcp-option=option:dns-server,19.18.1.77,1.1.2.2

Полностью все параметры можно узнать по команде:

#dnsmasq --help dhcp

Понятно, какая опция за что отвечает. Перегружаем dnsmasq и работаем с новыми настройками:

#/etc/init.d/dnsmasq restart

Укрощаем dnsmasq: 4 комментария

  1. vasistep

    Приветствую!
    Не знаю как на OpenWRT, но на DD-WRT v24-sp2 (08/07/10) std build 14896 (D-link DIR-400) проблема с очередностью обращения к DNS серверам решается дополнительными настройками DNSMasq в web-интерфейсе:


    strict-order
    server=xxx.xxx.2.23
    server=xxx.xxx.2.24

    При таком подходе, указанные выше сервера опрашиваются прежде тех, которые записаны в resolv.dnsmasq (resolv.conf)

  2. Владимир

    а не подскажешь как можно восстановить загрузку линукса? думаю что причина связана с описаным в этой статье….
    после неизвестных мне манипуляций с компом (работала жена) перестала запускаться Ubuntu Studio (((( вроди как идет загрузка, доходит до заставки «Ubuntu 12.10» и тупо зависает ….на компе две операционки, эта и XP….винда загружается без проблем ….
    может поможет вот эта запись
    dnsmasq: faild to create listening socket for 127.0.0.1: Addres alredy in use
    *Starting DNS forwarder and DHCP server dnsmasq [fail]
    …….
    что может быть? можно как-то исправить с командной строки? спасибо.

Добавить комментарий для skeletor Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *