Приветствую.
Допустим, у меня есть набор из нескольких подсетей /24, соединённых различными IP-туннелями (в смысле, L3, а не L2) в топологии «звезда». В частности, две подсети соединяются с центральной через IPsec между роутерами в туннельном режиме, и ещё есть подсеть для OpenVPN-клиентов (OpenVPN-сервер находится в центральной подсети, но на отдельной машине). Все подсети лежат внутри 10.0.0.0/8. OSPF и прочими протоколами динамической маршрутизации не пользуюсь, везде статические маршруты. Это всё как-то работает (все всех видят). Для определённости, все роутеры Mikrotik.
Теперь собственно задача. В каждой подсети есть свой кэширующий DNS-сервер-ресолвер, в кэш которого инжектируются записи о DHCP-клиентах в данной подсети (как dnsmasq, но не dnsmasq). Доменные зоны везде разные (*.1.lan, *.2.lan и так далее). И ещё у OpenVPN-сервера есть свой список клиентов с именами. И хочется сделать так, чтобы любой узел в любой подсети мог заресолвить имя любого другого узла, обращаясь к «своему» кэширующему ресолверу (к тому, чей адрес он получает через DHCP).
Как лучше всего это сделать? Я придумал три одинаково хреновых подхода.
Простейший и мегакостыльный способ 1 — синхронизировать списки клиентов, т. е. при появлении DHCP-клиента в любой подсети DHCP-сервер роутера через lease script будет стучаться по SSH на все остальные роутеры и добавлять это имя во все кэши. То же самое для OpenVPN-сервера.
Ещё один простейший и скорее всего нерабочий способ 2 — выдавать через DHCP адреса всех кэширующих ресолверов, а не только свой. Но это наверняка будет тормозить, потому что наверняка найдётся клиент, который перепутает порядок и будет пинать чужой сервер через VPN по умолчанию. Или, как вариант 2a, прописать адреса всех кэширующих ресолверов на каждом роутере как статические upstream DNS servers. Наверное, будет получше, но всё равно порядок опроса наверняка где-нибудь навернётся.
Наконец, способ номер 3 поизящнее — поднять в центре полновесный DNS-сервер, в котором делегировать каждую зону на соответствующий кэширующий ресолвер через VPN, и прописать этот DNS-сервер как второй upstream DNS server на каждом роутере. Но я не знаю, что взять в качестве полновесного DNS-сервера и как заставить ресолверы роутеров ресолвить запросы к *.lan через этот сервер, а остальные — через нормальный?
Есть ли у уважаемых админов и недоадминов ЛОРа какие-либо предложения (помимо «убей себя об стену, нуб»), комментарии (помимо «больной поехавший ублюдок»), идеи (помимо «оставить администрирование и идти работать дворником»)?