You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

双ISP多LAN环境下子网主机无法互通的问题求助(Ubuntu/NFTables)

双ISP多LAN环境下子网主机无法互通的问题求助(Ubuntu/NFTables)

看起来你已经把双WAN的流量分流逻辑跑通了,各个子网的机器能按NFTables规则选ISP上网,这点做得挺棒的!不过子网间连ping都不通的问题,确实是多LAN路由场景里很常见的“隐形坑”,我来给你梳理几个最可能的解决方向,你可以一步步排查:

1. 先确认内核IP转发是不是真的全局生效了

虽然你能正常上网,说明WAN方向的转发是开的,但有时候可能是针对特定接口开的,全局转发没完全放开。你可以先跑个命令验证:

sysctl net.ipv4.ip_forward

如果输出是net.ipv4.ip_forward = 0,那得把它改成1:

sysctl -w net.ipv4.ip_forward=1

要让这个设置重启后也生效,就编辑/etc/sysctl.conf或者/etc/sysctl.d/99-routing.conf,加一行:

net.ipv4.ip_forward=1

然后执行sysctl -p加载配置。

2. 检查NFTables的Forward规则是否拦住了LAN间流量

这大概率是核心问题!你的NFTables规则应该是重点配置了WAN的分流和出站转发,但默认Forward链可能设了DROP策略,又没加允许LAN子网互访的规则。

假设你的LAN子网分别是192.168.1.0/24、192.168.2.0/24、192.168.3.0/24、192.168.4.0/24(你没贴LAN的Netplan配置,得换成你实际的子网段),你需要在NFTables的filter表Forward链里,在DROP规则之前加一条允许LAN互访的规则:

add rule ip filter forward ip saddr {192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24, 192.168.4.0/24} ip daddr {192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24, 192.168.4.0/24} accept

如果你的LAN接口是明确的(比如lan1、lan2这类),也可以用接口来匹配,更灵活:

add rule ip filter forward iifname {lan1, lan2, lan3, lan4} oifname {lan1, lan2, lan3, lan4} accept

注意规则的顺序很重要,这条允许规则一定要放在所有DROP或者拒绝规则的前面,不然会被后面的规则覆盖。

3. 检查反向路径过滤(rp_filter)的设置

Linux的反向路径过滤机制,有时候会把LAN间的转发流量当成“异常流量”拦截掉,特别是当你有两个默认路由(双WAN)的时候。你可以先查看当前的rp_filter设置:

sysctl net.ipv4.conf.all.rp_filter

如果输出是1(严格模式),建议改成2(宽松模式),这样路由器会允许来自非默认路由接口的合法内网流量:

sysctl -w net.ipv4.conf.all.rp_filter=2

同样,要永久生效的话,把这行加到sysctl的配置文件里,再执行sysctl -p。

4. 核对Netplan的LAN接口配置

你只贴了WAN1的配置,LAN接口的配置也得确认下:

  • 每个LAN接口必须配置对应子网的网关IP(比如lan1设192.168.1.1/24,lan2设192.168.2.1/24)
  • LAN接口不要设置默认网关(默认网关只给WAN接口)
  • 子网内的主机,默认网关必须设成对应LAN接口的IP,这样主机的跨子网流量才会先发到路由器

举个LAN接口的Netplan配置示例(你要换成自己的实际接口名和子网):

network:
  ethernets:
    wan1:
      # 你的WAN1现有配置
    wan2:
      # 你的WAN2配置(另一个ISP的地址段)
    lan1:
      addresses: [192.168.1.1/24]
    lan2:
      addresses: [192.168.2.1/24]
    lan3:
      addresses: [192.168.3.1/24]
    lan4:
      addresses: [192.168.4.1/24]
  version: 2

5. 检查NFTables的NAT规则是否“画蛇添足”

如果你给LAN间的流量也加了SNAT/MASQUERADE,那会导致流量异常——内网主机之间的转发根本不需要地址转换,只需要纯路由转发。你要确保NAT表的postrouting链里,只有发往WAN接口的流量才做地址转换,比如:

add rule ip nat postrouting oifname {wan1, wan2} masquerade

绝对不要把LAN接口包含在这条规则里。

你可以按这个顺序一步步排查,大概率在第2步就能解决问题。如果还是不行,可以把你的NFTables完整规则贴出来,我再帮你细化分析。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:03:11