我正在通过我编写的程序设置的 TUN 接口建立传出 TCP 连接。 TUN 接口基本上只是将数据包中继到代理服务器或从代理服务器中继数据包,只需进行最少的修改(源/目标 IP/端口、TCP 校验和)。
在通过此 TUN 接口路由的 IP 上运行 wget,数据包似乎已正确发送和接收(请参阅跟踪),但不知何故,从服务器返回的 SYN/ACK 未在 TCP 堆栈中注册,并且套接字仍然存在在“netstat -t”中处于 SYN_SENT 状态。然后,在两个方向上不断生成虚假重传(直到超时)。
以下是我用来设置它的命令:
ip link set dev tun0 up
ip addr add 10.0.0.1/24 dev tun0
ip route add 216.58.197.100/32 dev tun0
其次是
wget http://216.58.197.100
这是wireshark跟踪在这里:
答案1
我似乎发现了问题:在将传入数据包写入 TUN 接口之前,我需要计算它们的 IPv4 标头校验和,因为我修改了它们。