TCP跨网段连接建立失败,ISP路由器误报Teardrop攻击求助
TCP跨网段连接建立失败,ISP路由器误报Teardrop攻击求助
背景与环境搭建
我正在用Debian 5.10系统做Linux网络实验,目标是打通两个不同网段(比如192.168.0.0/24和172.17.0.0/16)的连通性。具体环境是:
- 一台单网卡小型服务器,上面运行着VM和Docker容器,需要让这些实例接入物理局域网
- 我本人的电脑和这台服务器都连接在一台廉价的ISP路由交换机一体机上
- 为了实现跨网段路由,我在这台ISP路由器上配置了额外的静态路由
测试过程与现象
我做了一些连通性测试,结果有点奇怪:
- 从服务器(同时作为路由节点的VM/Docker实例)往我的电脑发送UDP和TCP流量,都能正常收发,服务器端也能看到这些流量
- 反向连接时,UDP完全正常,但TCP连接没法完整建立——看起来像是卡在了某个环节
- 不过如果我把静态路由配置在自己的电脑上,而不是ISP路由器上,所有TCP连接都能正常工作
- 另外,如果服务器使用和我电脑同网段的IP(因为服务器本身是路由节点,确实有这个网段的IP),连接也没问题,但这不是我想要的解决方案
关键异常发现:ISP路由器误报Teardrop攻击
我注意到一个关键点:
TCP的SYN、SYN-ACK包都能正常传输,服务器和我的电脑上都能抓到这些包。但当我的电脑发送SYN包时(我推测是SYN,因为服务器始终没检测到连接建立),ISP路由器的日志里会记录“Teardrop攻击”并丢弃这个包。
我查了下Teardrop攻击的原理,它是通过发送带有无效长度/偏移的分片数据包来实现的。于是我用Wireshark抓包分析:
- 发送的SYN包设置了**不分片(DF)**标志
- 分片偏移值是0,总长度为40(包括后续的PSH、ACK包),没看出任何异常
- 和正常连接的数据包对比,也找不到任何区别
- 按照网上的说法,如果数据包有问题,Wireshark会把详情行标红,信息列也会有异常提示,但我的抓包完全没有这类情况
求助需求
现在我想寻求一些可行的思路,希望能在不关闭路由器防火墙、也不更换路由器的前提下,让这些TCP数据包能正常通过,完成连接建立?
备注:内容来源于stack exchange,提问作者0xCDCDCDCD
相关产品推荐
相关产品推荐

