跳过正文
  1. Posts/

UPnP 双路由桥接:让下级设备的端口映射活过来

·2500 字·5 分钟
yunshu
作者
yunshu
热爱技术,热爱生活
目录

多路由器家庭应该都懂那种痛。

主路由拨号上网,客厅再挂一个二级路由——布局合理、信号全覆盖、全家都开心。然后呢?你打开 PS5 一看:NAT 类型——严格。BT 下载那个小黄灯亮得跟太阳一样,P2P 连不上,游戏语音丢包丢到队友以为你在火星。明明带宽够了,设备也不差,就是被两层 NAT 卡得死死的。

UPnP Bridge Relay 就是来收拾这个烂摊子的。它跑在 OpenWrt 上,把下级路由的 UPnP 端口映射请求自动桥接到上级主路由,让躲在二级路由后面的设备也能被外面正常访问到。简单说:下级设备喊「我要开个门」,它帮你去主路由那里把门打开。

封面图:版画风格,一座小桥连接两台路由器,左边的路由器下面画着 PS5/游戏机/NAS,右边的路由器连着互联网云朵图标,桥上有 UPnP 字样的小旗子,木刻版画的线条质感和纹理,整体色调温暖复古,适合技术博客封面

二级路由到底把你害得有多惨
#

先搞清楚问题在哪,不然装了半天不知道自己在救什么火。

普通家庭网络长这样:

互联网 → 光猫 → 主路由(拨号)→ 各种设备

很干净,一层 NAT,UPnP 正常工作。PS5 开个端口映射,主路由乖乖照办,NAT 类型轻松拿到「开放」或者至少「中等」。

但很多人家里实际是这样的:

互联网 → 光猫 → 主路由(拨号)→ 二级路由 → 各种设备

问题来了:你的 PS5 连着二级路由,它向二级路由申请 UPnP 映射,二级路由也答应了——但主路由根本不知道这事。主路由眼里,所有二级路由后面的设备都挤在一个内网 IP 后面,谁是谁都分不清,更别说给它们单独开端口了。结果就是 NAT 严格、P2P 残废、联机靠缘分。

双 NAT 问题示意图:简洁的信息图风格,左侧互联网云朵,中间主路由(标注 NAT 1),右侧二级路由(标注 NAT 2),二级路由下面连接着 PS5/NAS/PC 等设备。从 PS5 出发的箭头指向二级路由再指向主路由,但箭头在主路由处被打了个红叉,旁边标注文字「UPnP 请求无法穿透」。配色蓝白为主,线条清晰

UPnP Bridge Relay 干了什么
#

名字挺唬人的,其实逻辑很朴素,就三步:

  1. 盯着下级路由:定时读取下级路由上的 UPnP 映射列表(通过 miniupnpc),看看有哪些设备申请了端口。
  2. 过滤一下:不是什么端口都往主路由上开——只放行你觉得靠谱的映射,规则你自己定。
  3. 桥接到主路由:把过滤后的映射转成 nftables DNAT 规则,直接写进主路由的防火墙。主路由收到外部请求后,按规则把流量转发给二级路由后面的设备。

就这么简单。不是什么黑科技,就是一个帮你在两台路由之间传话的小跑腿。但这个过程本来该你自己手动搞——每次 PS5 换端口都要 SSH 进主路由改 iptables,想想就窒息。

UPnP Bridge Relay 工作流程图:三栏式信息图,第一栏「读取」图标是放大镜看路由,第二栏「过滤」图标是漏斗筛选,第三栏「桥接」图标是箭头桥接。底部是完整的 OpenWrt LuCI 界面预览图风格,蓝白配色

安装,简单到有点无聊
#

项目地址:UPnP Bridge Relay

一个包搞定:luci-app-upnp-bridge-relay 包含核心服务、LuCI 网页管理界面和中文翻译,不用分开装。在 OpenWrt 上装就行:

# OpenWrt 24.10 / 23.05 (opkg)
opkg install luci-app-upnp-bridge-relay_*.ipk

# OpenWrt 25.12+ (apk)
apk add --allow-untrusted ./luci-app-upnp-bridge-relay*.apk

装完之后刷新一下 LuCI 页面,就能在「服务」菜单下面看到 UPnP Bridge Relay 了。依赖会自动拉上:miniupnpcnftablesuciubusrpcdluci-base——都是 OpenWrt 上本来就该有的东西,不会给你塞一堆莫名其妙的新依赖。这点我很满意,有的工具装一个带八个,跟搬家似的,烦死了。

对了,fw3 / iptables-only 的老系统不支持哦。都什么年代了,该换 fw4 + nftables 啦~

LuCI 界面主页面截图:OpenWrt LuCI 管理界面,“服务"菜单下 UPnP Bridge Relay 的入口页面,显示整体状态概览——服务运行状态指示灯(绿色)、当前映射数量、最近同步时间、上下级路由 IP 信息。界面简洁清晰

新手引导:跟着向导走就行
#

第一次用的时候,强烈建议走向导(Wizard)。别觉得自己是高手就可以跳过——我知道你很厉害,但这个向导是真的有用,不是那种「点下一步就行」的敷衍货。

向导会带你完成几件事:

  1. 配置下级路由:填下级路由的 IP、UPnP 服务端口、连接超时时间。
  2. 配置上级接口:选主路由上用来接收外部流量的 WAN 接口。
  3. 安全过滤:设端口范围白名单,比如只放行 1024-65535,别让 80/443 这种敏感端口溜出去。
  4. 连通性检测:自动测试下级路由 UPnP 能不能正常读到、主路由 nftables 能不能正常写入。

最后一步检测不过关的话,向导不会让你强行开启的——这个设计就很懂事。有些工具向导做完检测失败了照样让你「确定启用」,然后你对着报错日志发呆。哼,我不干这种事。

向导界面截图:LuCI 风格的向导页面,分步骤显示——Step 1 填写下级路由IP和端口,Step 2 选择上级WAN接口(下拉菜单),Step 3 填写端口白名单范围,Step 4 显示连通性检测结果(绿色对勾表示通过),底部有"完成并启用"按钮

诊断工具:出问题了别慌
#

网络这东西,配的时候好好的,过两天就不行了——这不是你的问题,是网络的日常。所以我塞了几个诊断工具进去,出问题的时候别对着屏幕发呆。

诊断页面会检查:

  • 下级路由连通性:miniupnpc 能不能正常读到映射列表。
  • nftables 规则状态:你写的 DNAT 规则是不是真的在主路由上生效了。
  • 路由表健康度:默认路由有没有绑错接口、转发路径正不正常。
  • OpenClash 规则:如果有的话,RETURN 规则写没写进去。

每个检查项旁边有绿色 OK 或者红色警告。看到红色的话,点一下就能展开详细信息——不用你去 /tmp 里翻日志,我都给你整理好了。贴心不?我觉得挺贴心的,毕竟我自己也是那个翻日志翻到崩溃的人。

诊断页面截图:LuCI 风格的诊断页面,列表式展示各项检查结果——下级路由连通性(绿色对勾)、nftables 规则状态(绿色对勾)、路由表健康度(绿色对勾)、OpenClash 规则(绿色对勾),旁边有"重新检测"和"回滚"按钮。色调以蓝白为主

OpenClash 用户看这里
#

如果你在主路由上跑了 OpenClash,那必须要多一步配置,不然流量会被 Clash 吞掉,UPnP 映射等于白做。

UPnP Bridge Relay 会自动给入站流量打 RETURN 标记,让 OpenClash 放行——也就是告诉 Clash:「这条流量你别管,让它直通」。配置里有个 openclash_auto_restart 选项,打开之后写完 RETURN 规则会自动重启 OpenClash 让规则生效。

不过说实话,自动重启 OpenClash 这件事我还是有点心虚的——毕竟重启的那几秒钟你的代理会断。所以我默认把它关了,让你自己决定要不要开。技术工具要有边界感,不能替你决定一切,对吧~

OpenClash 集成示意图:简洁的技术图示,左侧是互联网图标,中间是 OpenWrt 主路由,内部画了两个流向——上方流向标注「代理流量 → OpenClash」,下方流向标注「UPnP 入站流量 → RETURN 直通」。箭头颜色不同以示区分

一些小提醒,收好不谢
#

端口白名单要认真设。 默认放行 40000-65535 端口——这个范围已经够日常用了,但如果你有特殊需求可以自己调。别把 22、80、443 这些管理端口映射出去,不然你的路由器就变成全网的公共厕所了,谁都来逛一圈。

下级路由的 UPnP 必须先开好。 UPnP Bridge Relay 是桥接工具,不是 UPnP 服务本身——它不会替你开启下级路由的 UPnP 功能。下级路由 UPnP 没开的话,桥接到的只有空气,工具会报「读不到映射」,不是工具的锅。

别把上下级关系搞反。 这工具跑在主路由上,把下级路由的映射桥接过来。如果你把 IP 填反了,工具会坚定地告诉你连不上。它不会猜你的心思,也不会帮你自动纠正——我很尊重你的自由意志,哪怕这个意志是个 typo。

定期看看诊断页面。 网络环境是会变的,固件升级、配置改动、运营商搞事情,都可能导致之前好好的映射突然失效。偶尔去诊断页面逛一圈,比出问题了再抓狂好得多。防患于未然嘛,老话了,但老话之所以是老话就是因为它对~

最后说两句
#

这个工具的诞生原因其实很朴素:我自己家里就是双路由,我自己游戏机联机就是卡,我自己折腾了半年手动改 iptables 终于受不了了——于是就写了它。

它不炫、不快、不是什么改变世界的产品。但它能让你家的 PS5 从 NAT 严格变成开放,能让你的 BT 下载从黄灯变绿灯,能让你的 P2P 联机不再「正在搜索玩家……搜索超时」。这就够了。

开源,GPLv3 License,能用能改,但改了就得开源哦。Star 当然也是欢迎的——虽然说出来显得有点功利,但写开源嘛,没人搭理真的很寂寞的,哼~

去试试吧!你的 PS5 在等你救它。


UPnP Bridge Relay on GitHub

相关文章