飞牛OS (FnOS) + OpenWrt 公网访问避坑:换了路由器 IPv6 就不通?原来是防火墙 Zone 设置在捣鬼
About
🛑 问题背景
作为一名运维折腾党,最近家里网络架构做了一次升级。我把原本的“傻瓜式”小米路由器,换成了性能更强、可玩性更高的 GL.iNet (OpenWrt 系统) 路由器。
我的 NAS 运行的是最近很火的 飞牛 OS (FnOS),上面跑了一些 Docker 服务(比如 Lucky、Nginx 等)。原本在小米路由器下,IPv6 公网访问非常顺畅,结果换了 OpenWrt 后,外网访问全断了。
故障现象非常诡异:
1. 内网正常:在局域网内通过 IPv6 地址访问 FnOS 上的服务完全没问题。
2. IP 正常:在 FnOS 终端输入 ip addr,可以看到网卡已经获取到了 2409 开头的公网 IPv6 地址。
3. 外网全挂:一旦手机断开 WiFi 使用 4G/5G 流量,或者在公司网络访问,死活连不上。
4. 端口转发无效:尝试在 OpenWrt 里设置了通信规则,依然不通。
🕵️♂️ 排查思路 (运维视角)
为了找出病灶,我按照 OSI 模型从下往上排查,整个排查流程如下图所示:
(图:本次故障的完整排查与解决流程)
1. 链路与 IP 检查
首先确认 FnOS 确实拿到了公网 IPv6,且 Docker 容器的网络模式不管是 Bridge 还是 Host,现象都一致。排除 NAS 本身配置问题。
2. 对照实验
为了验证环境,我把网线插回小米路由器,服务瞬间就通了。这直接证明:问题不在宽带运营商,也不在 FnOS,问题 100% 出在 OpenWrt 路由器的设置上。
3. 暴力测试定位
我尝试在 OpenWrt 防火墙设置里,将所有区域的“入站”和“转发”临时全部改成 Accept (接受)。
神奇的事情发生了:外网瞬间可以访问了!
这说明:物理链路是通的,只是被 OpenWrt 的防火墙规则给拦截了。
🛠️ 根本原因:OpenWrt 的 Zone 区域隔离
OpenWrt 的防火墙机制是基于 Zones (区域) 的。这也是它比普通路由器强大的地方,但也更容易“踩坑”。
在 OpenWrt 中,IPv4 的外网接口通常叫 wan,而 IPv6 的外网接口往往是独立的,被标记为 wan6。
核心原因:
虽然我设置了端口放行规则,但 OpenWrt 默认的区域策略里,wan6 所在的区域到 lan 区域的“转发 (Forwarding)”路径是关闭的(Reject)。
这就好比你给客人发了请帖(端口规则),但是小区的保安(Zone 策略)根本不允许那个大门(wan6)的人进入小区(lan),所以数据包在最外层就被丢弃了。
✅ 最终解决方案
既然找到了原因,解决起来就非常简单。我们不需要复杂的命令行,只需要在 LuCI 界面 修改一下区域转发设置。
操作步骤如下:
1. 登录 OpenWrt (GL.iNet) 后台,进入 LuCI 高级设置界面。
2. 点击顶部菜单 Network (网络) -> Firewall (防火墙)。
3. 向下滚动找到 Zones (区域) 列表。
4. 找到包含 IPv6 接口的区域(通常叫 wan 或单独的 wan6)。
- 注意:GL.iNet 或部分 OpenWrt 固件有时会将 IPv6 协议划分在独立的接口名下。
关键修改:
1.点击该区域的 Edit (编辑),或者直接在列表中修改 Forward (转发) 这一栏。
将从 wan/wan6 到 lan 的转发策略,从 Reject (拒绝) 修改为 Accept (接受)。
2. 点击右下角的 Save & Apply (保存并应用)。
效果立竿见影:
保存生效后,手机断开 WiFi,直接通过 IPv6 域名访问家里的飞牛 OS,秒开!
📝 总结
从硬路由迁移到 OpenWrt 玩 NAS,防火墙是最容易“翻车”的地方。
对于 飞牛 OS (FnOS) 这种底层基于 Linux 的系统,IPv6 支持通常都很好。如果你的 IP 都在,但就是外网不通,请一定优先检查路由器的 Zones 转发策略,特别是确认 wan6 接口的数据是否被允许转发到内网 lan。
希望这条经验能帮到同样在折腾 FnOS 和 OpenWrt 的朋友!🚀
#飞牛OS #FnOS #OpenWrt #GLiNet #IPv6 #公网访问 #NAS #运维日记