История изменений
Исправление intelfx, (текущая версия) :
Да, это работает.
Итак:
dnsmasq.conf на 10.159.230.2:
port=5353
no-resolv
server=/9-20.lan/10.159.230.1
server=/230.159.10.in-addr.arpa/10.159.230.1
server=/sanino.lan/10.167.15.1
server=/15.167.10.in-addr.arpa/10.167.15.1
# сюда остальные подсети с IPsec-туннелями
local=/ovpn.lan/
no-hosts
addn-hosts=/etc/admin/hosts
openvpn.conf на 10.159.230.2 (выдержка):
script-security 2
client-connect "/etc/systemd/scripts/admin/openvpn-client.sh connect .ovpn.lan /etc/admin/hosts"
client-disconnect "/etc/systemd/scripts/admin/openvpn-client.sh disconnect .ovpn.lan /etc/admin/hosts"
push "dhcp-option DNS 10.159.230.1"
push "dhcp-option DOMAIN lan"
openvpn-client.sh на 10.159.230.2: http://ix.io/1Ts5
Файрволл на 10.159.230.1 и аналогично на остальных роутерах:
[admin@router] > /ip firewall layer7-protocol print
# NAME REGEXP
0 ;;; DNS queries for .9-20.lan or DNS PTR queries for 10.159.230.0/24
dns:9-20.lan ([\x04]9-20[\x03])|([\x03]230[\x03]159[\x02]10[\x07]in-addr[\x04]arpa)
1 ;;; DNS queries for .lan or DNS PTR queries for 10.0.0.0/8
dns:lan ([\x03]lan)|([\x02]10[\x07]in-addr[\x04]arpa)
[admin@router] > /ip firewall nat print # выдержка
5 ;;; Conditional DNS forwarding
chain=dstnat action=jump jump-target=dstnat-dns protocol=udp dst-address=10.159.230.1 dst-port=53 log=no
6 ;;; Conditional DNS forwarding: *.9-20.lan -> ignore
chain=dstnat-dns action=return layer7-protocol=dns:9-20.lan log=no
7 ;;; Conditional DNS forwarding: *.lan -> server
chain=dstnat-dns action=dst-nat to-addresses=10.159.230.2 to-ports=5353 layer7-protocol=dns:lan protocol=udp log=no
DHCP lease-скрипт на 10.159.230.1: http://ix.io/1Ts9
Здесь опущены SNAT-правила, нужные для правильной маршрутизации DNS-ответов в OpenVPN-подсети (т. к. DNS-сервер и OpenVPN-сервер на одной и той же машине, без SNAT ответы от DNS направляются сразу в OpenVPN-подсеть и не проходят обратную подмену адреса). Запросы к 9-20.lan (это как раз 10.159.230.0/24) принимаются и отвечаются встроенным ресолвером, остальные запросы к lan перенаправляются на 10.159.230.2:5353. Синхронизация DHCP и DNS выполняется lease-скриптом, добавление DNS-записей для OpenVPN клиентов выполняется client-connect скриптом в сервере OpenVPN. На остальных роутерах аналогично.
Исходная версия intelfx, :
Да, это работает.
Итак:
dnsmasq.conf на 10.159.230.2:
port=5353
no-resolv
server=/9-20.lan/10.159.230.1
server=/230.159.10.in-addr.arpa/10.159.230.1
server=/sanino.lan/10.167.15.1
server=/15.167.10.in-addr.arpa/10.167.15.1
# сюда остальные подсети с IPsec-туннелями
local=/ovpn.lan/
no-hosts
addn-hosts=/etc/admin/hosts
openvpn.conf на 10.159.230.2 (выдержка):
script-security 2
client-connect "/etc/systemd/scripts/admin/openvpn-client.sh connect .ovpn.lan /etc/admin/hosts"
client-disconnect "/etc/systemd/scripts/admin/openvpn-client.sh disconnect .ovpn.lan /etc/admin/hosts"
push "dhcp-option DNS 10.159.230.1"
push "dhcp-option DOMAIN lan"
openvpn-client.sh на 10.159.230.2: http://ix.io/1Ts5
Файрволл на 10.159.230.1 и аналогично на остальных роутерах:
[admin@router] > /ip firewall layer7-protocol print
# NAME REGEXP
0 ;;; DNS queries for .9-20.lan or DNS PTR queries for 10.159.230.0/24
dns:9-20.lan ([\x04]9-20[\x03])|([\x03]230[\x03]159[\x02]10[\x07]in-addr[\x04]arpa)
1 ;;; DNS queries for .lan or DNS PTR queries for 10.0.0.0/8
dns:lan ([\x03]lan)|([\x02]10[\x07]in-addr[\x04]arpa)
[admin@router] > /ip firewall nat print # выдержка
5 ;;; Conditional DNS forwarding
chain=dstnat action=jump jump-target=dstnat-dns protocol=udp dst-address=10.159.230.1 dst-port=53 log=no
6 ;;; Conditional DNS forwarding: *.9-20.lan -> ignore
chain=dstnat-dns action=return layer7-protocol=dns:9-20.lan log=no
7 ;;; Conditional DNS forwarding: *.lan -> server
chain=dstnat-dns action=dst-nat to-addresses=10.159.230.2 to-ports=5353 layer7-protocol=dns:lan protocol=udp log=no
DHCP lease-скрипт на 10.159.230.1: http://ix.io/1Ts9
Здесь опущены SNAT-правила (потому что они у меня сложные). Запросы к 9-20.lan (это как раз 10.159.230.0/24) принимаются и отвечаются встроенным ресолвером, остальные запросы к lan перенаправляются на 10.159.230.2:5353. Синхронизация DHCP и DNS выполняется lease-скриптом, добавление DNS-записей для OpenVPN клиентов выполняется client-connect скриптом в сервере OpenVPN.