LINUX.ORG.RU

История изменений

Исправление 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.