George Robinson Asked: 2019-11-24 16:39:24 +0800 CST2019-11-24 16:39:24 +0800 CST 2019-11-24 16:39:24 +0800 CST iptables-mod-tee 克隆的数据包克隆后去哪了? 772 iptables-mod-tee当我添加这样的规则时,打包后的克隆是否被克隆了?: iptables -t mangle -A POSTROUTING -o eth2 -j TEE --gateway 192.168.0.3 请参考下图。我认为很明显,使用上面的命令,iptables-mod-tee模块使用 的POSTROUTING chain作为mangle table克隆源,但是数据包被克隆后会发生什么?即克隆去哪个链和表? 编辑:在上图中添加了一条红色虚线,以描述答案中描述的克隆数据包的路径。 linux iptables 1 个回答 Voted Best Answer A.B 2019-11-25T01:28:33+08:002019-11-25T01:28:33+08:00 通过 TEE 克隆的数据包,被 conntrack 设置为不跟踪,防止 再次复制,并通过路由堆栈的本地输出部分发出,因此首先由 raw/OUTPUT 看到(您也可以参考Netfilter 中的此数据包流和通用网络示意图:这将在本地进程之后)。如果之前对路由数据包进行了复制(例如在 mangle 或原始 PREROUTING 中),这将是相同的。这使得很难(但并非不可能)像额外的 nat 一样接受额外的治疗,因为它不会被跟踪并且很难将其与原始数据区分开来。 这是一个示例TRACE(使用 iptables-legacy 的版本)在类似于 OP 的设置中捕获从 192.168.0.2 到 8.8.8.8 的 ping:捕获是在路由器上使用iptables -t raw -A OUTPUT -j TRACE. 原始路由数据包不会出现,因为它必须从 raw/PREROUTING 中捕获,因此验证了上面的解释,告诉它是从输出完成的。 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
通过 TEE 克隆的数据包,被 conntrack 设置为不跟踪,防止 再次复制,并通过路由堆栈的本地输出部分发出,因此首先由 raw/OUTPUT 看到(您也可以参考Netfilter 中的此数据包流和通用网络示意图:这将在本地进程之后)。如果之前对路由数据包进行了复制(例如在 mangle 或原始 PREROUTING 中),这将是相同的。这使得很难(但并非不可能)像额外的 nat 一样接受额外的治疗,因为它不会被跟踪并且很难将其与原始数据区分开来。
这是一个示例TRACE(使用 iptables-legacy 的版本)在类似于 OP 的设置中捕获从 192.168.0.2 到 8.8.8.8 的 ping:捕获是在路由器上使用
iptables -t raw -A OUTPUT -j TRACE
. 原始路由数据包不会出现,因为它必须从 raw/PREROUTING 中捕获,因此验证了上面的解释,告诉它是从输出完成的。