我有一个 VPN 应用程序,它通过 tcp 套接字连接到 VPN 服务器。我已经用setsockopt
和标记了 TCP 套接字数据包SO_MARK
。我可以ping 10.0.0.1
成功ping VPN 网关。
然后我尝试通过 VPN 路由我的全部流量。我创建一个不同的表并使用ip route add default via 10.0.0.1 dev tun0 table 200
和添加默认网关ip rule add lookup 200
。
但随后VPN自己的数据包开始通过VPN。我运行ip rule add fwmark 1234 lookup main
vpn自己的数据包被排除在vpn之外。我可以通过 tcpdump 看到它们,eth0
并且 VPN 服务器正在应答它们。但是传入的数据包不会传递到 tcp 套接字。内核似乎正在放弃它们。为什么?