数据包如何穿越 tc/netfilter 物理、VLAN 和桥接接口?

数据包如何穿越 tc/netfilter 物理、VLAN 和桥接接口?

假设在两个网络 A 和 B 之间执行 NAT 的路由器上进行了以下设置:

  • eth0 - 物理接口 -IP地址
    • eth0.1 - 网络 A 的 VLAN 接口 -IP地址
    • eth0.2 - 网络 B 的 VLAN 接口 - 网络 B 的 IP 地址
  • br0 - 网桥 - 网络 A 的 IP 地址
    • 将 eth0.1 与其他(不相关)接口结合起来

问题

数据包从网络 A 到达,因此它被标记为 VLAN ID 1。物理上,它被 eth0 接收。逻辑上是 eth0.1,但也可以是 br0。

如果目标 IP 在网络 B 中,那么它将另外在逻辑上转发到 eth0.2,但必须再次通过 eth0 物理离开。

按什么顺序这些数据包是否由入口/出口 qdisc 和 PRE/POSTROUTING iptables 处理?

那么另一个方向(通过相同的接口从网络 B 到 A)呢?

参考netfiler数据包流程图: Netfiler数据包流图

答案1

经过对 tcpdump 和 iptables 的一些实验后,我观察到以下情况:

如果数据包从网络 A 发送到网络 B,则 tcpdump 显示:

  1. eth0:VLAN ID 1 标记帧(大 4 个字节)。
  2. eth0.1:未标记的帧
  3. br0:同一帧
  4. eth0.2:NAT 帧

iptables:

  1. br0 在
  2. 网络地址转换
  3. eth0.2 输出

认为qdisc 按如下顺序处理:

  1. eth0 入口
  2. eth0.1 入口
  3. br0入口
  4. br0 出口
  5. eth0.1 出口
  6. eth0 出口

相关内容