Neko 自托管实战:WebRTC 远程浏览器、多用户权限与公网访问

Neko 自托管实战:WebRTC 远程浏览器、多用户权限与公网访问

前言

有些场景并不需要远程控制整台电脑,只需要一个独立、可共享的浏览器环境。

比如团队一起查看同一个页面、临时访问内网 Web 管理界面,或者希望把浏览器运行环境和本机系统隔离开。传统远程桌面当然也能做到一部分,但它通常暴露的是整个桌面;如果只是为了共享一个浏览器窗口,方案会显得偏重。

Neko 的思路更直接:把 Firefox、Chrome 等浏览器放进 Docker 容器,通过 WebRTC 把画面和声音送到普通网页中,再用管理员和普通用户权限控制谁能操作、谁只能观看。对于已经长期运行 NAS 的用户来说,这种部署方式很适合拿来做一台"浏览器服务"。

本文以 NAS(fnOS)为环境完成一次实际部署。前半部分先把容器、WebRTC 端口、用户权限和多人协作跑通;本地访问确认正常后,如果还需要从外部网络进入,再通过 cpolar 增加公网访问入口。文章重点会放在几个容易影响结果的地方:共享内存、UDP 端口段、NAT 地址、管理员/普通用户权限,以及局域网和公网访问之间的区别。

1.什么是Neko?

Neko(n.eko)是GitHub 20k+⭐的开源自托管虚拟浏览器项目 。它的核心逻辑并不复杂:把完整 Firefox/Chrome 浏览器放在 Docker 容器中运行,使用者只需要打开普通网页,就能看到并操作容器里的浏览器画面,音视频传输依赖 WebRTC。

工作原理

可以把它理解成"浏览器只负责显示,真正运行网页的是 NAS 里的容器"。Docker 容器内部运行微型桌面和浏览器,WebRTC 再把画面、声音实时推送到访问端。

这样做带来的一个直接变化是:网页访问、Cookie、缓存等数据都留在容器环境里,而不是跟当前电脑上的日常浏览器混在一起。多人访问时,大家看到的也是同一个容器浏览器会话。

核心特性

  1. 多用户权限区分:分为管理员、普通用户。管理员掌握鼠标键盘控制权,可以把操作权限交给其他人;普通用户只能观看,不能操作页面。
  2. 多浏览器镜像:官方提供Firefox、Chrome、Edge等镜像,可以按需选择部署。
  3. 容器隔离:浏览痕迹保存在容器环境中,和访问端设备上的日常浏览器分开。
  4. 内置聊天室:接入的用户可以在线文字聊天。
  5. 跨设备访问:电脑、平板、手机,只要有浏览器就能接入,不需要安装客户端。

典型使用场景

  • 团队网页演示、线上评审,多人同步查看同一个网页
  • NAS / 服务器搭建跳板浏览器,访问内网 Web 管理页面
  • 临时使用独立浏览环境,减少和本机浏览数据混用
  • 远程协助时,只共享浏览器而不是整个桌面
  • 需要从局域网之外访问时,再增加公网访问入口

2.前提条件

2.1ssh远程连接到极空间

  • 开启【SSH 服务】
  • 使用终端(Windows PowerShell / Mac Terminal)登录:
shell 复制代码
ssh root@IP

2.2验证docker是否开启

使用命令:

shell 复制代码
docker -v
systemctl status -v

3.安装Neko

docker一键部署

安装Neko:

**Neko 没有固定账号名,昵称随便填,只认密码!**n.eko

  • 管理员权限 :密码 admin1234(你环境变量设置的 NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin1234

  • 普通用户权限 :密码 neko1234NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko1234

  • 注意把 192.168.x.x 替换成你服务器真实内网 IP ,例如 192.168.1.100

参数 说明
docker run -d 创建并启动容器;‑d 后台守护进程运行,不占用当前终端
--name neko 给容器命名为 neko,后续 docker stop/rm neko 直接用名字操作
--shm-size=2gb 设置容器共享内存为 2G。Firefox 必须加此参数,共享内存过小会直接崩溃、黑屏
-p 8085:8080 端口映射 宿主机端口:容器内部端口。8085 是网页访问端口,浏览器访问 http://IP:8085
-p 56200‑56300:56200‑56300/udp UDP 端口段映射,WebRTC 视频流专用,必须 UDP 协议;用于传输浏览器画面音频。端口段内外必须保持一致
‑e NEKO_WEBRTC_EPR=56200‑56300 环境变量,告诉 Neko 容器内部 WebRTC 使用的 UDP 端口范围,必须和上面‑p 映射端口完全一致,不一致直接黑屏
‑e NEKO_WEBRTC_NAT1TO1=192.168.1.100 NAT 穿透地址。内网部署填写宿主机局域网 IP;公网访问填写公网 IP / 域名;严禁写 127.0.0.1,会黑屏看不到画面
‑e NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko1234 普通用户密码:只能观看画面,不能操控浏览器,昵称自定义
‑e NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin1234 管理员密码:拥有鼠标键盘控制权,可以接管浏览器、管理其他用户
ghcr.io/m1k1o/neko/firefox:latest 镜像地址,拉取 firefox 版本 neko;也可以换成 chrome 镜像
shell 复制代码
docker run -d \
  --name neko \
  --shm-size=2gb \
  -p 8085:8080 \
  -p 56200-56300:56200-56300/udp \
  -e NEKO_WEBRTC_EPR=56200-56300 \
  -e NEKO_WEBRTC_NAT1TO1=192.168.1.100 \
  -e NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko1234 \
  -e NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin1234 \
  ghcr.io/m1k1o/neko/firefox:latest

compose版本

shell 复制代码
docker-compose.yml
version: "3"
services:
  neko:
    image: ghcr.io/m1k1o/neko/firefox:latest
    container_name: neko
    ports:
      - "8085:8080"
      - "56200-56300:56200-56300/udp"
    environment:
      NEKO_WEBRTC_EPR: "56200-56300"
      NEKO_WEBRTC_NAT1TO1: "127.0.0.1"
      NEKO_MEMBER_MULTIUSER_USER_PASSWORD: "neko1234"
      NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: "admin1234"

启动:

shell 复制代码
docker-compose up -d

部署完成后,在浏览器中输入 http://极空间IP:8085 就能看到Neko的界面:

4.使用Neko

Neko没有固定账号名,昵称随便填,只认密码!

  • 管理员权限 :密码 admin1234(你环境变量设置的 NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin1234
  • 普通用户权限 :密码 neko1234NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko1234

这里先使用管理员密码登录,确认管理员权限是否正常:

点击右下角切换中文模式:

调节分辨率:

点击页面底部键盘按钮可以获取页面控制权限后,就可以使用浏览器了:

获得控制权限后,就可以直接在容器内的浏览器中进行搜索和网页操作:

接下来我们在打开一个网页,这次我们使用普通用户登录:

普通用户登录后可以看到同一个浏览器画面,但当前键盘控制权仍在管理员手中,因此这里只能观看:

可以实时跟管理员对话:

管理员端也可以看到对应的聊天消息:

打开声音权限即可使用麦克风:

管理员释放键盘控制权限后,普通用户就可以接管浏览器操作:

完成上面的部署后,Neko 的网页入口仍然是局域网地址。如果使用场景只发生在家里或公司内网,到这里已经可以正常使用。

如果还需要让异地设备访问,再继续处理公网这一层。本文后面使用 cpolar 增加外部访问入口,Neko 本身的容器、用户权限和浏览器会话不需要重新部署。

需要注意的是,Neko 的页面访问和 WebRTC 音视频传输是两件相关但不同的事情,因此公网访问时不仅要确认网页能打开,也要继续观察画面和声音是否正常。

5.安装cpolar补充公网访问

5.1 什么是cpolar?

前面的 Neko 已经在 NAS 上正常运行,当前缺少的只是局域网之外的访问路径。

cpolar 在这篇教程中承担的角色比较单一:把本地正在运行的服务映射成公网可以访问的地址。它不会改变 Neko 的管理员密码、普通用户密码、浏览器镜像或 Docker 配置。

5.2 部署cpolar

先确认局域网内的 http://极空间IP:8085 可以正常使用,再继续安装 cpolar。这样如果后面公网访问出现问题,可以先排除 Neko 本身没有启动这一类原因。

以下安装步骤保持原有配置:

使用一键脚本安装命令:

shell 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

shell 复制代码
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

6.配置公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理------创建隧道:

  • 隧道名称:可自定义,本例使用了:neko,注意不要与已有的隧道名称重复
  • 协议:http
  • 本地地址:8085
  • 域名类型:随机域名
  • 地区:选择China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚生成的公网地址。此时可以换到其他网络中的电脑或移动设备进行访问测试。

页面能够打开,说明当前公网地址已经可以访问到 Neko 的 Web 页面。

7.保留固定公网地址

使用cpolar为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择china Top,然后设置一个二级子域名名称,我使用的是neko,大家可以自定义。填写备注信息,点击保留。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理------隧道列表,找到所要配置的隧道,点击右侧的编辑

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China Top

点击更新

更新完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。

最后,再使用配置后的固定公网地址进行访问测试。页面能够正常打开,说明二级子域名已经绑定到当前隧道,后续可以继续使用这个固定入口,而不必依赖前面的随机地址。

总结

Neko 的定位其实很清楚:它不是完整远程桌面的替代品,而是把"浏览器"单独做成一个可以自托管、多人观看和接管操作的服务。

这次部署里,真正影响体验的几个部分都集中在 Neko 本身:Docker 容器是否正常、共享内存是否足够、8085 网页端口是否可用、WebRTC UDP 端口段是否一致,以及 NEKO_WEBRTC_NAT1TO1 是否按当前网络环境填写。管理员和普通用户则通过不同密码区分操作权限,多人进入以后可以看到同一个浏览器会话。

如果只在局域网内使用,Neko 跑通以后就已经够用;只有确实需要异地访问时,再通过 cpolar 增加公网入口,并继续配置固定二级子域名。

从实际用途看,它更适合以下几类场景:共享网页演示、内网 Web 管理入口、独立浏览环境,以及只希望远程共享浏览器而不是整台电脑的情况。

把浏览器运行环境放在 NAS 里之后,访问端设备只负责显示和输入,真正的浏览会话留在容器内部。这个思路比"远程控制整台机器"更轻,也更容易针对单一场景控制权限;但涉及外部网络访问时,仍然需要单独关注账号密码、容器状态和网络暴露范围。

相关推荐
cuijiecheng20181 天前
从 6.49 秒到约 1.9 秒:RK3588上的WebRTC 实时流启动速度优化记录
webrtc
SendTomo2 天前
SendTomo 与 send.wang 全景对比评测与实战指南
网络·网络协议·tcp/ip·webrtc·p2p
java_logo2 天前
Docker 部署 SRS:轻松搭建实时音视频流媒体平台
docker·容器·webrtc·实时音视频·rtmp·http-flv·轩辕镜像
wjcroom3 天前
一个可以在线多人玩的五子棋开发与布署方法-WebRTC和WebSocket的测试方法
websocket·网络协议·webrtc
cuijiecheng20186 天前
RK3588 WebRTC 实时流卡顿优化:从视频桥接到 H.264 PTS 回退
音视频·webrtc·h.264
SendTomo8 天前
send.wang:基于浏览器WebRTC实现无客户端文件互传
网络·python·网络协议·webrtc·p2p
应用市场14 天前
无线控制与图传协议全景:从 S.BUS 到 WebRTC,一篇讲透遥控、数传与视频链路
音视频·webrtc
福大大架构师每日一题14 天前
webrtc-rs/webrtc v0.20.3更新:Android 网络切换后 ICE Restart 卡死约 10 秒的问题终于解决
android·网络·webrtc
SendTomo15 天前
P2P传输中IP交换的可控性实现
webrtc·p2p