RouterOS 如何切换 DNS 服务器

199 天前
 lnc1995

DHCP 中设置的是 AdguardHome 的地址,现在通过 Netwatch 想在 Adg 挂了的时候,切换 DNS 。 查到的办法都是 DHCP 中 DNS 设置为 ROS 的地址才可以,有没有什么办法在我这种 DHCP 配置下,切换 DNS 呢?

2017 次点击
所在节点    路由器
36 条回复
lnc1995
198 天前
@neroxps 我的难点并不在检测 而是怎么切换 DHCP 中不设置为 ROS 的话 切换不了
lnc1995
198 天前
@jinqzzz 并不行 统计的都是 ROS 的地址
jinqzzz
198 天前
@lnc1995 既然说出来了,我肯定是自己试过可以的。翻了一下你的回复几乎都是复读,我也懒得贴我的配置了
neroxps
198 天前
@lnc1995 [1] 步骤就解决了啊,挟持局域网所有的 DNS 到 ros 啊,然后 ros 上游给 ag
keyfunc
198 天前
我的 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\"]"
keyfunc
198 天前
另外可以通过这个访问拦截一些常用的 dns 地址 8.8.8.8 之类的,可以防止 dns 泄漏和一些软件不使用系统 dns 之类的。
keyfunc
198 天前
@jinqzzz 咋实现的,是在 dns 那台机器上写路由规则吗?
everfly
197 天前
@keyfunc 你这后面两条规则有点奇怪,自己发起 dns 请求自己?那样肯定会导致统计规则失效的。为啥不把 dns 服务器 ip 放在另一个网段呢?这样就不需要那两条规则了。另外 ros 支持容器的,也可以建个 agh 的容器作为 dns 服务器用。
keyfunc
197 天前
@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 一次。
lnc1995
197 天前
@jinqzzz 我说的统计是不同客户端,你都把 ROS Nat 了,ADG 还能区分不同客户端?
jinqzzz
197 天前
@lnc1995 当然可以
jinqzzz
197 天前
@keyfunc 我也遇到过同样的问题必须 masquerade ,后来在 mikrotik 论坛上找到过解决方案但是没有保存,现在改成了 VRRP ,就不再用 netwatch 和 nat 了(你拦截 8888 可能还需要保留)
lnc1995
197 天前
@jinqzzz 确实可以 搞定了这种方案
lwq84510
197 天前
dhcp 下发 dns1 adg, dns2 ros, dns1 adg 挂了会 fallback 到 dns2 ros, ros netwatch adg, 挂了和恢复了用脚本切 ros 的上游 dns
lnc1995
196 天前
@lwq84510 诶,卧槽,好像是啊,平时 ROS 上游也用 ADG ,挂了切一下上游…以前好像想复杂了啊…
lwq84510
196 天前
@lnc1995 #35 而且 adg 这个统计也只能是参考意义,设备不一定是按 dns1 不通 fallback dns2 ,可能是并发查询,这样 adg 还是会记录到很多来源是 ros 的查询

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1037660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX