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

GCE Ubuntu 16.04多网卡实例路由持久化配置问题咨询

解决Ubuntu 16.04多网卡路由持久化问题

我完全懂你的困扰——手动配好第二块网卡的路由,重启就失效,还被cloud-init的配置绕得晕头转向。别慌,咱们一步步拆解解决:

第一步:先明确网卡的定义位置

首先,先搞清楚你的第二块网卡(比如ens4)到底被哪个文件管理。运行这条命令查看cloud-init生成的网卡配置:

cat /etc/network/interfaces.d/50-cloud-init.cfg

你大概率会看到类似这样的内容(以ens4为例):

auto ens4
iface ens4 inet dhcp
# 静态IP的话会是这样:
# address 192.168.1.10
# netmask 255.255.255.0
# gateway 192.168.1.1

如果这里有ens4的定义,说明cloud-init在管理这块网卡。但千万别直接修改50-cloud-init.cfg——cloud-init每次启动都会重新生成这个文件,你的修改会被直接覆盖。

方法一:自定义配置文件添加路由(推荐)

我们可以在/etc/network/interfaces.d/目录下新建一个优先级更高的配置文件(文件名数字比50大,比如60-custom-routes.cfg),系统会优先加载它,而且不会被cloud-init覆盖。

  1. 创建并编辑这个文件:
sudo nano /etc/network/interfaces.d/60-custom-routes.cfg
  1. 根据你的网卡IP类型(静态/DHCP)添加路由配置:

    • 静态IP场景:
      auto ens4
      iface ens4 inet static
          address 192.168.2.20
          netmask 255.255.255.0
          gateway 192.168.2.1
          # 添加自定义路由:把10.0.0.0/8网段的流量走ens4
          up route add -net 10.0.0.0/8 gw 192.168.2.1 dev ens4
          # 重启时删除旧路由,避免冲突
          down route del -net 10.0.0.0/8 gw 192.168.2.1 dev ens4
      
    • DHCP场景:
      auto ens4
      iface ens4 inet dhcp
          # DHCP获取IP后自动添加路由
          post-up route add -net 10.0.0.0/8 gw $(ip route show dev ens4 | grep default | awk '{print $3}') dev ens4
          post-down route del -net 10.0.0.0/8 gw $(ip route show dev ens4 | grep default | awk '{print $3}') dev ens4
      

    记得把上面的网段、网关换成你实际需要的参数。

  2. 保存文件后,重启网络服务生效:

sudo systemctl restart networking

现在重启系统,路由应该就能稳定保留了。

方法二:修改cloud-init配置,让它自动生成路由

如果你不想绕开cloud-init,也可以直接修改它的配置模板,让它每次生成50-cloud-init.cfg时自动包含路由规则:

  1. 编辑cloud-init的自定义网络配置文件(不存在就创建):
sudo nano /etc/cloud/cloud.cfg.d/99-custom-network.cfg
  1. 添加类似下面的YAML配置(根据你的实际网卡调整):
network:
  version: 1
  config:
    - type: physical
      name: ens4
      subnets:
        - type: dhcp
          routes:
            - to: 10.0.0.0/8
              via: 192.168.2.1
              dev: ens4
    # 另一块en开头的网卡配置同理
    - type: physical
      name: enxxx
      subnets:
        - type: static
          address: 172.16.0.50
          netmask: 255.255.255.0
          gateway: 172.16.0.1
          routes:
            - to: 192.168.0.0/16
              via: 172.16.0.1
              dev: enxxx
  1. 保存后,让cloud-init重新生成配置:
sudo cloud-init clean
sudo cloud-init init

重启系统后,路由就会被cloud-init自动配置好。

方法三:用rc.local添加路由(简单但不推荐)

如果上面两种方法觉得繁琐,也可以用rc.local手动添加路由,但Ubuntu 16.04默认rc.local是禁用的,需要先启用:

  1. 启用rc.local服务:
sudo systemctl enable rc-local
sudo systemctl start rc-local
  1. 编辑/etc/rc.local,在exit 0之前添加路由命令:
sudo nano /etc/rc.local

添加内容示例:

route add -net 10.0.0.0/8 gw 192.168.2.1 dev ens4
# 另一块网卡的路由同理添加
route add -net 192.168.0.0/16 gw 172.16.0.1 dev enxxx
  1. 保存后重启系统即可。不过这种方法可靠性稍差,比如网卡还未启动完成时执行路由命令可能会失败。

最后提个小建议:不管用哪种方法,先手动执行路由命令测试生效后,再配置持久化,避免走弯路。

内容的提问来源于stack exchange,提问作者molly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:47:50