Как настроить split DNS для subnet router в Tailscale?
Ситуация:
В домашней сети есть основной роутер с IP-адресом 10.10.10.1
За ним расположена подсеть 20.20.20.0/24, где находятся различные IoT-устройства, включая камеры YI.
После настройки subnet router в подсети все устройства стали доступны извне, и система работает корректно.
Однако камеры YI не поддерживают резервирование DHCP-адресов и привязку IP к MAC-адресам. Установка статического IP-адреса непосредственно на самих устройствах невозможна. В результате после истечения срока аренды IP-адреса устройства получают случайные IP-адреса, что требует ручного поиска и подключения.
Вопрос:
Как запустить локальный DNS-сервер? Что и где нужно настроить, чтобы обращение к камерам осуществлялось через локальные имена, например: rtsp://camer001.local/channel1? Также необходимо обеспечить возможность определения текущего IP-адреса устройства по его локальному имени.
Настроить split DNS для subnet router в Tailscale можно через раздел DNS административной консоли, добавив локальный DNS-сервер для разрешения внутренних имен устройств. Для YI-камер, которые не поддерживают резервирование DHCP, локальный DNS позволит обращаться к устройствам по постоянным именам, таким как camer001.local, независимо от их текущего IP-адреса.
Содержание
- Что такое split DNS и почему он нужен
- Настройка локального DNS-сервера
- Конфигурация split DNS в Tailscale
- Настройка subnet router для доступа к DNS
- Практическая реализация для YI-камер
- Решение проблем с доступом
- Альтернативные подходы
Что такое split DNS и почему он нужен
Split DNS (раздельный DNS) — это конфигурация, при которой DNS-запросы направляются на разные серверы в зависимости от домена. В контексте Tailscale это позволяет:
- Использовать внутренний DNS-сервер для локальных доменов (например,
.local) - Продолжать использовать публичные DNS-серверы для интернет-доменов
- Обеспечить постоянное разрешение имен IoT-устройств, независимо от их IP-адресов
Важно: Как отмечено в документации Tailscale, split DNS создает DNS-сервер, который отвечает на записи, не используемые в публичном интернете.
Настройка локального DNS-сервера
Для решения проблемы с YI-камерами необходим локальный DNS-сервер в вашей сети. Вот несколько вариантов:
Вариант 1: Использование роутера
Если ваш основной роутер (10.10.10.1) поддерживает функцию локального DNS:
- Зайдите в веб-интерфейс роутера
- Найдите раздел DHCP/DNS
- Включите опцию локального DNS
- Добавьте записи для ваших устройств
Вариант 2: Установка отдельного DNS-сервера
Для более надежной настройки можно установить отдельный DNS-сервер на устройстве в подсети 20.20.20.0/24:
# Пример установки dnsmasq на Linux
sudo apt update
sudo apt install dnsmasq
Вариант 3: Использование Docker
docker run -d --name=local-dns \
-p 53:53/udp \
-e "DOMAINS=local" \
-e "DNSMASQ_HOSTS=camer001.local=20.20.20.10, camer002.local=20.20.20.11" \
--restart=always \
andyshinn/dnsmasq:latest
Примечание: Как объясняется в статье о subnet router, для использования внутреннего DNS-сервера необходимо настроить split DNS в разделе DNS административной консоли.
Конфигурация split DNS в Tailscale
Для настройки split DNS выполните следующие шаги:
- Зайдите в административную консоль Tailscale
- Нажмите “Add nameserver”
- Укажите параметры:
- DNS-сервер: IP-адрес вашего локального DNS (например, 10.10.10.1 или адрес сервера в подсети)
- Домены:
localили конкретные домены ваших устройств
Пример конфигурации:
Имя сервера: Local DNS Server
IP-адрес: 10.10.10.1
Домены: local, .local
Совет: Как упоминается в обсуждении на Reddit, для корректной работы нужно, чтобы
nas.localуказывал на ваш DNS-сервер.
Настройка subnet router для доступа к DNS
Поскольку ваш локальный DNS-сервер находится в подсети 20.20.20.0/24, необходимо убедиться, что subnet router правильно настроен для маршрутизации DNS-запросов:
- Проверьте настройки subnet router:
tailscale status
- Убедитесь, что маршруты корректно анонсированы:
tailscale set --advertise-routes=20.20.20.0/24
- Проверьте доступность DNS-сервера:
# С устройства в Tailscale
nslookup camer001.local 10.10.10.1
Важно: Как указано в документации Tailscale, если ваши DNS-серверы не являются публичными или не используют IP-адреса Tailscale, вам, вероятно, потребуется настроить маршрутизацию подсетей для доступа к частным DNS-серверам.
Практическая реализация для YI-камер
Для YI-камер, которые не поддерживают резервирование DHCP, реализация будет выглядеть следующим образом:
Настройка на локальном DNS-сервере
Добавьте постоянные записи для ваших камер:
Для dnsmasq:
address=/camer001.local/20.20.20.10
address=/camer002.local/20.20.20.11
address=/camer003.local/20.20.20.12
Для роутера с DD-WRT:
- Зайдите в Services → DNSMasq
- Добавьте:
address=/camer001.local/20.20.20.10
address=/camer002.local/20.20.20.11
Конфигурация доступа к камерам
Теперь вы можете обращаться к камерам через имена:
# Примеры доступа к камерам
rtsp://camer001.local:554/channel
rtsp://camer002.local:554/channel1
rtsp://camer003.local:554/stream
Совет: Как видно из примера на GitHub, для локальных имен можно использовать поддомены, такие как
local.zila.dev, что позволяет использовать единые сертификаты TLS.
Решение проблем с доступом
Проблема 1: DNS-запросы не доходят до локального сервера
Решение:
- Проверьте, что subnet router правильно маршрутизирует трафик в подсеть
- Убедитесь, что брандмауэр не блокирует UDP-порты 53
- Проверьте конфигурацию split DNS в консоли Tailscale
Проблема 2: Камеры не доступны по именам
Решение:
# Проверьте разрешение имен
nslookup camer001.local 10.10.10.1
# Проверьте доступность
ping camer001.local
# Проверьте доступ к RTSP-потоку
ffprobe -i rtsp://camer001.local:554/channel
Проблема 3: Конфликт DNS-серверов
Решение: Как упоминается в настройках клиента, если вы хотите использовать только локальный DNS, в меню устройства снимите галочку “Use Tailscale DNS settings”.
Альтернативные подходы
1. Использование MagicDNS для Tailscale
Если устройства имеют IP-адреса в подсети 20.20.20.0/24, вы можете использовать MagicDNS:
# Настройка MagicDNS для имен в подсети
tailscale set --magicdns=enabled
tailscale set --advertise-routes=20.20.20.0/24
2. Использование /32 маршрутов
Как упоминается в обсуждении, можно использовать /32 адреса в CIDR-нотации для subnet router:
tailscale set --advertise-routes=20.20.20.10/32,20.20.20.11/32,20.20.20.12/32
3. Обратный прокси
Для веб-интерфейсов камер можно настроить обратный прокси на subnet router:
# Пример конфигурации Nginx
server {
listen 80;
server_name camer001.local;
location / {
proxy_pass http://20.20.20.10;
proxy_set_header Host $host;
}
}
Важно: Как отмечено в статье о DNS rebinding, для проблемных DNS-серверов может потребоваться настроить исключение для определенных доменных имен.
Источники
- Configure Split DNS with Tailscale and Local DNS
- DNS in Tailscale - Official Documentation
- SplitDNS magic with Tailscale
- Subnet routers - Tailscale Docs
- What is Split DNS & Why Should You Use It?
- Custom DNS for machines - GitHub Issue
- Manage client preferences - Tailscale Docs
- DNS problems with internal services - Tailscale Docs
Заключение
Настройка split DNS для subnet router в Tailscale позволяет решить проблему с динамическими IP-адресами IoT-устройств, таких как YI-камеры. Ключевые моменты:
- Настройте локальный DNS-сервер в вашей сети для разрешения внутренних имен
- Сконфигурируйте split DNS в административной консоли Tailscale, добавив ваш DNS-сервер для домена
.local - Убедитесь в правильности маршрутизации между подсетями для доступа к DNS-серверу
- Добавьте постоянные DNS-записи для ваших камер, чтобы они разрешались в фиксированные IP-адреса
- Тестируйте доступ через RTSP-потоки с использованием локальных имен
После настройки вы сможете обращаться к камерам через постоянные имена типа rtsp://camer001.local/channel, что значительно упростит управление устройствами и избавит от необходимости ручного поиска IP-адресов.