При локальной разработке часто возникает необходимость, чтобы все тестовые домены (например, mysite.local, api.test или даже целая зона *.dev) указывали на ваш локальный сервер (127.0.0.1). Это удобно для работы с несколькими проектами, настройки прокси или имитации продакшен-окружения.
В этой статье разберём, какие есть способы организовать локальный DNS и какие инструменты лучше всего подходят для разных систем.
Вариант 1. Файл hosts (просто, но ограниченно)
Самый очевидный вариант — использовать системный файл hosts.
- Linux/Mac:
/etc/hosts - Windows:
C:\Windows\System32\drivers\etc\hosts
Пример записи:
127.0.0.1 mysite.local
127.0.0.1 api.local
❌ Минусы:
- Нужно прописывать каждый домен вручную.
- Нельзя использовать маску
*.local.
Подходит только для пары доменов, но не для масштабной разработки.
Вариант 2. Локальный DNS-резолвер (рекомендуется)
Если вы хотите, чтобы все поддомены или целые зоны (например, *.local или *.test) указывали на 127.0.0.1, лучше использовать локальный DNS-сервер.
Linux / macOS: dnsmasq
Устанавливаем:
# macOS (через Homebrew)
brew install dnsmasq
# Ubuntu/Debian
sudo apt install dnsmasq
Редактируем конфиг (/usr/local/etc/dnsmasq.conf на macOS или /etc/dnsmasq.conf на Linux):
address=/.test/127.0.0.1
address=/.local/127.0.0.1
Перезапускаем:
# macOS
sudo brew services restart dnsmasq
# Linux
sudo systemctl restart dnsmasq
Теперь все запросы к доменам вида *.test или *.local будут автоматически перенаправляться на 127.0.0.1.
Windows: Acrylic DNS Proxy
Для Windows удобно использовать Acrylic DNS Proxy.
Он перехватывает DNS-запросы и позволяет настраивать зоны по аналогии с dnsmasq.
Пример настройки:
address=/.local/127.0.0.1
Вариант 3. Контейнеры и прокси
Если вы работаете с Docker, можно использовать готовые решения:
- Traefik
- nginx-proxy
Они умеют перехватывать домены (например, project1.local, project2.local) и автоматически проксировать запросы к нужным контейнерам. Отличный вариант для разработки сразу нескольких сервисов.
Вариант 4. Особенности macOS: resolver
На macOS есть удобный механизм resolver, который позволяет задать правила для отдельных доменных зон.
Например, создадим резолвер для .test:
sudo mkdir -p /etc/resolver
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/test
Теперь все домены с окончанием .test будут резолвиться через ваш локальный DNS (например, dnsmasq).
✅ Вывод
Если вам нужно просто добавить пару доменов — используйте hosts.
Если хотите настроить полноценное окружение с wildcard-доменами (*.local, *.test) — ставьте dnsmasq (Linux/Mac) или Acrylic DNS (Windows).
Для Docker-сервисов лучше подойдут Traefik или nginx-proxy.
Таким образом, локальный DNS упрощает разработку и делает окружение ближе к продакшену.