RouterOS 如何切换 DNS 服务器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lnc1995
V2EX    路由器

RouterOS 如何切换 DNS 服务器

  •  
  •   lnc1995 2024-05-04 15:10:43 +08:00 3031 次点击
    这是一个创建于 595 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    36 条回复    2024-05-07 16:18:12 +08:00
    Yien
        1
    Yien  
       2024-05-04 15:42:00 +08:00
    dhcp dns 设置配置一个备用的 dns 不可以吗?
    lnc1995
        2
    lnc1995  
    OP
       2024-05-04 15:52:43 +08:00
    @Yien 这样的话会导致 DNS 泄漏 所以没办法
    supemaomao
        3
    supemaomao  
       2024-05-04 16:30:37 +08:00 via Android
    DHcp 里面不是可以设置多个 DNS 服务器吗?如果必须只设置一个且满足切换,就做两个 DNS 服务器,使用 vrrp 虚拟一个 IP 地址,做主备切换。
    Kite6
        4
    Kite6  
       2024-05-04 16:31:03 +08:00 via Android
    ros 可以写个脚本,判断一下 adg 是否存活,不存活的话改掉 dns 就行
    Yien
        5
    Yien  
       2024-05-04 16:34:32 +08:00 via Android
    @Kite6 这样看起来也可以,不知道客户机会不会即时生效。
    herozzm
        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
    ```
    hefish
        7
    hefish  
       2024-05-04 17:48:03 +08:00
    用带 chatgpt 的 routeros 即可。。。
    lnc1995
        8
    lnc1995  
    OP
       2024-05-04 19:07:41 +08:00
    @Kite6 这是不行的 ROS 下的客户端这时候获取的还是 ADG 的地址
    lnc1995
        9
    lnc1995  
    OP
       2024-05-04 19:07:55 +08:00
    @herozzm 这是不行的 ROS 下的客户端这时候获取的还是 ADG 的地址
    lnc1995
        10
    lnc1995  
    OP
       2024-05-04 19:12:01 +08:00
    @supemaomao 感觉这个好像有点可行性 关键是这个 VRRP 可以把 223.5.5.5 这种虚拟吗?我也没接触过 VRRP ,我想要的还是用公共 DNS 做后备切换,自建的一个就够用了。不知道你说的 VRRP 可不可以做到这点
    supemaomao
        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 服务器。
    herozzm
        12
    herozzm  
       2024-05-04 19:46:38 +08:00
    @lnc1995 将 DHCP 下发的 dns 设置成 ros 的 ip 即可
    lnc1995
        13
    lnc1995  
    OP
       2024-05-04 19:47:03 +08:00
    @supemaomao 感觉符合我的需求,我来研究研究。不下发两个主要是 DNS 泄漏问题
    lnc1995
        14
    lnc1995  
    OP
       2024-05-04 19:47:35 +08:00
    @herozzm 就是不想设置成 ROS 地址来着 这样 ADG 没法统计客户端
    herozzm
        15
    herozzm  
       2024-05-04 19:49:46 +08:00
    同理啊,你在 up 和 down 里面设置脚本修改 dhcp 设置即可
    Yien
        16
    Yien  
       2024-05-04 20:26:34 +08:00
    脚本配合
    ```
    /ip dhcp-server lease remove [find]
    ```
    试试
    filtrate
        17
    filtrate  
       2024-05-04 21:14:35 +08:00
    nat 转发 ros:53 到 adg 可以正常统计
    filtrate
        18
    filtrate  
       2024-05-04 21:17:18 +08:00
    VRRP 什么的都可以试试,你这么简单的网络,方法简直太多了
    neroxps
        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 。
    neroxps
        20
    neroxps  
       2024-05-05 18:44:19 +08:00 via iPhone
    具体实现的脚本如下,可以参考我的脚本。

    https://github.com/neroxps/RouterOS-Script/blob/master/Clash_dns_check.rsc
    lnc1995
        21
    lnc1995  
    OP
       2024-05-05 19:16:46 +08:00
    @neroxps 我的难点并不在检测 而是怎么切换 DHCP 中不设置为 ROS 的话 切换不了
    lnc1995
        22
    lnc1995  
    OP
       2024-05-05 19:17:12 +08:00
    @jinqzzz 并不行 统计的都是 ROS 的地址
    filtrate
        23
    filtrate  
       2024-05-05 19:33:12 +08:00
    @lnc1995 既然说出来了,我肯定是自己试过可以的。翻了一下你的回复几乎都是复读,我也懒得贴我的配置了
    neroxps
        24
    neroxps  
       2024-05-06 09:01:30 +08:00
    @lnc1995 [1] 步骤就解决了啊,挟持局域网所有的 DNS 到 ros 啊,然后 ros 上游给 ag
    keyfunc
        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\"]"
    keyfunc
        26
    keyfunc  
       2024-05-06 11:27:08 +08:00
    另外可以通过这个访问拦截一些常用的 dns 地址 8.8.8.8 之类的,可以防止 dns 泄漏和一些软件不使用系统 dns 之类的。
    keyfunc
        27
    keyfunc  
       2024-05-06 11:30:18 +08:00
    @jinqzzz 咋实现的,是在 dns 那台机器上写路由规则吗?
    everfly
        28
    everfly  
       2024-05-06 12:01:43 +08:00 via iPhone
    @keyfunc 你这后面两条规则有点奇怪,自己发起 dns 请求自己?那样肯定会导致统计规则失效的。为啥不把 dns 服务器 ip 放在另一个网段呢?这样就不需要那两条规则了。另外 ros 支持容器的,也可以建个 agh 的容器作为 dns 服务器用。
    keyfunc
        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 一次。
    lnc1995
        30
    lnc1995  
    OP
       2024-05-06 20:16:42 +08:00
    @jinqzzz 我说的统计是不同客户端,你都把 ROS Nat 了,ADG 还能区分不同客户端?
    filtrate
        31
    filtrate  
       2024-05-06 20:52:58 +08:00 via iPhone
    @lnc1995 当然可以
    filtrate
        32
    filtrate  
       2024-05-06 23:17:39 +08:00
    @keyfunc 我也遇到过同样的问题必须 masquerade ,后来在 mikrotik 论坛上找到过解决方案但是没有保存,现在改成了 VRRP ,就不再用 netwatch 和 nat 了(你拦截 8888 可能还需要保留)
    lnc1995
        33
    lnc1995  
    OP
       2024-05-07 00:18:13 +08:00
    @jinqzzz 确实可以 搞定了这种方案
    chiikawa
        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
    lnc1995
        35
    lnc1995  
    OP
       2024-05-07 13:48:36 +08:00 via Android
    @lwq84510 诶,卧槽,好像是啊,平时 ROS 上游也用 ADG ,挂了切一下上游…以前好像想复杂了啊…
    chiikawa
        36
    chiikawa  
       2024-05-07 16:18:12 +08:00
    @lnc1995 #35 而且 adg 这个统计也只能是参考意义,设备不一定是按 dns1 不通 fallback dns2 ,可能是并发查询,这样 adg 还是会记录到很多来源是 ros 的查询
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2758 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 07:31 PVG 15:31 LAX 23:31 JFK 02:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86