0

我设置了简单的数据包拦截程序,使用两个 tun,设置如下:

# ip tuntap add mode tun name tun0
# ip link set tun0 up
# ip addr add 10.0.0.0/31 dev tun0
# ip tuntap add mode tun name tun1
# ip link set tun1 up
# ip addr add 10.0.1.0/31 dev tun1

并将输出重定向到程序,如下所示:

# ip rule add fwmark 1 table 1
# ip route add default dev tun0 table 1
# iptables -t mangle -A OUTPUT --source 192.168.1.0 -o enp34s0 -p tcp --dport 9732 -j MARK --set-mark 1
# iptables -t nat -A POSTROUTING --source 10.0.1.1 -o enp34s0 -j MASQUERADE

我启用ip_forward和禁用rp_filter. 接收到的数据包tun0被处理、修改并更新 ip/tcp 校验和。我什至可以正确拦截SYN -> ACK,SYN -> ACK通信的 tcp 握手部分,但在那之后,任何传入的数据包都会被正确拦截并修改并从 tun 发送出去,但它永远不会被传递到本地应用程序。

4

1 回答 1

0

好的,发现了一个问题,虽然我确实重新计算了校验和,但它只为没有任何有效负载的 TCP 数据包计算了正确的校验和,因此 TCP 握手通过而没有别的。

于 2020-03-25T10:55:53.690 回答