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

AWS双ENI实例作为NAT服务器时的同接口转发配置问题

AWS双ENI实例作为NAT服务器时的同接口转发配置问题

嘿,我太懂你遇到的这个糟心问题了——多ENI的NAT实例里出现“进错接口出”的情况,本质是Linux默认路由不会区分流量的入站接口,只会一股脑走默认路由。要实现**“哪个接口收的流量就从哪个接口发出去”,咱们得靠策略路由(Policy Routing)**来解决,下面是一步步的实操方案:

1. 先确保IP转发已开启

这是NAT服务器的基础前提,先临时开启:

echo 1 > /proc/sys/net/ipv4/ip_forward

如果要永久生效,编辑/etc/sysctl.conf,把net.ipv4.ip_forward的值改成1,然后执行sysctl -p加载配置。

2. 为每个ENI创建独立路由表

咱们要给ens5和ens6各配专属路由表,避免路由混乱:

  • 先查看系统现有路由表:ip route show table all
  • 新增两个自定义路由表,比如用10、11作为编号(编号只要不冲突就行):
echo "10 ens5-table" >> /etc/iproute2/rt_tables
echo "11 ens6-table" >> /etc/iproute2/rt_tables

3. 给每个路由表配置专属路由

把对应ENI的子网路由和默认网关加到各自的表中(替换成你实际的子网和网关地址):

# 配置ens5的路由规则:子网+默认网关
ip route add 10.x.x.0/24 dev ens5 table ens5-table
ip route add default via 10.x.x.1 dev ens5 table ens5-table

# 配置ens6的路由规则:子网+默认网关
ip route add 10.y.y.0/24 dev ens6 table ens6-table
ip route add default via 10.y.y.1 dev ens6 table ens6-table

这里的网关地址可以从AWS控制台对应子网的路由表中查到,也可以用ip route show看默认路由里的网关。

4. 添加策略路由规则,绑定入站接口

告诉系统:“从ens5进来的流量,就用ens5的路由表;从ens6进来的,用ens6的表”:

# 匹配ens5的入站流量,用ens5-table路由
ip rule add iif ens5 table ens5-table
# 匹配ens6的入站流量,用ens6-table路由
ip rule add iif ens6 table ens6-table

5. 配置SNAT规则(关键!)

最后要给每个ENI做SNAT,让出站流量用对应ENI的公网IP(替换成你实际的公网IP):

# ens5子网的流量,出站时转成ens5的公网IP
iptables -t nat -A POSTROUTING -o ens5 -s 10.x.x.0/24 -j SNAT --to-source A.B.C.D
# ens6子网的流量,出站时转成ens6的公网IP
iptables -t nat -A POSTROUTING -o ens6 -s 10.y.y.0/24 -j SNAT --to-source E.F.G.H

如果有多个内网子网需要通过对应ENI转发,把-s后面的网段换成对应的就行。

验证配置

做完上面的操作后,再用tcpdump测试:

tcpdump -i any -nn host 1.1.1.1

现在应该能看到从ens6进来的流量,会乖乖从ens6出去了。也可以用ip rule show和ip route show table ens5-table检查路由规则和表是否正确生效。

要是想让配置重启后不丢失,可以把这些命令加到开机脚本里,比如/etc/rc.local(系统支持的话),或者写个systemd服务来管理。

备注:内容来源于stack exchange,提问作者Ra'Jiska

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:10:26