我正在拦截通过某个服务器 P 路由的数据包。我有一个客户端和服务器,分别是 A 和 B,它们正在互相通信。
基本上,当 P 从 A 收到一个数据包(目的地是 B)时,我希望能够将该数据包扭转过来并进行修改(变为 ACK)。
我成功修改了 IP 数据包的源地址和目标地址,但是当我将数据包释放回去时,即使 IP 数据包的目的地标记为 A,它仍然会发往 B。
总而言之,我想要的是:
A----->(src=A, dest=B) -----> P ------------------B
A-----<(src=B, dest=A) -----< P ------------------B
但我得到的是:
A----->(src=A, dest=B) -----> P ------------------B
A ------------- P >-------(src=B, dest=A) ------- > B
为什么会这样:
作为参考,我的 iptables 命令是:
iptables -A FORWARD -j NFQUEUE --queue-num 0
此外,当我将 iptables 命令更改为:
iptables -t mangle -A PREROUTING ....
Netfilter 接受数据包后,数据包似乎消失了。wireshark 显示原始数据包,而不是我将其更改为的 ACK 数据包
答案1
好的,我明白了。
目标 NAT 需要在 mangle 表的 PREROUTING 链中完成。
iptables -t mangle -A PREROUTING .... -j NFQUEUE --queue-num 0
此外,非常重要的是,反渗透过滤器需要停用。这原本是在路由阶段之后丢弃数据包。