一、部署环境信息
服务器:雨云轻量云服务器,公网 IP:103.207.68.92
面板:1Panel v2.2.3,Web 服务:OpenResty
域名:bobneko.netapitest.com,已配置 SSL 证书、HTTPS 自动跳转
部署方式:应用商店一键安装
m1k1o/neko:firefox
二、全程故障现象梳理
阶段 1:反向代理配置语法报错
初始直接粘贴
location / { ... }到自定义配置框,无外层server{}包裹报错提示:
"location" directive is not allowed here解决:补充完整 80 端口 server 块,仅由面板托管 443/SSL,不再手动写 443 监听配置
阶段 2:网页可正常打开,但页面持续加载转圈、左上角提示 Reconnecting
网页 HTTPS 访问正常、证书锁正常,但进入 n.eko 登录界面后无法建立视频连接,反复重连。
阶段 3:排查 UDP 端口监听,发现核心底层缺陷
执行端口监听命令 ss -ulnp | grep 端口段 后发现致命问题:
最初 WebRTC 端口设置 52000-52100,容器仅监听
127.0.0.1:52000,未对外绑定0.0.0.0更换低端口 40000-40100 规避运营商高位 UDP 封禁后,监听地址依旧锁定
127.0.0.1:40000仅重启容器无法刷新 Docker 端口映射,重建容器后监听地址仍无变化,公网 UDP 数据流无法进入容器
阶段 4:更换浏览器测试,出现Disconnected peer failed连接失败
切换 Firefox 浏览器排除 Chrome 插件拦截后,直接提示对等连接失败,代表 WebRTC NAT 穿透完全失效,无法建立视频通道。
三、已做全部排障操作(均未解决底层问题)
防火墙双端放行 UDP 端口
雨云云防火墙:先后放行 52000-52100、40000-40100 UDP
1Panel 内置 ufw 防火墙:同步添加对应 UDP 端口段,并重启防火墙重载规则
Neko 参数完整规范配置
NAT1to1 IP 填写服务器公网 IP 103.207.68.92
Web 访问地址填写完整 HTTPS 域名
https://bobneko.netapitest.comICELite 模式开启(值 = 1)
补充谷歌公网 STUN 穿透服务器
stun:stun.l.google.com:19302降低分辨率至 1280x720@30,视频码率下调至 1500 减少带宽压力
容器操作:多次重启、重建 Neko 容器
浏览器侧排查:无痕窗口、更换 Firefox、关闭全部广告 / 代理扩展
Web 服务侧:修正 OpenResty 反向代理语法,面板正常托管 SSL 证书
四、失败根本原因
1Panel 一键 Neko 容器模板存在底层 BUG
应用商店封装的容器,WebRTC UDP 端口段会强制仅监听本地回环
127.0.0.1,Docker-proxy 不会生成全网0.0.0.0端口转发规则,无论修改参数、重启、重建容器都无法对外暴露 UDP 端口,公网无法传输 WebRTC 视频流。WebRTC 协议对网络环境要求苛刻
国内家用宽带多层 NAT、运营商高位 UDP 端口封禁,即便端口正常放行,若无独立 STUN/TURN 服务器也极易出现
peer failed连接失败,部署门槛高。面板一键部署高度封装,无自定义 Docker 端口映射入口
面板可视化参数仅能修改容器内环境变量,无法手动控制宿主机与容器 UDP 端口转发规则,无法绕开模板自带的监听限制。
五、两种可行替代方案(本次放弃部署,记录备用)
方案 1:脱离 1Panel 一键模板,手动 Docker 命令部署
使用原生docker run手动指定宿主机 UDP 端口映射,强制绑定0.0.0.0全网监听,完整配置环境变量,规避面板模板端口限制。
方案 2:更换无 UDP 依赖的远程桌面工具(推荐)
放弃 WebRTC 架构的 n.eko,改用 noVNC,全程仅依赖 TCP 80/443 端口,无需配置 UDP 穿透,无 NAT 连接失败问题,部署、维护难度更低。
六、本次收尾清理操作
卸载 1Panel 应用商店 Neko 容器,勾选删除镜像、容器数据
网站配置文件填充最简空 server 模板,保留站点、域名、SSL 证书不删除
清理防火墙规则:雨云后台、1Panel 防火墙删除 40000-40100 UDP 放行规则
域名解析保留,后续可复用站点部署其他服务
