metalnikovg.ru
MetalnikovG.ru

Организация Spit DNS с Adguard Home

Banner.png
Опубликовано
//
3 мин. чтения

Введение

Split DNS (Разделенный DNS) - это конфигурация, которая использует различные наборы DNS-серверов для разрешения доменных имен в зависимости от местоположения запрашивающего. Используя Разделенный DNS, можно отправлять разные DNS-ответы для одного и того же доменного имени в зависимости от того, исходит ли запрос из внутренней сети или из публичного интернета.

Этот подход предлагает несколько преимуществ:

  1. Улучшенную производительность сети. Внутренние пользователи направляются к ресурсам внутри локальной сети без ненужного трафика через внешние сети а следствии этого снижается задержка и улучшается общая производительность внутренних сервисов. В то время как внешние пользователи направляются к общедоступным ресурсам.
  2. Повышенную безопасность. Разделенный DNS помогает улучшить безопасность сети, снижая поверхность атаки, подвергающуюся публичному интернету. Предоставляя разные DNS-ответы для внутренних и внешних пользователей, можно эффективно изолировать свою внутреннюю сеть от потенциальных угроз, исходящих из интернета. Этот подход также ограничивает доступ к внутренним ресурсам, которые могут быть уязвимы к внешним атакам.
  3. Оптимизированная доступность ресурсов. Разделенный DNS обеспечивает доступ внутренних пользователей к внутренним ресурсам, даже если они недоступны из публичного интернета. Это позволяет размещать частные ресурсы, такие как внутренние веб-сайты или файловые серверы, предназначенные только для внутреннего использования.

Применение в домашних условиях

Если вы публикуете свои локальные приложения и сервисы в интернет с помощью Traefik. то при обращении к ним по доменному имени, ваш запрос поступает на DNS сервер который в свою очередь разрешает его в ваш внешний IP адрес. Например у вас есть сервис с локальным IP 192.168.78.99 и он проксируется через Traefik который работает по адресу 192.168.78.110. У вашего регистратора доменного имени в DNS зоне domain.ru имеется A-записью - 104.21.75.252 с FQDN именем app.domain.ru. При обращении по этому доменному имени в локальной сети, DNS отвечает нам, что он доступен по адресу 104.21.75.252 - это наш внешний IP адрес, соответственно чтобы попасть на него нам нужно выйти за пределы нашей локальной сети и потом вернуться обратно.

Если мы сделаем трассировку до него, то увидим весь маршрут, он будет выглядеть примерно так:

$ traceroute app.domain.ru
traceroute to app.domain.ru (104.21.75.252), 30 hops max, 60 byte packets
 1  _gateway (192.168.78.254)  0.261 ms  0.258 ms  0.209 ms
 2  15.19.0.106 (15.19.0.106)  9.347 ms 15.19.0.110 (15.19.0.110)  9.454 ms  9.264 ms
 3  15.19.0.242 (15.19.0.242)  1.578 ms  1.965 ms  1.925 ms
 4  87.245.255.180  12.696 ms  12.328 ms  12.288 ms
 5  139.45.224.56 (139.45.224.66)  10.166 ms  10.125 ms  10.138 ms
 6  ae15-8.rt.lim.waw.pl.retn.net (87.245.232.177)  25.161 ms  24.841 ms  27.909 ms
 7  * * 162.158.100.252 (162.158.100.252)  31.950 ms
 8  162.158.100.23 (162.158.100.23)  33.691 ms 162.158.100.27 (162.158.100.27)  27.062 ms  28.482 ms
 9  104.21.75.252 (104.21.75.252)  26.238 ms  26.410 ms  26.583 ms

Т.е. чтоб попасть в наше локальное приложение мы проходим через множество шагов. И итоговое время прохождения составляет больше 26 мс.

С помощью Adguard Home мы можем настроить перезапись запросов и организовать своего рода Split DNS. Для этого переходим в Фильтры -> Перезапись DNS-запросов и добавляем новое правило перезаписи. Указываем FQDN имя и локальный адрес на котором работает Traefik.

После этого очищаем DNS-кэш и повторяем трассировку:

$ traceroute app.domain.ru
traceroute to app.domain.ru (192.168.78.110), 30 hops max, 60 byte packets
 1  192.168.78.110 (192.168.78.110)  0.256 ms  0.262 ms  0.247 ms

Теперь мы сразу попадаем в наш сервис по его локальному адресу всего за четверть миллисекунды.

Также вы можете ограничить доступ к внешним ресурсам. Например если вы используете Traefik и Cloudflare, можно создать А-запись которая будет указывать на локальный IP-адрес сервиса и ограничить доступ к нему указав список разрешенных IP адресов или подсетей внутри локальной сети.

Следующая заметка →Cоздание Cloudflare Tunnel