现状:移动联通宽带各一条,均通过 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 问题吗?
1
povsister 117 天前
策略路由写的没有问题,但你两个 pppoe 都勾 use peer dns 的话我估计 ros 的 dns 要打架(这也是你碰到的问题)
所以核心是把 DNS 流量分流。 firewall nat 一下,把来自于 192.168.1.0/24 的 DNS 请求,全部 DNAT 到 CMCC 的运营商 DNS ,记得路由表也配合下。 做免维护的话得写个脚本,每次 CMCC 拨号完自动把 PPPoE 下发的 DNS 更新到上面那个 DNAT 规则里。 |
2
Soo0 117 天前
通过 DHCP 下发对应运营商的 DNS 或者公共 DNS 给终端 ,需要缓存或者记录就弄 2 个。有的运营商 DNS 不回应非自己网络请求。现在域名基本都套了 CDN ,可以避免终端收到异网的 CDN 节点 IP 反而变慢 不能连接 需要跨网 这些问题。
|
3
onion83 117 天前
先说结论: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 等分流、屏蔽设施。 |