В этой статье будет рассмотрено несколько примеров по работе лёгкого 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
4 коментарі “Укрощаем dnsmasq”
Приветствую!
Не знаю как на 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)
Спасибо за дополнение.
а не подскажешь как можно восстановить загрузку линукса? думаю что причина связана с описаным в этой статье….
после неизвестных мне манипуляций с компом (работала жена) перестала запускаться 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]
…….
что может быть? можно как-то исправить с командной строки? спасибо.
Вообще не связано.