假设在两个网络 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)呢?
答案1
经过对 tcpdump 和 iptables 的一些实验后,我观察到以下情况:
如果数据包从网络 A 发送到网络 B,则 tcpdump 显示:
- eth0:VLAN ID 1 标记帧(大 4 个字节)。
- eth0.1:未标记的帧
- br0:同一帧
- eth0.2:NAT 帧
iptables:
- br0 在
- 网络地址转换
- eth0.2 输出
我认为qdisc 按如下顺序处理:
- eth0 入口
- eth0.1 入口
- br0入口
- br0 出口
- eth0.1 出口
- eth0 出口