双WAN接口(分属不同ISP)的私有网络冲突问题及最佳实践咨询
这确实是多WAN场景里挺头疼的一个问题,尤其是ISP都爱用10.x、192.168.x这类常见私有段的情况下,撞网段的概率还真不低。我整理了几个实际运维和配置里常用的解决思路,你可以根据自己的主机环境选合适的方案:
配置SNAT地址转换隔离内部路由
给每个WAN接口单独分配一个内部虚拟中转网段,把对应接口的流量通过SNAT转换成这个中转网段的地址。这样哪怕两个ISP的私有网段冲突,主机内部看到的是两个完全独立的网段,路由表就不会混乱了。
举个实际配置的例子(假设LTE接口是eth0,WiFi接口是wlan0):# 给LTE接口添加虚拟中转IP ip addr add 192.168.50.1/24 dev eth0 # 给WiFi接口添加虚拟中转IP ip addr add 192.168.60.1/24 dev wlan0 # 对LTE接口出站流量做SNAT iptables -t nat -A POSTROUTING -o eth0 -s 192.168.50.0/24 -j MASQUERADE # 对WiFi接口出站流量做SNAT iptables -t nat -A POSTROUTING -o wlan0 -s 192.168.60.0/24 -j MASQUERADE这样主机发往不同WAN的流量会被转换成不同的中转IP,路由系统就能正确区分处理了。
用策略路由强制流量分流
别依赖系统默认的全局路由表,给每个WAN接口单独创建专属路由表,然后通过路由规则指定不同流量走对应的表。
大致配置步骤如下:- 先在路由表配置文件里添加自定义表:
echo "100 lte" >> /etc/iproute2/rt_tables echo "200 wifi" >> /etc/iproute2/rt_tables - 给每个路由表添加默认路由(替换
<LTE_GATEWAY>和<WIFI_GATEWAY>为实际网关地址):ip route add default via <LTE_GATEWAY> dev eth0 table lte ip route add default via <WIFI_GATEWAY> dev wlan0 table wifi - 添加规则,让每个接口的本地IP流量走对应路由表:
ip rule add from <LTE_LOCAL_IP> table lte ip rule add from <WIFI_LOCAL_IP> table wifi
这种方式相当于给每个WAN接口开了独立的路由通道,完全避免了默认路由冲突的问题。
- 先在路由表配置文件里添加自定义表:
联系ISP申请调整网段
如果你的场景允许,直接联系两个ISP的技术支持,说明双WAN网段冲突导致的路由问题,请求他们给你的终端分配不同网段的私有IP。不过这个方法比较被动,取决于ISP是否愿意调整DHCP池,有些ISP可能因为配置固定没法改,但值得一试。通过VPN隧道规避冲突
要是上面的方法都不适用,可以考虑在每个WAN接口上建立VPN隧道(比如WireGuard、OpenVPN),让主机通过VPN访问互联网。这样主机实际使用的是VPN分配的IP,和ISP的私有网段完全隔离开,自然就不会有冲突了。不过这个方法需要额外的VPN服务器资源,成本会高一些,适合对网络稳定性要求较高的场景。
备注:内容来源于stack exchange,提问作者Kamil Zaripov

