树莓派4B自建网页服务器指南(6.1)· 番外篇:IPv6 直连的生产化防火墙补完(参考方案)
⚠️ 前置声明(必读)
1. 合规红线
国内三大运营商(电信/联通/移动)家庭宽带用户协议均明确约定:家庭宽带不得用于经营性活动,不得私自架设面向公众的服务器。IPv6 直连在技术上能够实现公网访问(第六篇已验证),但技术可行 ≠ 合规允许长期运行未备案的自有服务。本番外所讨论的方案,均建立在“自用、非经营、非面向公众”的前提之下。若你计划将服务开放给非家庭成员或用于商业目的,请务必转向第七篇的 ECS 反代方案并完成 ICP 备案。
2. 番外定位
本番外是参考方案,非专栏主推。专栏的主推生产方案始终是第七篇的 ECS 反代(pi.jiejinx.cnA→ECS:443 → proxy_pass → 树莓派),它具备备案合规、入口收敛、带宽可控等优势。
IPv6 直连在专栏体系中的定位是:
- 第6篇:验证链路连通性的手段
- 第7篇:退化为 ECS 回源的私有通道 + 大流量(网盘/文件同步)的辅助入口
本番外主要面向那些明知合规风险、仍希望在自用场景下长期运行 IPv6 直连(如家庭网盘、大文件传输) 的读者,提供一套能将防火墙颗粒度补到家用天花板的参考方案。
3. 不承诺安全性
网络安全是动态对抗的过程。本番外提供的方案仅能提升攻击门槛(从“菜市场”提升到“有锁的门”),无法做到企业级(物理防火墙 + WAF + 堡垒机 + 态势感知)的全面防护。
任何将设备暴露于公网的行为都存在固有风险,需自行把控斟酌。
一、问题复现与诊断
1.1 第六篇验证期的结论回顾
第六篇的验证结果可以概括为三句话:
| 光猫 IPv6 SPI | 路由器 IPv6 防火墙 | 公网访问结果 |
|---|---|---|
| 关 | 低 | ✅ 通(手机 4G/5G 可访问) |
| 关 | 高 | ❌ 不通 |
| 开 | 低 | ❌ 不通(光猫先拦) |
关键发现:
光猫路由模式下,路由器在二级网关位置仍能充当 IPv6 过滤网。“高”= 全拦,“低”= 全放,没有中间档位。
1.2 家用防火墙的“二档困境”
中兴 E2633 这类运营商定制路由器的 IPv6 防火墙只有两个选项:
- 高(推荐):WAN→LAN 的 IPv6 入站全拦 → 树莓派 pi-ddns不通,ECS 反代回源也断
- 低:WAN→LAN 的 IPv6 入站全放 → 树莓派通了,但同路由器下的电脑/手机 IPv6 也全暴露
没有“仅放行特定设备(树莓派)的特定端口(9133/8080),其余 WAN IPv6 入站拒”的第三档。
这是运营商定制固件在产品定义上的取舍——目标用户是“能上网就行”,不是“要写 IPv6 ACL 的树莓派玩家”。
1.3 第六篇现网方案的暴露面
第六篇验证期(几天到几周)采用“光猫低 + 中兴低 + 树莓派 ufw”是够用的,因为:
- 验证期短,攻击窗口窄
- 公网唯一暴露的入口是 pi-ddns.jiejinx.cn:9133,ufw 守门
- 电脑/手机依赖自身默认防火墙
但若长期(数月到数年)将 IPv6 直连作为网盘/大流量入口,暴露面问题就会凸显:
- 路由器“低”档位下,电脑的 3389/Redis/MySQL/Docker 端口虽被 Windows 默认防火墙挡了大部分,但开发工具链(Vite/Docker 等)可能自动加 0.0.0.0映射规则,进而放行端口,成为短板
- 光猫 superuser 通用款若未改,管理口 IPv6 若 Listen,公网可扫到并爆入光猫 → 家宽整段失守
- 树莓派 ufw 只能守树莓派自己,管不到同路由下其他设备
所以,IPv6 直连要长期跑,核心就是解决“路由器这层只有高/低二档”的瓶颈。
二、方案 A:刷 OpenWrt 拿 nftables 粒度(推荐参考)
2.1 设备选择
| 设备 | 芯片 | 成本 | OpenWrt 支持度 | 推荐场景 |
|---|---|---|---|---|
| 旧中兴 E2633(移动合约期满) | MT7981 | 0 元(已买断) | ✅ ImmortalWrt 有对应 DTS,社区热度中等 | 折腾优先,刷不成再换 |
| 红米 AX6000 | MT7986 | ≈250 元 | ✅ 主线成熟,ImmortalWrt 稳定分支,教程多 | 省心优先,刷机风险低 |
| 其他 MT7981/MT7986 机型 | — | 200-400 元 | 视具体型号 | 按预算选 |
💡 推荐策略:旧路由器 (如E2633) 在不继续日常使用的前提下先试刷(0 元成本),能刷则用,刷不成再买红米 AX6000。
2.2 刷机路径概要(方向指引,非完整教程)
⚠️ 不同批次/固件版本的 E2633 锁的程度不同,以下路径适用于“能开 telnet”的批次。开不了 telnet 的批次只能当 AP 用,请跳转 第三节方案 B 或 承受低防护暴露风险。
- 开 telnet:搜索“ZXHN E2633 telnet 开启”或“中兴路由器 telnet 漏洞”,利用特定 URL 或固件版本漏洞开启 telnet 服务
- 备份原固件:telnet 进后,用 mtd命令 dump 全部分区(尤其 bootloader+ firmware+ art/factory),保存到本地。变砖时 TTL 救砖必备
- 解锁 bootloader:中兴定制款 u-boot 通常有签名校验,需用 zcu.py等工具解锁,才能刷入第三方固件
- 刷入 ImmortalWrt:从 uboot 下用 tftpboot 刷入 openwrt-mediatek-mt7981-zxhn_e2633-initramfs-kernel.bin,启动后 sysupgrade刷 squashfs 正式固件
- 验证 nftables:nft list tables应能看到 inet filter表,确认 FORWARD 链可自定义
💡 红米 AX6000 刷机更简单:解锁 SSH → 刷入 Uboot(mt7986_redmi_ax6000-stock)→ 刷 ImmortalWrt,教程在 OpenWrt 论坛和恩山无线论坛有大量参考。
2.3 nftables 规则集(核心)
刷完 OpenWrt 后,在 /etc/nftables.d/下新建规则文件(或直接编辑 /etc/config/firewall),实现“非树莓派 IPv6 的 WAN 入站流量直接拒绝”。
# /etc/nftables.d/99-ipv6-forward-filter.conf
table inet filter {
# 树莓派 IPv6 地址(请替换为你的实际地址)
# 注意:树莓派 IPv6 会变,需配合 2.4 节的自动化同步
set raspberry_pi_v6 {
type ipv6_addr
elements = { 2409:8a7c:xxxx:xxxx:xxxx:xxxx:xxxx:1332 }
}
chain forward_wan_to_lan {
# 默认策略:drop(WAN→LAN 的 IPv6 转发默认拒绝)
type filter hook forward priority 0; policy drop;
# 1. 目的地址不是树莓派 → 直接拒(电脑/手机的 WAN 入站边都摸不到)
ip6 daddr != @raspberry_pi_v6 reject with icmpv6 port-unreachable
# 2. 目的地址是树莓派 → 按端口放行
ip6 daddr @raspberry_pi_v6 tcp dport 9133 accept # ECS 反代回源
ip6 daddr @raspberry_pi_v6 tcp dport 8080 accept # 网盘(陌生 IP 宿命)
# 3. 其他到树莓派的流量(保险,冗余规则)
ip6 daddr @raspberry_pi_v6 reject
}
}效果:
- 公网 IPv6 包目的 = 树莓派 → 进 FORWARD 链,按端口放 9133/8080
- 公网 IPv6 包目的 = 电脑/手机 → FORWARD 链第一行即 reject,连设备自身的防火墙都到不了
- 同 WiFi / 局域网(LAN→LAN)不受影响
- 设备出网(LAN→WAN)不受影响
2.4 树莓派 IPv6 变化时的自动同步
光猫重拨或运营商重分 PD 会导致树莓派 IPv6 变化,nftables 中的 elements需要同步更新。推荐以下方案:
方案 A(推荐):路由器侧 ddns-go + nft sets 动态更新
在 OpenWrt 上安装 ddns-go,配置其监控 pi-ddns.jiejinx.cn的 AAAA 记录。当 AAAA 记录的 IPv6 地址发生变化时,通过 ddns-go 的 Webhook 或自定义脚本触发 nftables 更新:
#!/bin/sh
# /usr/local/bin/update_nft_raspberry.sh
# 由 ddns-go Webhook 调用,传入新 IPv6 地址作为参数
NEW_IPV6=$1
if [ -z "$NEW_IPV6" ]; then
logger -t update_nft "Error: no IPv6 provided"
exit 1
fi
# 更新 nftables set
nft flush set inet filter raspberry_pi_v6
nft add element inet filter raspberry_pi_v6 { $NEW_IPV6 }
logger -t update_nft "Updated raspberry_pi_v6 to $NEW_IPV6"方案 B:树莓派侧 ddns-go Webhook 触发路由器 SSH
树莓派上的 ddns-go 在更新 AAAA 记录成功后,执行一条 SSH 命令到路由器更新 nftables。需配置树莓派到路由器的 SSH 免密登录。
# 树莓派侧 ddns-go 的 Webhook 命令(在 ddns-go 配置页设置)
ssh openwrt-router 'nft flush set inet filter raspberry_pi_v6 && nft add element inet filter raspberry_pi_v6 { '"$NEW_IPV6"' }'方案 C(懒人):cron 每分钟检测
树莓派侧写一个 cron 脚本,每分钟检测自身 IPv6 地址,若变化则通过 SSH 通知路由器更新。简单但效率较低。
三、方案 B:光猫 DMZ / 端口映射变通(妥协解,不推荐)
3.1 原理
部分光猫在路由模式下提供“IPv6 DMZ”(将 WAN 侧 IPv6 入站全部转发到指定的 LAN 侧 IPv6 地址)或“IPv6 端口映射”(将 WAN 侧的特定端口转发到 LAN 侧特定设备的特定端口)。
3.2 局限性
| 项目 | 说明 |
|---|---|
| DMZ | 树莓派全端口暴露给 WAN IPv6,比路由器“低”档位更裸(光猫层不拦了,树莓派 ufw 是唯一防线) |
| 端口映射 | 理论上只放 9133/8080,但运营商定制光猫的 IPv6 端口映射入口多数没有(中兴/华为光猫 Web 里藏得深或直接阉割) |
| superuser 依赖 | 配置 IPv6 端口映射通常需要 superuser 权限(通用款可进),但光猫 superuser 密码未改的话,这本身又是风险点 |
| 配置持久化 | 光猫固件可能被运营商 ACS Push 重置,映射规则会丢 |
3.3 结论
方案 B 仅适用于“旧中兴刷不了 OpenWrt + 光猫恰好有 IPv6 端口映射入口 + 愿意接受光猫 superuser 通用款风险”的读者。不推荐作为首选。
若方案 A 和方案 B 都走不通,请退回第6篇方案(光猫低 + 中兴低 + 树莓派 ufw + 电脑自查),接受暴露面。
四、方案对比与选择建议
| 场景 | 推荐路径 | 成本 | 防火墙粒度 | 折腾度 |
|---|---|---|---|---|
| 旧 E2633 能刷 OpenWrt | 方案 A(旧中兴刷机) | 0 元 | ✅ 高(nftables FORWARD) | 中高 |
| 旧 E2633 刷不成 + 愿花 250 | 方案 A(红米 AX6000 刷机) | ≈250 元 | ✅ 高(nftables FORWARD) | 中 |
| 旧 E2633 刷不成 + 不愿花钱 | 退守第六篇现网 | 0 元 | ⚠️ 低(路由器低+ufw) | 低 |
| 完全不想折腾防火墙 | 第七篇 ECS 反代(主推) | 99 元/年 | — | 低(ECS 侧配置) |
五、运维自动化要点
无论采用方案 A 还是退守第六篇现网,以下自动化措施建议落实:
| 项目 | 工具/方法 | 说明 |
|---|---|---|
| IPv6 变化 → DNS 更新 | ddns-go(树莓派侧) | 第五篇已配置,持续运行 |
| IPv6 变化 → 路由器防火墙同步 | 见 2.4 节方案 A/B | 仅方案 A 需要 |
| 证书自动续期 | acme.sh cron | 第六篇已配置,持续运行 |
| 树莓派 ufw 日志监控 | logwatch / 手动 | 可选,建议每月扫一眼 /var/log/ufw.log |
| 光猫 superuser 密码 / 管理口 IPv6 检查 | 手动(每半年) | 确认未被 ACS Push 重置 |
六、底线重申
⚠️ 合规底线(再次强调) 家宽 80/443 端口被封是运营商硬件层的限制,非标端口(9133/8080)在技术上能通,不等于合规允许长期运行未备案的自有服务 本番外的所有方案均以“自用、非经营、非面向公众”为前提。若你的服务需要对外开放(如分享给非家庭成员、用于商业演示),请务必转向第7篇的 ECS 反代方案并完成 ICP 备案 本番外不承诺合规性,读者需自行把控斟酌
**技术底线(即使防火墙粒度补上,也不能省的基础防护) **
即使你成功刷了 OpenWrt、写好了 nftables 规则,以下基础防护仍不可或缺:
| 层面 | 措施 | 对应章节 |
|---|---|---|
| 树莓派 | ufw(deny + 22+9133+8080) | 第六篇 6.4 |
| 树莓派 | fail2ban(防 SSH 爆破) | 第六篇 6.4 扩展 |
| 树莓派 | SSH key-only(禁密码登录) | 第六篇 6.4 扩展 |
| 树莓派 | acme.sh 泛域名 HTTPS(受信证书) | 第六篇 3.3 |
| 电脑侧 | wf.msc 自查 3389/Redis/MySQL/Docker/Vite | 第六篇 6.1 电脑段 |
| 光猫侧 | superuser 密码改 16 位+ | 第六篇 6.1 |
| 光猫侧 | 管理口 IPv6 关 | 第六篇 6.1 |
| 光猫侧 | TR-069 可选关(配置稳优先)或留(售后兜底优先) | 第六篇 6.1 |
七、本番外与第7篇的关系
| 篇章 | 定位 | 公网入口 | 合规状态 | 适用场景 |
|---|---|---|---|---|
| 第6篇 | IPv6 直连验证 | pi-ddns:9133 | 测试态,短期可接受 | 验证链路连通性 |
| 6.1 番外 | IPv6 直连防火墙补完(参考) | pi-ddns:9133/8080 | ⚠️ 参考方案,需自行把控 | 自用网盘/大流量长期跑 |
| 第7篇(主推) | ECS 反代生产方案 | pi.jiejinx.cn:443(A→ECS) | ✅ 备案合规 | 专栏主页/小流量/对外服务 |
IPv6 直连的“香”(家宽上传 30-50Mbps vs ECS 3M)是真实的,但它的“苦”(防火墙二档困境 + 合规摩擦)也是真实的。
本番外帮你提出把防火墙这层补到家用天花板的思路,但合规那层需要你自己权衡。专栏主推的、能安心的方案,永远是第7篇的 ECS 反代。