故障排查实录:旁路由模式下内网服务无法穿透的“非对称路由”之困

一次典型的网络故障排查,最终定位到由Windows网关错误指向旁路由导致的非对称路由问题。

问题背景

在家庭网络环境中,我搭建了以下服务架构:

  1. 公网服务器:阿里云ECS,运行FRP服务端(frps)
  2. 内网旁路由:iStoreOS系统(基于OpenWrt),运行FRP客户端(frpc),作为网络旁路设备
  3. 目标服务:本地Windows电脑上的Minecraft Java版服务器(端口25564)

预期目标:通过公网FRP服务穿透内网Minecraft服务器。

故障现象:通过旁路由的FRP隧道无法连接Minecraft服务器,但将frpc直接安装在Windows电脑上则可以正常穿透。

网络环境拓扑

1
公网客户端 -> 阿里云frps(11451端口) -> 家庭网络 -> iStoreOS旁路由(192.168.5.2) -> Windows MC服务器(192.168.5.4:25564)

逐步排查过程

第一阶段:基础配置检查

  1. 确认FRP配置正确性

    • 隧道类型:TCP
    • 本地IP:正确设置为Windows内网IP(192.168.5.4)
    • 本地端口:25564(与Minecraft服务器配置一致)
    • 远程端口:11451(已在阿里云安全组开放)
  2. 验证旁路由FRP运行状态

    1
    2
    3
    4
    5
    6
    # 检查frpc进程
    ps | grep frpc

    # 确认隧道注册成功
    logread | grep frp.Mechanomania
    # 显示:[frp.Mechanomania] start proxy success

第二阶段:网络连通性测试

  1. 关键发现:从旁路由直接测试到Windows端口的连接

    1
    2
    3
    # 使用简化版nc测试
    nc 192.168.5.4 25564
    # 现象:连接建立(光标卡住),但无数据返回,最终超时

    这一现象表明:TCP握手可以完成,但数据传输受阻

  2. Windows端服务验证

    1
    2
    3
    4
    5
    6
    7
    # 检查服务监听状态
    netstat -an | findstr :25564
    # 输出显示正确监听:0.0.0.0:25564

    # 本地回环测试正常
    Test-NetConnection -ComputerName 127.0.0.1 -Port 25564
    # TcpTestSucceeded : True

第三阶段:深入网络配置检查

  1. 排查防火墙与网络隔离

    • 已确认Windows防火墙完全关闭
    • 检查路由器无“客户端隔离”设置
  2. 关键突破:发现异常网关配置

    1
    2
    3
    4
    5
    6
    7
    8
    # Windows网络配置检查
    ipconfig

    # 关键输出:
    # 以太网适配器 以太网 3:
    # IPv4 地址 . . . . . . . . . . . . : 192.168.5.4
    # 子网掩码 . . . . . . . . . . . . : 255.255.255.0
    # 默认网关. . . . . . . . . . . . . : 192.168.5.2 <-- 问题所在!

第四阶段:问题根源分析

根本原因:非对称路由问题

  1. 连接建立:iStoreOS(192.168.5.2)向Windows(192.168..5.4)发起连接,SYN包直接送达。

  2. 响应异常:Windows收到SYN后,需要发送SYN-ACK响应。但由于其网关设置为192.168.5.2,它将本应直接回复给192.168.5.2的响应包,又发往了网关192.168.5.2本身

  3. 数据包迷失:iStoreOS收到一个”发给自己但不是自己发起”的TCP握手响应,不知如何处理而丢弃,导致连接卡在握手后的阶段,无法传输实际数据。

解决方案

临时验证方案

1
2
3
4
5
6
# 以管理员身份运行PowerShell
# 删除错误网关
route delete 0.0.0.0 mask 0.0.0.0 192.168.5.2

# 添加正确网关(假设主路由器为192.168.5.1)
route add 0.0.0.0 mask 0.0.0.0 192.168.5.1

永久修复方案

  1. 控制面板网络和共享中心更改适配器设置
  2. 右键当前网络连接 → 属性Internet协议版本4(TCP/IPv4)
  3. 根据当前设置选择:

    • 自动获取IP地址:点击”高级”,在”网关”栏中删除192.168.5.2,添加主路由器地址
    • 手动设置IP地址:直接修改”默认网关”为主路由器地址(如192.168.5.1)
  4. 验证旁路由自身网关设置

    1
    2
    3
    # 在iStoreOS上检查
    ip route show default
    # 应显示:default via 192.168.5.1 dev ...

技术要点总结

  1. 旁路由架构中,终端设备的默认网关应指向主路由器,而非旁路由设备本身。
  2. 网络排查方法论
    • 遵循”从底向上”原则:物理连接 → 网络层 → 传输层 → 应用层
    • 善用基础工具:nc/telnet测试连通性,netstat检查服务状态,ipconfig验证网络配置
    • 关注异常现象:能建立连接但无数据传输,往往指向路由或防火墙问题
  3. FRP故障排查要点
    • 先确认frpc隧道成功建立
    • 在frpc侧测试到local_ip:local_port的连通性
    • 关注frpc日志中的具体错误信息

经验教训

  1. 网关配置是旁路由部署中最常见的错误点,配置后务必检查所有设备的网关设置。
  2. 网络故障现象与根本原因可能相距甚远,本次表现为FRP穿透失败,根本原因却是Windows网络配置错误。
  3. 系统性的排查方法比盲目尝试更有效,建立清晰的排查路径能极大提高问题解决效率。

修正后拓扑

1
公网客户端 -> 阿里云frps -> iStoreOS旁路由 -> Windows MC服务器(网关正确指向主路由器)

结果:网关修正后,FRP隧道立即恢复正常,可通过公网成功访问内网Minecraft服务器。