Иногда один и тот же домен должен по-разному резолвиться изнутри и снаружи.
Например:
с интернета app.networkadmin.ru должен вести на публичный IP
из локальной сети - на внутренний адрес
внутри VPN - вообще на отдельный хост или балансировщик
Для этого и используют split-horizon DNS.
Его суть простая: разным клиентам DNS-сервер отдает разные ответы на один и тот же запрос.
▪️ На практике это выглядит так:
внешние клиенты получают публичный IP
внутренние - приватный IP
пользователи ходят по одному и тому же имени, но попадают разными маршрутами
Пример:
app.networkadmin.ruСнаружи:
203.0.113.10Изнутри:
10.10.20.15▪️ Зачем это нужно:
не гонять внутренний трафик через внешний периметр;
не упираться в NAT loopback / hairpin NAT;
использовать один и тот же FQDN для всех пользователей;
разделять внутренние и внешние сервисы без лишнего зоопарка имен;
Звучит удобно, но именно здесь часто начинаются проблемы.
▪️ Что обычно ломают:
внутренний и внешний DNS живут разной жизнью. Снаружи запись уже поменяли, внутри забыли. В итоге часть пользователей ходит на старый IP.
сертификаты и TLS. Если внутри и снаружи используются разные имена для удобства, потом начинаются сюрпризы с HTTPS, redirect и SSO.
внутренний адрес недоступен части клиентов.Например, ноутбук без VPN получает внутренний DNS-ответ, но до приватного IP дотянуться не может.
отладка становится сложнее. У одного пользователя сервис работает, у другого - нет. И оба резолвят один и тот же домен, но в разные адреса.
▪️ Классический безопасный сценарий:
одно и то же DNS-имя;
внешний DNS отдает публичный IP;
внутренний DNS отдает приватный IP;
приложение и сертификаты рассчитаны на один FQDN.
▪️ Проверять это лучше явно:
dig app.networkadmin.ru
dig @internal-dns app.networkadmin.ru
dig @8.8.8.8 app.networkadmin.ru
Так сразу видно, какие ответы получают разные резолверы.
#dns #network
🧑💻 NetworkAdmin