iptables-mod-tee克隆的数据包克隆后去了哪里?

iptables-mod-tee克隆的数据包克隆后去了哪里?

iptables-mod-tee当我添加这样的规则时,克隆后是否会通过 go 克隆打包?:

iptables -t mangle -A POSTROUTING -o eth2 -j TEE --gateway 192.168.0.3

请参考下图。我认为很明显,通过上面的命令,该iptables-mod-tee模块使用 的POSTROUTING chain作为mangle table克隆来源但是数据包会发生什么它是克隆的吗?即克隆会转到哪个链和表?

在此输入图像描述

编辑:在上图中添加了一条红色虚线,以描绘答案中描述的克隆数据包的路径。

在此输入图像描述

答案1

数据包通过TEE克隆,被设置为不被 conntrack 跟踪,阻止被 再次重复,并通过发射本地输出路由堆栈的一部分,因此首先由 raw/OUTPUT 看到(您也可以参考此Netfilter 和通用网络示意图中的数据包流:这将是在本地流程之后)。如果之前对路由数据包进行了复制(例如,在 mangle 或原始 PREROUTING 中),这将是相同的。这使得事情变得困难(但是不是不可能) 接受额外的处理,例如额外的 nat,因为它不会被跟踪,并且很难将其与原始的区分开来。

这是一个例子痕迹(使用 iptables-legacy 的版本)在类似于 OP 的设置中捕获从 192.168.0.2 到 8.8.8.8 进行的 ping:捕获是在路由器上使用iptables -t raw -A OUTPUT -j TRACE.原本的路由的数据包不会出现,因为它必须从原始/预路由中捕获,从而验证上面的解释,告诉它是从输出完成的。

TRACE: raw:OUTPUT:policy:2 IN= OUT=eth1 SRC=192.168.0.2 DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=39209 DF PROTO=ICMP TYPE=8 CODE=0 ID=3070 SEQ=1 
TRACE: mangle:OUTPUT:policy:1 IN= OUT=eth1 SRC=192.168.0.2 DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=39209 DF PROTO=ICMP TYPE=8 CODE=0 ID=3070 SEQ=1 
TRACE: mangle:POSTROUTING:policy:2 IN= OUT=eth1 SRC=192.168.0.2 DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=39209 DF PROTO=ICMP TYPE=8 CODE=0 ID=3070 SEQ=1

相关内容