我有一个数据包从自定义覆盖网络上的容器发送,使用docker create network --driver=overlay
TOS 0x08。但是,docker 覆盖网络使用 VXLAN 标头以及外部 udp、ip 和以太网来包装此 L2 数据包。因此,外层IP数据包的TOS不再与内层IP数据包的TOS匹配,因此当它前往物理NIC时,数据包无法再按照原始流量控制规则进行处理(控制流量进入不同的队列)。例如。使用 tshark 捕获的数据包如下所示。
如图所示,外部 IP TOS 现在设置为 T0。
在外部 IP TOS 到达 TC qdisc 之前,我该如何更改它?我尝试查看 iptables 并发现它们可能会通过过滤器的表链OUTPUT
和/或 mangle 的表链,POSTROUTING
如下所示
# mangle
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
POSTROUTING_direct all -- anywhere anywhere
# filter
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
OUTPUT_direct all -- anywhere anywhere
我认为这是因为我发送了大量的数据包并看到这些表上的数据包计数器上升。但是,我对 iptables 的了解不够先进,无法完成我想要的任务。还有其他办法吗?