You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何解决非对称路由问题?

如何解决非对称路由问题?

兄弟,我看你遇上的这个SSH掉线问题,妥妥的非对称路由坑!先帮你捋清楚来龙去脉,再给你几个实用的解决办法。

先明确你的网络场景

你的网络环境大概是这样的:

  • PfSense路由器,带一个未标记的主网段10.1.0.0/23,还有个标记为VLAN40的子网10.1.40.0/24
  • 无线电脑连主网段,IP是10.1.0.11
  • Linux服务器插了两块网卡,分别通过路由器DHCP拿到主网段的10.1.0.200和VLAN40的10.1.40.200

问题根源拆解

你遇到的情况是:连服务器主网IP完全稳定,但连VLAN40的IP时,SSH刚连上20-40秒就掉线,还能在PfSense日志里看到默认拒绝规则的记录——这本质是非对称路由在搞鬼!

我给你拆解下数据包的走向:

  1. 无线电脑(10.1.0.11)发请求到服务器的10.1.40.200,数据包走主网到PfSense,再转发到VLAN40,这一步符合路由器规则,所以日志里会出现那条允许的记录。
  2. 服务器收到请求后,因为它本身有主网的网卡,而且主网的默认路由优先级更高,回包时直接从主网卡发回给10.1.0.11,根本没走VLAN40的网卡回PfSense。
  3. PfSense的状态检测机制就懵了:我只记录了「从10.1.0.1110.1.40.200」的会话状态,现在突然收到「从10.1.0.20010.1.0.11」的回包,这不在我记录的会话里啊!直接触发默认拒绝规则丢包,你的SSH连接自然就断了。

实用解决方案

方案1:给Linux服务器加静态路由(推荐,最灵活)

你需要在服务器上配置一条静态路由,让所有来自10.1.0.0/23网段的回包,都走VLAN40的网卡发回PfSense。
假设服务器上VLAN40的网卡叫eth1(用ip a命令可以查实际网卡名),先执行临时生效的命令:

ip route add 10.1.0.0/23 via 10.1.40.1 dev eth1

这里的10.1.40.1是VLAN40网段的网关(也就是PfSense上VLAN40接口的IP),记得换成你实际的网关地址。

要永久生效的话,不同发行版配置方式不一样:

  • Ubuntu/Debian:编辑/etc/netplan/00-installer-config.yaml(或你的netplan配置文件),添加对应路由配置
  • CentOS/RHEL:编辑/etc/sysconfig/network-scripts/ifcfg-eth1,添加网关和静态路由条目,或者单独编辑/etc/sysconfig/network-scripts/route-eth1文件

方案2:修改PfSense的状态检测设置(不推荐,影响安全性)

如果你不想改服务器配置,可以关闭PfSense针对该会话的状态检测,但这会降低防火墙安全性,因为会绕过部分状态检查机制。
操作步骤:

  1. 登录PfSense后台,进入防火墙 > 规则 > LAN
  2. 编辑那条「Default allow LAN to any rule」,找到「状态类型」选项,把默认的状态改成无状态
  3. 保存应用即可,但这个方案谨慎选择,毕竟会削弱LAN侧的防护能力。

方案3:调整服务器的默认路由

如果服务器大部分流量都在VLAN40网段,可以把默认路由改成VLAN40的网关,这样所有回包都会走VLAN40网卡。但这会影响服务器访问主网外的资源,需要同时配置主网的静态路由,适合特定场景。
临时修改默认路由的命令:

ip route del default
ip route add default via 10.1.40.1 dev eth1

永久生效同样需要修改对应发行版的网络配置文件。

备注:内容来源于stack exchange,提问作者KevDog

火山引擎 最新活动