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配置,所以先把它关掉:
- 创建Cloud-Init配置文件:
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<EOF network: {config: disabled} EOF - 清理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表即可,无需额外添加)
第四步:应用配置并验证
- 生成并应用Netplan配置:
sudo netplan generate sudo netplan apply - 验证路由规则:
应该能看到针对ip rule show10.0.2.20和10.0.3.30的规则,分别指向101和102表。 - 验证路由表内容:
应该能看到ip route show table eth1-tabledefault via 10.0.2.1 dev eth1和10.0.2.0/24 dev eth1的路由。 - 测试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
相关产品推荐
相关产品推荐

