是这样的,为了解决外部访问跨运营商限速的问题,我给我的nas接入了三网,移动联通电信。
目的是,外部访问情况下,让移动的用户走移动,联通的走联通,电信的走电信。流量从进到出,都是哪个运营商就对应那个线路。
因为移动不给公网ipv4地址,所以我把移动放弃了。 (实测移动访问速度还很快,不要也行)。设置好了ddns。三个一样的A解析的域名,指向了三个线路,分别是移动,联通,电信。通过ddns获取ip地址来同步。(我把移动的在ddns这里也让获取了电信的公网地址)这一步没有任何问题。通过ping'可以看到电信用户访问的时候,返回的是电信的公网ip。
这一步做了以后,发现还是不行的,两个网口会打架,也就是优先级的问题,于是我设置了优先级。
设置好以后,发现外部访问的时候可以走对应线路了,但是外部在飞牛app中的时候,还是不能走对应线路,(系统中飞牛app处于内部),于是把内部也规定了按运营商线路。所以我的路由表规则就如下:
1. 清理旧配置(避免冲突)
sudo ip route flush default
sudo ip rule flush table 10 2>/dev/null
sudo ip rule flush table 20 2>/dev/null
2. 基础路由表(电信表10,联通表20,用你固定的内网网关/网口)
电信路由表:网口enp2s0 + 网关192.168.1.1
sudo ip route add 192.168.1.0/24 dev enp2s0 table 10
sudo ip route add default via 192.168.1.1 dev enp2s0 table 10
联通路由表:网口enx00e02b4614e3 + 网关192.168.31.1
sudo ip route add 192.168.31.0/24 dev enx00e02b4614e3 table 20
sudo ip route add default via 192.168.31.1 dev enx00e02b4614e3 table 20
3. 外部设备分流(原需求不变:电信用户走电信,联通用户走联通)
sudo ip rule add from 192.168.1.0/24 lookup 10 priority 100 # 电信内网用户
sudo ip rule add from 192.168.31.0/24 lookup 20 priority 200 # 联通内网用户
4. 内部程序分流(核心简化:按“出口网口”匹配,不用公网IP)
内部程序走电信网口(enp2s0)的流量 → 用电信表10
sudo ip rule add oif enp2s0 lookup 10 priority 50
内部程序走联通网口(enx00e02b4614e3)的流量 → 用联通表20
sudo ip rule add oif enx00e02b4614e3 lookup 20 priority 60
5. 给内部程序加“双出口选择”(飞牛App自动适配)
新增两条“带网口绑定”的默认路由,内部程序可按需选择
sudo ip route add default via 192.168.1.1 dev enp2s0 metric 10 # 电信出口
sudo ip route add default via 192.168.31.1 dev enx00e02b4614e3 metric 20 # 联通出口
验证:
用电信网口访问外网(模拟飞牛App走电信线路)
sudo curl -4 --interface enp2s0 http://ifconfig.co # 应该返回电信公网IP
用联通网口访问外网(模拟飞牛App走联通线路)
sudo curl -4 --interface enx00e02b4614e3 http://ifconfig.co # 应该返回联通公网IP
5. 验证(查看默认路由和规则)
echo "默认路由(内部程序用):"
ip route show | grep default | head -2
echo "分流规则(外部设备用):"
ip rule show | grep -E "100|200"
就这样非常的nice,我成功了。但是没高兴几天,他又不行了,不是电信线路路由规则没了,就是联通的规则没了。 飞牛能不能根据我这种情况,把路由表的设置搞一个自定义呢?