
DHCP 中设置的是 AdguardHome 的地址,现在通过 Netwatch 想在 Adg 挂了的时候,切换 DNS 。 查到的办法都是 DHCP 中 DNS 设置为 ROS 的地址才可以,有没有什么办法在我这种 DHCP 配置下,切换 DNS 呢?
1 Yien 2024-05-04 15:42:00 +08:00 dhcp dns 设置配置一个备用的 dns 不可以吗? |
3 supemaomao 2024-05-04 16:30:37 +08:00 via Android DHcp 里面不是可以设置多个 DNS 服务器吗?如果必须只设置一个且满足切换,就做两个 DNS 服务器,使用 vrrp 虚拟一个 IP 地址,做主备切换。 |
4 Kite6 2024-05-04 16:31:03 +08:00 via Android ros 可以写个脚本,判断一下 adg 是否存活,不存活的话改掉 dns 就行 |
6 herozzm 2024-05-04 17:38:17 +08:00 在 `tools` - `Netwatch` Up ``` /ip dns cache flush /ip dns set servers=192.168.1.2 ``` Down ``` /ip dns set servers="" /ip dns set servers=192.168.1.100 ``` |
7 hefish 2024-05-04 17:48:03 +08:00 用带 chatgpt 的 routeros 即可。。。 |
10 lnc1995 OP @supemaomao 感觉这个好像有点可行性 关键是这个 VRRP 可以把 223.5.5.5 这种虚拟吗?我也没接触过 VRRP ,我想要的还是用公共 DNS 做后备切换,自建的一个就够用了。不知道你说的 VRRP 可不可以做到这点 |
11 supemaomao 2024-05-04 19:27:52 +08:00 via Android @lnc1995 既然你要用公共做后备,在 DHCP 下发的时候为什么不能下发两个 DNS 服务器,首选你的 adg ,第二个 223 。vrrp 的方案大致适用场景是这样,假如 你现在,DHCP 下发 DNS 服务器是 192.168.1.3 这个默认是 adg ,如果 adg 挂了,网络就挂了。用 vrrp 以后用 1.5 ( vppr 网卡 ip )在 1.3 与 1.1 (假设这是 ros 的 ip )中做一个负载。DHCP 下发设置 1.5 ,正常情况下 adg 不挂,用 1.3 的 adg 解析,如果 adg 挂了 会通过 1.1 的 ROS 做 DNS 服务器。 |
13 lnc1995 OP @supemaomao 感觉符合我的需求,我来研究研究。不下发两个主要是 DNS 泄漏问题 |
15 herozzm 2024-05-04 19:49:46 +08:00 同理啊,你在 up 和 down 里面设置脚本修改 dhcp 设置即可 |
16 Yien 2024-05-04 20:26:34 +08:00 脚本配合 ``` /ip dhcp-server lease remove [find] ``` 试试 |
17 filtrate 2024-05-04 21:14:35 +08:00 nat 转发 ros:53 到 adg 可以正常统计 |
18 filtrate 2024-05-04 21:17:18 +08:00 VRRP 什么的都可以试试,你这么简单的网络,方法简直太多了 |
19 neroxps 2024-05-05 18:42:39 +08:00 via iPhone emmm netwatch 用 ping 确认并不能百分百确认 dns 是否存活,因为 ag 挂了也会导致故障。 建议用脚本向目的 dns 查询,如果查询成功就存活,查询失败三次就切换。 1 做 dnat ,将所有目的地址是 53 的 udp 目的地址改写为 ros 地址,挟持所有 dns 流量。 2 ros 做 dns server 不需要做什么 vrrp 。 |
20 neroxps 2024-05-05 18:44:19 +08:00 via iPhone |
25 keyfunc 2024-05-06 11:21:48 +08:00 我的 DNS 是 86.33 ,然后 nat 到了 86.1 ( ros )上,86.33 上的 19000 是健康检查端口,如果有问题,就会关闭防火墙规则,可以做到无感的自动切换。问题就是加个 masquerade ,导致统计功能没办法用了。虽然可以在 dns 主机上写路由规则来处理,但会造成防火墙的状态追踪出现问题,出现大量的 invalid 包,目前没找到办法处理。 /ip firewall nat add action=dst-nat chain=dstnat comment="DNS Dummy" dst-address=192.168.86.1 dst-port=53 protocol=udp src-address=!192.168.86.33 src-address-type=!local to-addresses=192.168.86.33 \ to-ports=53 add action=dst-nat chain=dstnat comment="DNS Dummy" dst-address=192.168.86.1 dst-port=53 protocol=tcp src-address=!192.168.86.33 src-address-type=!local to-addresses=192.168.86.33 \ to-ports=53 add action=masquerade chain=srcnat comment="DNS Dummy" dst-address=192.168.86.33 dst-port=53 protocol=udp src-address-type=!local to-addresses=192.168.86.33 add action=masquerade chain=srcnat comment="DNS Dummy" dst-address=192.168.86.33 dst-port=53 protocol=tcp src-address-type=!local to-addresses=192.168.86.33 /tool netwatch add disabled=no down-script="/ip firewall nat disable numbers=[/ip firewall nat find comment=\"DNS Dummy\"]" host=192.168.86.33 http-codes="" interval=5s port=19000 test-script="" \ timeout=2s type=tcp-conn up-script="/ip firewall nat enable numbers=[/ip firewall nat find comment=\"DNS Dummy\"]" |
26 keyfunc 2024-05-06 11:27:08 +08:00 另外可以通过这个访问拦截一些常用的 dns 地址 8.8.8.8 之类的,可以防止 dns 泄漏和一些软件不使用系统 dns 之类的。 |
28 everfly 2024-05-06 12:01:43 +08:00 via iPhone @keyfunc 你这后面两条规则有点奇怪,自己发起 dns 请求自己?那样肯定会导致统计规则失效的。为啥不把 dns 服务器 ip 放在另一个网段呢?这样就不需要那两条规则了。另外 ros 支持容器的,也可以建个 agh 的容器作为 dns 服务器用。 |
29 keyfunc 2024-05-06 13:06:20 +08:00 @everfly 可能是 ros 导出有点 bug 导致的,应该是 add action=masquerade chain=srcnat comment="DNS Dummy" dst-address=192.168.86.33 dst-port=53 protocol=udp src-address-type=!local add action=masquerade chain=srcnat comment="DNS Dummy" dst-address=192.168.86.33 dst-port=53 protocol=tcp src-address-type=!local masquerade 设置不了 to-addresses 。 我也不是非常清楚,但如果不设置这个规则的话,包虽然能发到 dns 服务上,但回包无法回到发起的设备,只能再 srcnat 一次。 |
32 filtrate 2024-05-06 23:17:39 +08:00 @keyfunc 我也遇到过同样的问题必须 masquerade ,后来在 mikrotik 论坛上找到过解决方案但是没有保存,现在改成了 VRRP ,就不再用 netwatch 和 nat 了(你拦截 8888 可能还需要保留) |
34 chiikawa 2024-05-07 08:41:36 +08:00 dhcp 下发 dns1 adg, dns2 ros, dns1 adg 挂了会 fallback 到 dns2 ros, ros netwatch adg, 挂了和恢复了用脚本切 ros 的上游 dns |