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

79 天前
 guiys

现状:移动联通宽带各一条,均通过 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 问题吗?

1595 次点击
所在节点    宽带症候群
7 条回复
povsister
79 天前
策略路由写的没有问题,但你两个 pppoe 都勾 use peer dns 的话我估计 ros 的 dns 要打架(这也是你碰到的问题)

所以核心是把 DNS 流量分流。
firewall nat 一下,把来自于 192.168.1.0/24 的 DNS 请求,全部 DNAT 到 CMCC 的运营商 DNS ,记得路由表也配合下。
做免维护的话得写个脚本,每次 CMCC 拨号完自动把 PPPoE 下发的 DNS 更新到上面那个 DNAT 规则里。
Soo0
79 天前
通过 DHCP 下发对应运营商的 DNS 或者公共 DNS 给终端 ,需要缓存或者记录就弄 2 个。有的运营商 DNS 不回应非自己网络请求。现在域名基本都套了 CDN ,可以避免终端收到异网的 CDN 节点 IP 反而变慢 不能连接 需要跨网 这些问题。
onion83
79 天前
先说结论: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
78 天前
@povsister use peer dns 已经取消了,现在只配了一个阿里的 doh 。我在各自网段的客户端上分别 trace223.5.5.5 ,结果都可以走各自线路。可貌似只有路由器自己去请求 doh 的时候,没有遵循策略路由的配置,不知道是配置问题还是 BUG 。你说的 dnat 方法有作用,不过还是想利用上路由器自带的 doh 功能。
多谢~
guiys
78 天前
@Soo0 用 dhcp 下发也是可以的,但内网有梯子,还是需要下发内网的服务器。还是想利用上路由器上的 doh~
guiys
78 天前
@onion83 恩,看来是 ros 的问题,请求 dns 的方式并不遵循策略路由,而是线路顺序
povsister
78 天前
@guiys 说句实话国内域名用 DoH 是吃力不讨好。
海外用 DoH 的话纯 ros 又搞不定。
#3 说的没错,如果你想最优解决这个问题。自建一个 dns 做分流吧

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

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

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

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

© 2021 V2EX