You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,完全在控制台操作即可:

  1. 恢复prod-vpc1的默认路由:先把你之前删除的prod-vpc1自动创建的默认路由(0.0.0.0/0指向10.202.10.1)恢复回来,这条路由是VPN回传流量正常的基础。
  2. 在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优先级更高,会优先匹配)
  3. 验证路由规则:等待路由下发到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),完美实现你的需求。

解决方案二:在VM本地配置策略路由(适合需要细粒度控制的场景)

如果VPC层面的路由调整无法满足特殊需求,可以在VM1上手动配置策略路由,强制不同流量走不同网卡:

  1. 保留prod-vpc1的默认路由和BGP路由:不要删除任何VPC层面的路由,确保到192.168.100.0/22的路由存在。
  2. 添加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
  3. 验证:执行ip rule show查看策略规则,ip route show table pubnet查看自定义路由表,测试ping 192.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:18:02