GCP虚拟机多网卡配置求助:实现VPN回传流量走NIC0、公网出口流量走NIC1
GCP虚拟机多网卡配置求助:实现VPN回传流量走NIC0、公网出口流量走NIC1
Hi Antony, 看起来你遇到的是GCP多网卡环境下的路由优先级与流量分离问题,我来帮你梳理下可行的解决方案,结合你的环境配置一步步实现:
核心问题分析
你当前的困境是:修改默认路由到NIC1后,丢失了到on-prem回传网络(192.168.100.0/22)的访问能力。这是因为GCP的VPC路由是基于优先级生效的,同时VM的辅助网卡(NIC1)默认不会自动继承其他VPC的路由规则,你之前手动添加路由时也没指定正确的下一跳网关。
解决方案一:利用GCP VPC路由优先级调整(推荐,无需修改VM本地配置)
这个方法通过VPC层面的路由规则配置,让公网默认路由优先走NIC1,回传网络的路由保留走NIC0的VPN,完全在控制台操作即可:
- 恢复prod-vpc1的默认路由:先把你之前删除的prod-vpc1自动创建的默认路由(
0.0.0.0/0指向10.202.10.1)恢复回来,这条路由是VPN回传流量正常的基础。 - 在public-traffic-vpc-1中添加高优先级默认路由:
- 进入GCP控制台的VPC路由页面,选择
public-traffic-vpc-1 - 创建一条自定义路由:
- 目标地址:
0.0.0.0/0 - 下一跳:
public-traffic-vpc-1的网关10.10.12.1 - 优先级设置为900(比prod-vpc1默认路由的1000优先级更高,会优先匹配)
- 目标地址:
- 进入GCP控制台的VPC路由页面,选择
- 验证路由规则:等待路由下发到VM后,登录VM1执行
ip route show查看路由表,你应该能看到:- 一条优先级900的默认路由
0.0.0.0/0 via 10.10.12.1 dev ens4(NIC1对应的网卡名可能不同,以实际为准) - 一条优先级170的路由
192.168.100.0/22 via 10.202.10.1 dev ens3(指向VPN网关,走NIC0)
这样公网流量会优先走高优先级的默认路由(NIC1),回传网络的流量会匹配BGP下发的路由(NIC0),完美实现你的需求。
- 一条优先级900的默认路由
解决方案二:在VM本地配置策略路由(适合需要细粒度控制的场景)
如果VPC层面的路由调整无法满足特殊需求,可以在VM1上手动配置策略路由,强制不同流量走不同网卡:
- 保留prod-vpc1的默认路由和BGP路由:不要删除任何VPC层面的路由,确保到
192.168.100.0/22的路由存在。 - 添加NIC1的默认路由并设置策略规则:
- 先创建一个新的路由表,用于管理NIC1的流量:
echo "100 pubnet" >> /etc/iproute2/rt_tables - 给这个路由表添加默认路由和本地子网路由:
ip route add default via 10.10.12.1 dev ens4 table pubnet ip route add 10.10.12.0/24 dev ens4 table pubnet - 添加策略路由规则,让公网流量走这个自定义表:
# 源IP为NIC1地址的流量,走pubnet表 ip rule add from 10.10.12.2 table pubnet # 公网目标流量优先走pubnet表(可选,进一步强化规则) ip rule add to 0.0.0.0/0 table pubnet priority 100 - 保存配置确保重启生效:CentOS/Rocky可以把路由和规则分别写入
/etc/sysconfig/network-scripts/route-ens4和/etc/sysconfig/network-scripts/rule-ens4
- 先创建一个新的路由表,用于管理NIC1的流量:
- 验证:执行
ip rule show查看策略规则,ip route show table pubnet查看自定义路由表,测试ping192.168.100.50(应该走NIC0),同时访问公网地址(比如curl ifconfig.me)确认出口IP是NIC1对应的公网IP。
为什么你之前手动添加路由报错?
你之前尝试添加192.168.100.0/22的路由时提示“Network is unreachable”,是因为没指定正确的下一跳网关。正确的写法应该是:
ip route add 192.168.100.0/22 via 10.202.10.1 dev ens3
这里的10.202.10.1是prod-vpc1的网关(VPN入口),只有指定了下一跳,路由才知道该把流量发往哪里。不过这个方法不如VPC路由优先级调整优雅,需要手动维护VM本地路由。
备注:内容来源于stack exchange,提问作者Antony Nguyen
相关产品推荐
相关产品推荐

