dnsmasq
Когда-то многие из нас занимались разработкой сайтов, и, чтобы локально разрабатывать и тестировать очередной проект,
добавляли в /etc/hosts
ещё одну запись примерно такого вида:
127.0.0.1 next-project.tld
Если же сайт поддерживал поддомены, например, региональные, /etc/hosts
превращался в простыню, которую публиковали в
wiki, чтобы передать коллегам, вручную обновляя каждый раз, когда появлялся новый поддомен:
127.0.0.1 next-project.tld
127.0.0.1 msk.next-project.tld
127.0.0.1 spb.next-project.tld
...
Теперь, чаще или постоянно работая с микросервисами, эта проблема частично уходит в прошлое: мы заводим сервис на отдельном порту, обкладываемся моками, разрабатываем и дебажим.
Однако потребность в имитации окружений всё ещё не отпала. Локальное развёртывание всё ещё может требовать наличия доменов и поддоменов для ваших сервисов, например:
svc1.minikube.dmz
svc2.minikube.dmz
svc3.minikube.dmz
...
Поддерживать /etc/hosts
довольно неудобно. В нём будут появляться новые домены и терять свою актуальность старые.
Также его содержимое будет необходимо передавать вашим коллегам, поддерживая источник правды в актуальном состоянии.
Чтобы полностью автоматизировать работу с локальными доменами и поддоменами, я использую dnsmask
. Довольно странно,
что редко кто вспоминает о нём, продолжая поддерживать руками /etc/hosts
.
Приведу пример настройки на macOS
. Настройка на Linux
происходит аналогично; учитывайте специфику вашего
дистрибутива. В примере мы настроим зону .dmz
на локальной машине:
brew install dnsmasq # тот редкий случай,
# когда я рекомендую ставить пакет через brew
sudo mkdir -pv /etc/resolver
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/dmz'
echo 'address=/.dmz/127.0.0.1' >> $(brew --prefix)/etc/dnsmasq.conf
sudo brew services start dnsmasq
ping -c 2 project.dmz
ping -c 2 another.project.dmz
Теперь все домены в зоне .dmz
будут доступны на вашей машине без модификации /etc/hosts
. Всё работает довольно
прозрачно, менять настройки DNS
в параметрах сетевого адаптера вам не потребуется.
Если вам нужно больше зон, добавьте соответствующие конфигурационные файлы по аналогии с именем необходимой вам зоны.
Подобную настройку легко автоматизировать и воспроизвести на машинах ваших коллег, избавив всю команду от поддержки
источника правды в виде расшаренного и постоянно устаревающего файла /etc/hosts
.
Что важно помнить? Доменные зоны .local
и .dev
существуют в реальности и зарезервированы. Зона .dmz
может
использоваться в вашей внутренней сети. Поэтому при выборе корневой зоны для локального использования сначала
посоветуйтесь с вашими коллегами-сетевиками. Они подскажут, какую зону можно безопасно использовать для локальной
разработки.