Чужой опыт экономит время и увеличивает шансы для удачи

Почему на VPS-VDS нужен как минимум dnsmasq

Минимальный DNS на свой сервер нужен потому, что при любой ошибке, сбое - система стучится к провайдеру, к его настройкам, его DNS и пр. А настроено у провайдера может быть что угодно. Например из того что мне попадалось в разное время - какие-то IP почему-то сопоставлены некоторым (и это особенно странно - что не всем, а некоторым) ошибочным доменам. Т.е. стоит допустить ошибку в имени домена и curl-запрос со всякими интересным параметрами вдруг начинает лезть на IP локальной сети (где-то у провайдера). Или localhost при случайной ошибке в настройках вдруг оказывается на каком-то непонятном IP который непонятно откуда взялся (из ближайшего DNS судя по всему). В общем, чтобы этого не было - нужен минимальный локальный DNS. И минимальный - это как раз dnsmasq.

Мне недавно понадобилось временно внести пару тестовых доменов в /etc/hosts (указав там сопоставление этих тестовых несуществующих доменов - IP своего сервера). Оказалось что один несуществующий домен повел себя так как я ожидал, а второй - "приклеился" к IP в локальной сети провайдера. Я не хочу затрагивать причины того почему так произошло. Важно что это не первая такая ситуация. И решаются все проблемы такого рода установкой dnsmasq.

Установка dnsmasq

Установка на Debian и т.п. стандартная:
apt-get install dnsmasq

Минимальная конфигурация dnsmasq

Задача - внести минимальное количество изменений в систему - только такие, которые нужны чтобы на сервере пинговалось гарантированно то что прописано в /etc/hosts

После установки редактируем конфиг:
nano /etc/dnsmasq.conf

...

stop-dns-rebind

clear-on-reload

...

port=53

...

domain-needed

...

bogus-priv

...

no-resolv

...

no-poll

...

server=8.8.8.8

server=8.8.4.4

...

interface=eth0

...

no-dhcp-interface=eth0

...

Перезапуск для применения настроек:
/etc/init.d/dnsmasq restart

ВАЖНО!
Синим цветом выделено то, что понадобилось добавить (у меня это отсутствовало в конфиге).
Указаны только те строки, которые нужно изменить, а остальные в минимальном варианте можно оставить как есть.
Красным цветом отмечено то что может понадобиться изменить в соответствие с настройками своего сервера.

Некоторые пояснения:
stop-dns-rebind - запретить ответы вышестоящих DNS с IP локальной сети
clear-on-reload - очистка кэша при перезапуске
domain-needed - нужно полноценное имя домена
no-resolv - не читать DNS в /etc/resolv.conf
no-poll - отключаем наблюдение за изменениями в resolv.conf
server=... - здесь указаны DNS Google
no-dhcp-interface - отключаем DHCP в dnsmasq

Настройка тестовых имен доменов в hosts

Добавляем для проверки например тестовые (несуществующие) имена доменов:
nano /etc/dnsmasq.conf

...

1.0.0.2 myrealserver.tld testserver1.tld testserver2.tld

...

ВАЖНО! Здесь указан IP (1.0.0.2) и доменные имена только для примера!

Теперь если в консоли выполнить ping, то получим гарантированное сопоставление указанному IP
(а без dnsmasq поведение было непредсказуемым - даже при том же hosts).

В итоге в консоли на сервере должно быть что-то вроде:
ping testserver1.tld

PING testserver1.tld (1.0.0.2) 56(84) bytes of data.
64 bytes from myrealserver.tld (1.0.0.2): icmp_req=1 ttl=64 time=0.025 ms
64 bytes from myrealserver.tld (1.0.0.2): icmp_req=2 ttl=64 time=0.061 ms
64 bytes from myrealserver.tld (1.0.0.2): icmp_req=3 ttl=64 time=0.064 ms
...

Где это может понадобиться

Я столкнулся проблемами при тестировании локальных заданий Cron, где были указаны тестовые домены. Мне казалось что прописав их в hosts получаешь гарантированное сопоставление, но почему-то один из моих тестовых доменов лез в локалку провайдера.
И такие ситуации у меня бывали и раньше - например при тестировании с участием curl и т.п.
В общем dnsmasq на минимальных настройках достаточно просто решает все такие проблемы.

Рекламные ссылки:

Вопросы по теме статьи (просьба - без личностей), - присутствует премодерация:
   - регистрироваться НЕ обязательно! -

Комментарий будет опубликован только после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)