Я пытаюсь создать скрипт для резервного переключения DNS Pi-hole, но пока безуспешно. В сети у меня есть Pi-hole с IP-адресом 192.168.18.2. В роутере настроены публичные DNS 1.1.1.1 и 1.0.0.1. DHCP-сервер раздаёт клиентам DNS 192.168.18.1 (шлюз роутера). Я добавил следующие правила NAT, чтобы направить весь DNS-трафик через Pi-hole:
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.18.2 protocol=udp src-address=!192.168.18.2 dst-address=!192.168.18.2 dst-port=53 comment="piholeNAT1"
add chain=dstnat action=dst-nat to-addresses=192.168.18.2 protocol=tcp src-address=!192.168.18.2 dst-address=!192.168.18.2 dst-port=53 comment="piholeNAT2"
add chain=srcnat action=masquerade protocol=udp src-address=192.168.18.0/24 dst-address=192.168.18.2 dst-port=53 comment="piholeNAT3"
add chain=srcnat action=masquerade protocol=tcp src-address=192.168.18.0/24 dst-address=192.168.18.2 dst-port=53 comment="piholeNAT4"
Что я хочу сделать при сбое Pi-hole — отключать эти правила NAT. Когда правила NAT отключены, DNS клиентов будет идти через шлюз роутера и публичные DNS 1.1.1.1/1.0.0.1, как обычно, до тех пор, пока Pi-hole снова не заработает (тогда правила NAT включаются и DNS перенаправляется на Pi-hole).
Я написал такой скрипт, который запускается каждые 30 секунд:
:local piholeDNS "192.168.18.2"
:local testDomain "www.google.com"
:if ([/ip firewall nat [find comment="piholeNAT1"] enabled]) do={
:do {
:resolve $testDomain server $piholeDNS
} on-error={
/ip firewall nat disable [find comment="piholeNAT1"]
/ip firewall nat disable [find comment="piholeNAT2"]
/ip firewall nat disable [find comment="piholeNAT3"]
/ip firewall nat disable [find comment="piholeNAT4"]
}
} else={
:do {
:resolve $testDomain server $piholeDNS
/ip firewall nat enable [find comment="piholeNAT1"]
/ip firewall nat enable [find comment="piholeNAT2"]
/ip firewall nat enable [find comment="piholeNAT3"]
/ip firewall nat enable [find comment="piholeNAT4"]
} on-error={}
}
Когда я отключаю Pi-hole для теста, правила NAT не отключаются. Значит, что-то явно не так в скрипте. Кто-нибудь может помочь?
/ip firewall nat
add chain=dstnat action=dst-nat to-addresses=192.168.18.2 protocol=udp src-address=!192.168.18.2 dst-address=!192.168.18.2 dst-port=53 comment="piholeNAT1"
add chain=dstnat action=dst-nat to-addresses=192.168.18.2 protocol=tcp src-address=!192.168.18.2 dst-address=!192.168.18.2 dst-port=53 comment="piholeNAT2"
add chain=srcnat action=masquerade protocol=udp src-address=192.168.18.0/24 dst-address=192.168.18.2 dst-port=53 comment="piholeNAT3"
add chain=srcnat action=masquerade protocol=tcp src-address=192.168.18.0/24 dst-address=192.168.18.2 dst-port=53 comment="piholeNAT4"
Что я хочу сделать при сбое Pi-hole — отключать эти правила NAT. Когда правила NAT отключены, DNS клиентов будет идти через шлюз роутера и публичные DNS 1.1.1.1/1.0.0.1, как обычно, до тех пор, пока Pi-hole снова не заработает (тогда правила NAT включаются и DNS перенаправляется на Pi-hole).
Я написал такой скрипт, который запускается каждые 30 секунд:
:local piholeDNS "192.168.18.2"
:local testDomain "www.google.com"
:if ([/ip firewall nat [find comment="piholeNAT1"] enabled]) do={
:do {
:resolve $testDomain server $piholeDNS
} on-error={
/ip firewall nat disable [find comment="piholeNAT1"]
/ip firewall nat disable [find comment="piholeNAT2"]
/ip firewall nat disable [find comment="piholeNAT3"]
/ip firewall nat disable [find comment="piholeNAT4"]
}
} else={
:do {
:resolve $testDomain server $piholeDNS
/ip firewall nat enable [find comment="piholeNAT1"]
/ip firewall nat enable [find comment="piholeNAT2"]
/ip firewall nat enable [find comment="piholeNAT3"]
/ip firewall nat enable [find comment="piholeNAT4"]
} on-error={}
}
Когда я отключаю Pi-hole для теста, правила NAT не отключаются. Значит, что-то явно не так в скрипте. Кто-нибудь может помочь?
