为什么 u32 和 PRERouting 的组合在 iptables 中不起作用?

Why does a combination of u32 and PRErouting not work within iptables?

我目前正在尝试了解在 xubuntu 网关上使用 iptables 的高级设置。我发现可以使用 u32 模块过滤数据包中的特定字节值。 例如,我可以使用下一个命令

检测到通过网关的 TLS 1.2 Client Hello 消息
sudo iptables -I FORWARD 1 \
-p tcp \! -f --dport 443 \
-m state --state ESTABLISHED -m u32 --u32 \
"0>>22&0x3C@ 12>>26&0x3C@ 0 & 0xFFFFFF00=0x16030100 && \
 0>>22&0x3C@ 12>>26&0x3C@ 2 & 0xFF=0x01 && \
 0>>22&0x3C@ 12>>26&0x3C@ 7 & 0xFFFF=0x0303" \
-j LOG --log-prefix "TLS 1.2 Client Hello detected: "

但是,有时最好使用 PREROUTING table(例如,对于不应转发的邮件)。但是如果我尝试

sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -m u32 --u32 \
"0>>22&0x3C@ 12>>26&0x3C@ 0 & 0xFFFFFF00=0x16030100 && \
0>>22&0x3C@ 12>>26&0x3C@ 2 & 0xFF=0x01 && \
0>>22&0x3C@ 12>>26&0x3C@ 7 & 0xFFFF=0x0303"
-j LOG --log-prefix "tls 1.2 detected"

虽然在 Wireshark 中可以看到客户端问候消息,但我在日志文件中没有看到任何新行。 有谁知道我做错了什么或者为什么 u32 不能使用 PREROUTING table?

nat table 仅在连接的第一个数据包中查询。检查 this response