![思科无线路由器在路由器模式下不允许完整的 TCP 握手](https://linux22.com/image/1406145/%E6%80%9D%E7%A7%91%E6%97%A0%E7%BA%BF%E8%B7%AF%E7%94%B1%E5%99%A8%E5%9C%A8%E8%B7%AF%E7%94%B1%E5%99%A8%E6%A8%A1%E5%BC%8F%E4%B8%8B%E4%B8%8D%E5%85%81%E8%AE%B8%E5%AE%8C%E6%95%B4%E7%9A%84%20TCP%20%E6%8F%A1%E6%89%8B.png)
我最近购买了一台思科 rv220w 无线路由器。我的设置如下:
Internet -> asa 5505 -> 10.0.1.0 subnet -> wireless router
(子网 10.0.3.0,面向公众的 IP 是 10.0.1.140)。
我可以在两个子网之间正常 ping,但其他的就不行了。我用 wireshark 捕获了数据包,发现了一些非常有趣的事情。如果我尝试从 10.0.1.0 子网中的一台机器连接到 10.0.3.0 子网,比如本例中的远程桌面,我会收到一个 SYN,然后是一个 SYN_ACK,然后没有收到 ACK。只有发起连接的机器发送了一个重置 (RST)。
这真是太奇怪了。如有任何帮助,我将不胜感激。如果需要,我有详细的捕获信息。此外,以下是数据包跟踪结果,例如,10.0.1.0 子网上的计算机尝试远程访问 10.0.3.0 子网上的计算机:
数据包跟踪器输入内部 tcp 10.0.1.46 33000 10.0.3.151 3389 阶段1 类型:FLOW-LOOKUP` 子类型: 结果:允许 配置: 附加信息: 未找到匹配的流程,正在创建新的流程 阶段2 类型:ROUTE-LOOKUP 子类型:输入 结果:允许 配置: 附加信息: 在 10.0.3.0 255.255.255.0 里面 阶段:3 类型:访问列表 子类型:日志 结果:允许 配置: 接口内部的 access-group inside_access_in 访问列表 inside_access_in 扩展允许 tcp 任何任何对象组 DM_INLINE_TCP_1 对象组服务 DM_INLINE_TCP_1 tcp 组对象 ftpdatatls 组对象 ftptls 群组对象 gtalk 组对象 imapssl 组对象 smtp2 组对象 smtpssl 组对象 sqlserver 端口对象 eq ftp 端口对象 eq ftp 数据 端口对象 eq www 端口对象 eq https 端口对象 eq imap4 端口对象 eq pop3 端口对象 eq smtp 端口对象 eq ssh 端口对象 eq telnet 群组对象互联网电台 端口对象 eq whois 群组对象网络邮件 组对象 rdp 组对象 mtbogcweb 组对象 git 组对象 iCloudSMTP 组对象 whm 群组对象 utahsde 端口对象 eq 1401 端口对象 eq 5442 附加信息: 阶段:4 类型:IP-OPTIONS 子类型: 结果:允许 配置: 附加信息: 阶段:5 类型: 子类型: 结果:允许 配置: 附加信息: 阶段:6 类型:NAT-EXEMPT 子类型: 结果:允许 配置: 匹配 ip 10.0.1.0 255.255.255.0 内部 10.0.3.0 255.255.255.0 内部 NAT 豁免 翻译命中数 = 23,取消翻译命中数 = 0 附加信息: 阶段:7 类型:NAT-EXEMPT 子类型:rpf-check 结果:允许 配置: 匹配 ip 10.0.3.0 255.255.255.0 内部 10.0.1.0 255.255.255.0 内部 NAT 豁免 翻译命中数 = 0,取消翻译命中数 = 23 附加信息: 阶段:8 类型:NAT 子类型: 结果:允许 配置: nat (内部) 1 0.0.0.0 0.0.0.0 匹配 ip inside any inside any 动态转换至池 1(无匹配的全局变量) 翻译命中数 = 1,取消翻译命中数 = 0 附加信息: 阶段:9 类型:NAT 子类型:主机限制 结果:允许 配置: nat (内部) 1 0.0.0.0 0.0.0.0 匹配 ip inside any inside any 动态转换至池 1(无匹配的全局变量) 翻译命中数 = 1,取消翻译命中数 = 0 附加信息: 阶段:10 类型:NAT 子类型:rpf-check 结果:允许 配置: nat (内部) 1 0.0.0.0 0.0.0.0 匹配 ip inside any inside any 动态转换至池 1(无匹配的全局变量) 翻译命中数 = 1,取消翻译命中数 = 0 附加信息: 阶段:11 类型:NAT 子类型:主机限制 结果:允许 配置: nat (内部) 1 0.0.0.0 0.0.0.0 匹配 ip inside any inside any 动态转换至池 1(无匹配的全局变量) 翻译命中数 = 1,取消翻译命中数 = 0 附加信息: 阶段:12 类型:IP-OPTIONS 子类型: 结果:允许 配置: 附加信息: 阶段:13 类型:流程创建 子类型: 结果:允许 配置: 附加信息: 新流程创建,ID 为 77684,数据包已发送至下一个模块 结果: 输入接口:内部 输入状态:up 输入线状态:up 输出接口:内部 输出状态:向上 输出线路状态:up 操作:允许
答案1
如果我理解正确的话,您的完整设置是:
互联网 -> asa 5505 -> 10.0.1.0 子网 -> 无线路由器 -> 10.0.3.0 子网
由于无线路由器是新买的,我猜想 10.0.1.0 子网中的所有 PC 都使用 asa 5505 作为默认网关。因此,从 10.0.1.0 到 10.0.3.0 的数据包被转换到池 1,这在某种程度上扰乱了数据包流。
尝试:1. 将 10.0.1.0 子网中所有 PC 的默认网关更改为无线路由器,或 2. 禁用与池 1 的路由
答案2
所以,最终 Reddit 上的某个人给我指明了正确的方向。对我有用的解决方案如下:https://serverfault.com/questions/511059/routing-via-cisco-asa-is-changing-tcp-sequence-ack-numbers。
看来 ASA 正在随机化序列号,这让无线路由器感到困惑。具体来说,我添加了
set connection advanced-options tcp-state-bypass
我的全球检查政策。