来自本地TCP套接字的IPv6黑洞数据包

时间:2016-06-08 09:57:16

标签: c++ linux networking routing

我正在开发一个WAN数据优化应用程序,包括用于Web缓存的SQUID(使用TPROXY重定向)。该软件修改TCP选项以与另一个软件远程实例(在优化算法中使用)协商参数。由于SQUID将与请求浏览器建立TCP连接,并且WAN数据包可以通过IPSec隧道发送,因此软件必须在这两个组件之间运行。

我能够配置系统,以便SQUID能够正确处理LAN端请求,并且在缓存未命中时将数据包发送到我的软件中(使用TUN / TAP接口),修改TCP头(并更正csum) )并通过第二个TUN / TAP接口将其发送回内核。

对于缓存未命中后发送到WAN的数据包:

对于IPv4,如果我在第一次点击时发送rp_filter = 2(并手动添加ARP条目),则数据包被正确路由

对于IPv6,内核似乎会破坏从SQUID发送的TCP SYN。这是与本地创建的套接字相关联的数据包,接收回(相同)内核以路由到WAN。如果我修改数据包的源端口或目标端口(即使其看起来像一个不同的套接字),它将被正确地路由出隧道/接口。

iptables中是否有任何sysctl参数/聪明可以解释为什么这些数据包被丢弃以及如何解决?

0 个答案:

没有答案