4. 弹性网络接口与流量镜像

在 AWS 的 VPC 中,实例真正“接入网络”的落点并不是 EC2 本身,而是弹性网络接口(Elastic Network Interface,ENI)。ENI 是一个绑定在子网内的虚拟网卡,承载私有 IPv4/IPv6 地址、MAC 地址、安全组、源/目的检查等属性。理解 ENI,是理解多网卡、流量镜像以及生产抓包定位的基础。

一、ENI 的类型与关键属性

按用途和生命周期,生产环境常见的 ENI 可分为几类:

  • 主网络接口(Primary ENI):创建实例时自动生成,eth0 对应它,实例的默认私有 IP 与主 MAC 都绑定在此,通常不可分离。
  • 辅助网络接口(Secondary ENI):可独立创建并热挂载/卸载,用于多网卡、双栈、管理面与业务面分离等场景。
  • 流量镜像目标 ENI:作为镜像会话的接收端,通常挂在专门的抓包/分析实例上。
  • 服务托管 ENI:由 NAT 网关、ALB/NLB、Lambda、RDS 等服务自动创建,用户一般只读,不应手动改动。

每个 ENI 的核心属性包括:所在子网、私有 IP(可多个)、弹性 IP 关联、MAC 地址、安全组集合、Source/Destination Check、以及是否启用流量镜像。其中源/目的检查尤其关键:当 ENI 需要转发“不是发给自己的”流量(如 NAT 实例、防火墙实例、镜像目标)时,必须关闭该检查,否则内核会丢弃转发包。

二、多网卡绑定的实践要点

多网卡常用于:管理流量与业务流量分离、跨子网部署、构建自建 NAT/防火墙、以及作为流量镜像接收端。绑定辅助 ENI 时需注意:

  1. 辅助 ENI 必须与实例处于同一可用区,但可位于不同子网。
  2. 实例类型决定可挂载的 ENI 数量上限,例如 c5.large 最多 3 张网卡,m5.4xlarge 可达 8 张,规划前先查实例规格。
  3. Linux 中辅助网卡通常显示为 eth1、ens5 等,需确认其路由与策略路由,避免默认路由被覆盖。
  4. 多网卡实例的默认路由只能走主网卡,若要让辅助网卡承载出向流量,需配置策略路由(ip rule + 独立路由表)。

下面这张图展示了 ENI 与实例、子网、安全组、镜像会话之间的结构关系,以及多网卡与镜像目标的数据流向:

VPC 10.0.0.0/16 子网 A · 10.0.1.0/24(业务) EC2 实例(多网卡) 主 ENI eth0 10.0.1.10 辅助 ENI eth1 10.0.1.20 安全组 sg-app(作用于每张 ENI) 子网 B · 10.0.2.0/24(分析) 抓包分析实例 镜像目标 ENI 10.0.2.50 tcpdump 监听 eth0 流量镜像会话 源:主 ENI eth0(10.0.1.10) 过滤:TCP 443 / 全部流量 目标:镜像目标 ENI(10.0.2.50) 状态:Active 镜像复制流量 会话绑定

三、流量镜像配置流程

流量镜像(Traffic Mirroring)用于把 ENI 上的入向/出向流量复制到指定目标,是生产环境无侵入抓包的核心手段。配置分三步:

  1. 创建镜像目标:指定接收流量的目标 ENI(或 NLB)。目标 ENI 所在实例需关闭源/目的检查,并放行来自镜像源的 UDP 4789 端口(VXLAN 封装)。
  2. 创建镜像过滤器:定义要复制的流量,可按方向(ingress/egress)、协议、源/目的 CIDR、端口范围过滤。例如只镜像 TCP 443 出向流量,可显著降低开销。
  3. 创建镜像会话:绑定源 ENI、过滤器、目标 ENI,并设置会话编号(同一源 ENI 最多 3 个会话)。会话建立后状态变为 Active。
镜像流量通过 VXLAN 封装在 UDP 4789 上传输,因此目标实例的安全组必须允许来自镜像源网段的 UDP 4789,否则会话显示 Active 但抓不到包。

四、生产环境抓包与故障定位

假设某 Web 实例(主 ENI 10.0.1.10)出现间歇性 502,需要定位是客户端、实例还是后端问题。可按以下方式操作:

# 在抓包分析实例上监听镜像目标网卡
sudo tcpdump -i eth0 -nn -s 0 -w /tmp/mirror.pcap udp port 4789

# 若镜像目标直接解封装,可过滤业务流量
sudo tcpdump -i eth0 -nn 'tcp port 443 and host 10.0.1.10'

# 观察 TCP 握手与重置
sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-rst) != 0'

抓包后重点看三类信号:

  • SYN 无 SYN-ACK:请求到达实例但未响应,多为安全组、实例内服务未监听或端口未放行。
  • 大量 RST:连接被主动拒绝,常见于后端进程崩溃、连接数打满或健康检查失败。
  • 重传与乱序:网络路径丢包或 MTU 问题,可结合 tcp.analysis.retransmission 过滤。

若镜像会话显示 Active 却抓不到包,排查顺序为:目标实例源/目的检查是否关闭 → 安全组是否放行 UDP 4789 → 过滤器方向是否与预期一致 → 源 ENI 是否真的承载了该流量。生产环境建议把镜像过滤器收窄到必要端口,避免全量复制带来的带宽与成本开销。

流量镜像会复制流量,但不影响原始流量转发;它不能替代 VPC Flow Logs。Flow Logs 记录元数据(五元组、动作、字节数),镜像提供完整报文,两者配合使用定位效率最高。

五、关键参数速查

项目典型值/说明
镜像封装VXLAN over UDP 4789
单源 ENI 会话数最多 3 个
目标类型ENI 或 Network Load Balancer
源/目的检查镜像目标实例需关闭
过滤器维度方向、协议、CIDR、端口

掌握 ENI 的属性边界、多网卡的路由约束以及镜像会话的配置链路,就能在生产环境中以最小侵入的方式完成抓包与故障定位,把“看不见的流量”变成可分析的证据。