先说结论: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 等分流、屏蔽设施。