DHCP 中设置的是 AdguardHome 的地址,现在通过 Netwatch 想在 Adg 挂了的时候,切换 DNS 。 查到的办法都是 DHCP 中 DNS 设置为 ROS 的地址才可以,有没有什么办法在我这种 DHCP 配置下,切换 DNS 呢?
1
Yien 232 天前
dhcp dns 设置配置一个备用的 dns 不可以吗?
|
3
supemaomao 232 天前 via Android
DHcp 里面不是可以设置多个 DNS 服务器吗?如果必须只设置一个且满足切换,就做两个 DNS 服务器,使用 vrrp 虚拟一个 IP 地址,做主备切换。
|
4
Kite6 232 天前 via Android
ros 可以写个脚本,判断一下 adg 是否存活,不存活的话改掉 dns 就行
|
6
herozzm 232 天前
在 `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 232 天前
用带 chatgpt 的 routeros 即可。。。
|
10
lnc1995 OP @supemaomao 感觉这个好像有点可行性 关键是这个 VRRP 可以把 223.5.5.5 这种虚拟吗?我也没接触过 VRRP ,我想要的还是用公共 DNS 做后备切换,自建的一个就够用了。不知道你说的 VRRP 可不可以做到这点
|
11
supemaomao 232 天前 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 232 天前
同理啊,你在 up 和 down 里面设置脚本修改 dhcp 设置即可
|
16
Yien 232 天前
脚本配合
``` /ip dhcp-server lease remove [find] ``` 试试 |
17
jinqzzz 232 天前
nat 转发 ros:53 到 adg 可以正常统计
|
18
jinqzzz 232 天前
VRRP 什么的都可以试试,你这么简单的网络,方法简直太多了
|
19
neroxps 231 天前 via iPhone
emmm netwatch 用 ping 确认并不能百分百确认 dns 是否存活,因为 ag 挂了也会导致故障。
建议用脚本向目的 dns 查询,如果查询成功就存活,查询失败三次就切换。 1 做 dnat ,将所有目的地址是 53 的 udp 目的地址改写为 ros 地址,挟持所有 dns 流量。 2 ros 做 dns server 不需要做什么 vrrp 。 |
20
neroxps 231 天前 via iPhone
|
25
keyfunc 230 天前
我的 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 230 天前
另外可以通过这个访问拦截一些常用的 dns 地址 8.8.8.8 之类的,可以防止 dns 泄漏和一些软件不使用系统 dns 之类的。
|
28
everfly 230 天前 via iPhone
@keyfunc 你这后面两条规则有点奇怪,自己发起 dns 请求自己?那样肯定会导致统计规则失效的。为啥不把 dns 服务器 ip 放在另一个网段呢?这样就不需要那两条规则了。另外 ros 支持容器的,也可以建个 agh 的容器作为 dns 服务器用。
|
29
keyfunc 230 天前
@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
jinqzzz 230 天前
@keyfunc 我也遇到过同样的问题必须 masquerade ,后来在 mikrotik 论坛上找到过解决方案但是没有保存,现在改成了 VRRP ,就不再用 netwatch 和 nat 了(你拦截 8888 可能还需要保留)
|
34
lwq84510 229 天前
dhcp 下发 dns1 adg, dns2 ros, dns1 adg 挂了会 fallback 到 dns2 ros, ros netwatch adg, 挂了和恢复了用脚本切 ros 的上游 dns
|