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

AWS EC2多网卡绑定独立EIP的网络配置方案咨询

AWS EC2多网卡绑定独立EIP的网络配置方案咨询

我刚从传统机房运维转到AWS的时候,也碰到过一模一样的多网卡EIP配置难题——毕竟传统环境里有交换机路由器兜底,AWS的VPC网络逻辑确实得转个弯。咱们一步步拆解解决你的问题:

先确认AWS层面的前置配置(别踩基础坑)

首先得确保你在AWS控制台的配置是对的,这是后续实例内部配置生效的前提:

  • 每个弹性网卡(ENI)必须部署在同一个VPC下的不同子网(AWS要求ENI不能同子网)
  • 每个子网关联的路由表,必须包含指向互联网网关(IGW)的默认路由(0.0.0.0/0 -> IGW),否则EIP无法连通公网
  • 每个ENI绑定的EIP要确保关联正确,控制台里能看到ENI和EIP的绑定关系

解决实例内部的路由混乱问题(Ubuntu 22.04专属方案)

你的核心问题是多网卡带来的路由冲突,以及禁用DHCP路由后无有效出站路径。这里的关键是用基于源地址的策略路由,让每个网卡的流量走对应的网关,同时避免默认路由冲突。

第一步:彻底禁用Cloud-Init的网络管理

Ubuntu 22.04默认用Cloud-Init管理网络,它会自动覆盖你的Netplan配置,所以先把它关掉:

  1. 创建Cloud-Init配置文件:
    sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<EOF
    network: {config: disabled}
    EOF
    
  2. 清理Cloud-Init的缓存并重启:
    sudo cloud-init clean
    sudo reboot
    

第二步:编写正确的Netplan配置

Netplan是Ubuntu 22.04的网络管理工具,我们用它来配置每个网卡的DHCP(只拿IP,不拿默认路由),同时添加自定义的策略路由。

假设你的网卡是eth0(主网卡)、eth1、eth2,对应的私有IP分别是10.0.1.10、10.0.2.20、10.0.3.30,每个子网的网关是子网网段的第一个IP(比如10.0.1.1、10.0.2.1、10.0.3.1),创建Netplan配置文件:

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      # 主网卡保留默认路由,用于实例自身的基础网络访问(比如更新包)
    eth1:
      dhcp4: true
      dhcp4-overrides:
        use-routes: false  # 禁止DHCP自动添加路由
      routes:
        # 给eth1的路由表添加默认路由和子网路由
        - to: 0.0.0.0/0
          via: 10.0.2.1
          table: 101
        - to: 10.0.2.0/24
          dev: eth1
          table: 101
      routing-policy:
        # 所有从eth1私有IP发出的流量,使用101号路由表
        - from: 10.0.2.20
          table: 101
    eth2:
      dhcp4: true
      dhcp4-overrides:
        use-routes: false
      routes:
        - to: 0.0.0.0/0
          via: 10.0.3.1
          table: 102
        - to: 10.0.3.0/24
          dev: eth2
          table: 102
      routing-policy:
        - from: 10.0.3.30
          table: 102

第三步:配置路由表标识

我们需要给每个自定义路由表起个名字,方便管理:
编辑/etc/iproute2/rt_tables文件,添加以下内容:

101     eth1-table
102     eth2-table

(主网卡用默认的main表即可,无需额外添加)

第四步:应用配置并验证

  1. 生成并应用Netplan配置:
    sudo netplan generate
    sudo netplan apply
    
  2. 验证路由规则:
    ip rule show
    
    应该能看到针对10.0.2.20和10.0.3.30的规则,分别指向101和102表。
  3. 验证路由表内容:
    ip route show table eth1-table
    
    应该能看到default via 10.0.2.1 dev eth1和10.0.2.0/24 dev eth1的路由。
  4. 测试EIP连通性:
    用指定网卡访问公网,确认返回对应EIP:
    curl --interface eth1 ifconfig.me
    curl --interface eth2 ifconfig.me
    

服务绑定的注意事项

要让不同服务用对应的EIP对外提供服务,只需要在服务配置里绑定对应网卡的私有IP即可:

  • 比如Nginx,在配置文件里写listen 10.0.2.20:80;,这样对外访问该EIP的80端口时,流量就会走eth1的网络路径。
  • 对于其他服务(比如Python、Java应用),启动时指定绑定的IP为对应ENI的私有IP即可。

常见问题排查

  • 如果EIP仍无法访问:检查子网的网络ACL是否放行双向流量(入站和出站都要开放对应端口),以及ENI的安全组是否允许相关端口的访问。
  • 如果路由规则失效:确认Netplan配置没有语法错误(用netplan generate检查),或者重启实例后再验证。

备注:内容来源于stack exchange,提问作者talematros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:48:14