我设置了简单的数据包拦截程序,使用两个 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 发送出去,但它永远不会被传递到本地应用程序。