V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
guiys
V2EX  ›  宽带症候群

RouterOS,双网段,双 ISP 下, DNS 的问题。

  •  
  •   guiys · 127 天前 · 1706 次点击
    这是一个创建于 127 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现状:移动联通宽带各一条,均通过 ros 进行 pppoe 拨号。有两个 LAN 口分别设置为 192.168.1.x 和 192.168.2.x 。其中 1 网段走移动,2 网段走联通。参考此篇教程进行配置,主要设置:

    [admin@MikroTik] /routing/table> print 
    Flags: D - dynamic; X - disabled, I - invalid; U - used 
     0 D   name="main" fib 
     1     name="CMCC" fib 
    
    [admin@MikroTik] /routing/rule> print 
    Flags: X - disabled, I - inactive 
     0   src-address=192.168.1.0/24 action=lookup table=CMCC 
    
    [admin@MikroTik] /ip/route> print detail 
    Flags: D - dynamic; X - disabled, I - inactive, A - active; 
    c - connect, s - static, r - rip, b - bgp, o - ospf, i - is-is, d - dhcp, v - vpn, m - modem,>
    H - hw-offloaded; + - ecmp 
     0  As   dst-address=0.0.0.0/0 routing-table=main gateway=pppoe-out2 immediate-gw=pppoe-out2
             distance=1 scope=30 target-scope=10 suppress-hw-offload=no 
    
     1  As   dst-address=0.0.0.0/0 routing-table=CMCC gateway=pppoe-out1 immediate-gw=pppoe-out1 
             distance=1 scope=30 target-scope=10 suppress-hw-offload=no 
    
    
    [admin@MikroTik] /ip/dns> print 
                          servers: 
                  dynamic-servers: 
                   use-doh-server: https://223.5.5.5/dns-query
                  verify-doh-cert: no
       doh-max-server-connections: 50
       doh-max-concurrent-queries: 500
                      doh-timeout: 5s
            allow-remote-requests: yes
              max-udp-packet-size: 4096
             query-server-timeout: 2s
              query-total-timeout: 10s
           max-concurrent-queries: 100
      max-concurrent-tcp-sessions: 20
                       cache-size: 2048KiB
                    cache-max-ttl: 1w
          address-list-extra-time: 0s
                              vrf: main
                       cache-used: 153KiB
    

    两个网口上的 DHCP 为客户端分配的网关是 192.168.1.1 和 192.168.2.1 ,DNS 同样。目前无论是接入 1 网段还是 2 网段,都可以正常上网,且访问互联网可以走移动联通各自线路。但是访问网易 DNS 检测,总会有一个网段 IP 和 DNS 不一致。我猜 ros 收到客户端请求后,只通过移动联通之一去请求了 doh ,所以会出现移动网段的客户端请求到联通的 ip 地址。
    现在临时的解决办法是给其中一个网段指派同网段 openwrt 为 DNS ,然后在 openwrt 里设置一个公共 DNS 。这样网易 DNS 检测才会正常。
    请问各位如果只通过 ros 设置能解决这类 DNS 问题吗?

    7 条回复    2024-08-24 10:58:07 +08:00
    povsister
        1
    povsister  
       127 天前
    策略路由写的没有问题,但你两个 pppoe 都勾 use peer dns 的话我估计 ros 的 dns 要打架(这也是你碰到的问题)

    所以核心是把 DNS 流量分流。
    firewall nat 一下,把来自于 192.168.1.0/24 的 DNS 请求,全部 DNAT 到 CMCC 的运营商 DNS ,记得路由表也配合下。
    做免维护的话得写个脚本,每次 CMCC 拨号完自动把 PPPoE 下发的 DNS 更新到上面那个 DNAT 规则里。
    Soo0
        2
    Soo0  
       127 天前
    通过 DHCP 下发对应运营商的 DNS 或者公共 DNS 给终端 ,需要缓存或者记录就弄 2 个。有的运营商 DNS 不回应非自己网络请求。现在域名基本都套了 CDN ,可以避免终端收到异网的 CDN 节点 IP 反而变慢 不能连接 需要跨网 这些问题。
    onion83
        3
    onion83  
       126 天前
    先说结论:ROS 自带 DNS 不能解决这个问题

    原因分析:当 pppoe 拨号或者通过 ipv6 dhclient ,勾选 use peer dns 会将 v4/v6 的服务全部压入 Dynamic Servers 中,根据从上到下的原则往上游发出查询,例如:移动在第一个,那么 ROS DNS Server 永远都只会返回移动的 A 或者 AAAA 记录,联通的线路很大概率用不到(只有 fallback 的时候),线路利用率低。这里还有一个问题,就是 223.5.5.5 默认走的线路是什么?当 223.5.5.5 走的是移动线路,查询出的节点都是移动的,将移动的解析结果返回给 2.x 走联通线路的机器,明显是不科学的。

    解决方案:使用中立的在内网部署中立的第三方 DNS ,例如 smartdns (推荐) 、mosdns 等,通过同时配置多组运营商上游,合并记录并测速后返回多个运营商 A / AAAA 记录,做到流量负债均衡(取决于客户端实现)

    以 smartdns 的配置作为示范:
    ```
    bind :53
    ...
    server <移动 DNS 1> - group isp -group cmc
    server <移动 DNS 2> - group isp -group cmc

    server <联通 DNS1> -group isp -group cuc
    server <联通 DNS1> -group isp -group cuc

    server 119.29.29.29 -group publicdns

    server 8.8.8.8 -group free -exclude-default-group
    ....

    max-reply-ip-num 8
    speed-check-mode tcp:443,ping
    ....
    ```
    因为您已经根据 IP 做了策略路由,所以 <移动 DNS> 返回的必然是移动的节点, <联通 DNS> 返回的必然是联通的节点(取决于网站 CDN 是否布点),对于“不拆分网段的机器”一下就能利用到移动和联通的全部记录,高效利用带宽资源。

    根据你的需求,似乎根据根据网口/网段做了策略路由,不同网段走不同出口,这台 smartdns 完全能复用。

    1 、为 smartdns 配置两个 IP 让两个网段都能访问到 类如 eth1:192.168.1.253/24 eth2: 192.168.2.253/24
    2 、利用 smartdns 的 client-rule 特性做分流: https://pymumu.github.io/smartdns/config/client-rule

    ```
    acl-enable yes
    ...
    # 启用规则组
    group-begin cmc
    client-rules 192.168.1.0/24
    server <移动 DNS 1> -e
    server <移动 DNS 2> -e
    domain-set -name gfwlist -type list -file /etc/smartdns/domain-set/gfw.list
    domain-rules /domain-set:gfwlist/ -nameserver free -speed-check-mode none -address #6
    group-end

    group-begin cuc
    client-rules 192.168.2.0/24
    server <联通 DNS 1> -e
    server <联通 DNS 2> -e
    domain-set -name gfwlist -type list -file /etc/smartdns/domain-set/gfw.list
    domain-rules /domain-set:gfwlist/ -nameserver free -speed-check-mode none -address #6
    group-end
    ```
    3 、根据不同网段配置 dhcp-server 下发 smartdns 的 IP (1.253 / 2.253) 即可,这样既可以使用独立的 dns ,也能复用 gfwlist 、adlist 等分流、屏蔽设施。
    guiys
        4
    guiys  
    OP
       126 天前 via iPhone
    @povsister use peer dns 已经取消了,现在只配了一个阿里的 doh 。我在各自网段的客户端上分别 trace223.5.5.5 ,结果都可以走各自线路。可貌似只有路由器自己去请求 doh 的时候,没有遵循策略路由的配置,不知道是配置问题还是 BUG 。你说的 dnat 方法有作用,不过还是想利用上路由器自带的 doh 功能。
    多谢~
    guiys
        5
    guiys  
    OP
       126 天前 via iPhone
    @Soo0 用 dhcp 下发也是可以的,但内网有梯子,还是需要下发内网的服务器。还是想利用上路由器上的 doh~
    guiys
        6
    guiys  
    OP
       126 天前 via iPhone
    @onion83 恩,看来是 ros 的问题,请求 dns 的方式并不遵循策略路由,而是线路顺序
    povsister
        7
    povsister  
       126 天前
    @guiys 说句实话国内域名用 DoH 是吃力不讨好。
    海外用 DoH 的话纯 ros 又搞不定。
    #3 说的没错,如果你想最优解决这个问题。自建一个 dns 做分流吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2753 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:33 · PVG 22:33 · LAX 06:33 · JFK 09:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.