RVC Next

远程访问与安全

RVC Next 的服务器默认只监听本机(127.0.0.1:7868),只有这台电脑上的浏览器能打开。本页说明怎样让局域网里的其他设备访问,以及服务器为此采取的保护措施。

服务器能删除和移动文件、读取服务器上的音频、打开音频设备。开放给其他电脑时不需要访问令牌,但能连上的人都拥有这些能力,请确认网络可信,或自己加上防火墙、VPN、带身份验证的反向代理等保护;访问令牌可以作为一层可选的保护。

地址与端口

设置命令行选项默认值说明
server.host--host127.0.0.1绑定的地址。0.0.0.0 监听所有 IPv4 网卡,:: 监听所有 IPv6 网卡,也可以写某块网卡的地址
server.port--port7868第一个尝试的端口;--port 0 由系统任选一个空闲端口
server.strict_port--strict-port关端口被占用时直接失败
server.open_browser--open / --no-open开启动后打开浏览器

端口被占用(或属于系统保留范围)时,服务器依次尝试后面的端口,最多 20 个,并在日志中提示 "Port 7868 is unavailable. Using port 7869.";开启 strict_port 时则直接以退出码 3 结束。Web UI 中这些设置在 设置 › 常规 的 服务器地址 和 端口,修改后 下次启动服务器时生效。

允许其他电脑访问

  1. 绑定到所有网卡并启动:

    rvc-next webui --host 0.0.0.0 --no-open

    服务器会在日志中提醒它可以被其他电脑访问:

    Binding to 0.0.0.0 makes the server reachable from other machines.
  2. 在另一台设备的浏览器打开 http://<服务器的 IP>:7868,即可直接使用。

不需要访问令牌:任何能连到这个地址的人都能使用全部功能。如果网络不完全可信,请自己加上保护——防火墙只放行信任的设备、通过 VPN 访问、或放在带身份验证的反向代理之后——也可以设置下文的访问令牌。

访问令牌(可选)

访问令牌是任意足够长的随机字符串,设置后每个浏览器都要先输入它:

rvc-next config set server.access_token "换成你自己的长随机字符串"

设置后,浏览器加载页面时会弹出 访问令牌 对话框("此服务器需要访问令牌。"),输入令牌后点 保存。浏览器把令牌保存在本地存储中,并写入一个名为 rvc_next_token 的 Cookie(用于音频播放和 WebSocket 连接),下次打开不需要再输入。令牌错误或被修改后,对话框会再次出现。

令牌对所有浏览器都生效,包括服务器本机的浏览器:设置令牌后,本机打开 Web UI 同样会要求输入一次。命令行不经过 API,不需要令牌。

防火墙与明文传输

服务器默认只提供 HTTP,令牌和音频都以明文在网络上传输,只适合在可信的局域网中使用;需要加密时配置证书(见下文)或由反向代理提供 HTTPS。操作系统的防火墙可能需要放行这个端口。

令牌的携带方式

设置了令牌后,/api/、/ws/、/openapi.json 和 /docs 下的每个请求都必须携带它,三种方式任选其一:

  • 请求头 Authorization: Bearer <令牌>;
  • Cookie rvc_next_token=<令牌>;
  • 查询参数 ?token=<令牌>。

不需要令牌的只有健康检查 /api/v1/app/health(它告诉页面是否需要令牌)和 Web UI 的静态页面本身。令牌比较使用常量时间比较。用脚本调用 API 的例子:

curl -H "Authorization: Bearer $TOKEN" http://192.168.1.10:7868/api/v1/models

令牌修改后立即生效,不需要重启服务器。

远程浏览器能做什么

设置了令牌时,所有请求都要先通过令牌检查;在此基础上(或没有令牌时),服务器再根据请求是否来自本机决定允许哪些操作:

操作本机浏览器其他电脑
上传音频、转换、分离、训练、实时变声、管理模型、修改设置可以可以
上传训练数据集(从这台电脑添加音频)、下载音色(下载)或结果可以可以:都不需要服务器上的文件夹
浏览服务器文件(服务器文件)、使用服务器路径导入模型或指定数据集可以可以,但只限浏览范围内的文件夹
在文件夹中显示(在服务器的文件管理器中打开)可以不可以("只能在服务器本机的浏览器中使用")

能访问就等于完全控制

能打开 Web UI 的人(设置了令牌时,持有令牌的人)可以修改所有设置(包括浏览范围和文件夹位置)、删除音色和实验。只让你信任的人访问服务器。

浏览范围

Web UI(包括本机浏览器)浏览和使用服务器上的文件时,只能使用 paths.browse_roots 中的文件夹,超出范围的路径会被拒绝(invalid_path)。默认(列表为空)包括:

  • 用户主目录;
  • 已添加的原版 RVC 安装;
  • 数据目录;
  • 所有驱动器(Windows 上的 C:\、D:\ 等),或已挂载的卷(macOS 的 /Volumes/*;Linux 的 /media/<用户>/*、/run/media/<用户>/*、/mnt/*)。系统根目录 / 默认不包括。

开放给其他电脑时,建议把范围收窄到真正需要的文件夹:

rvc-next config set paths.browse_roots '["D:/music", "D:/datasets"]'

或在 设置 › 存储 的 浏览器可打开的文件夹 中每行填一个。设置后只有这些文件夹可以浏览。

命令行不受浏览范围限制:在服务器上运行命令的人本来就能访问这些文件。

来源检查

为防止其他网站借用你的浏览器操作服务器,服务器对每个请求做两项检查:

  • Host 检查:只监听本机时,请求的 Host 必须是 localhost、127.0.0.1、::1 或绑定的地址,否则返回 400(bad_host)。这可以阻止 DNS 重绑定攻击。绑定到非本机地址时不做这项检查。
  • Origin 检查:会修改数据的请求(非 GET/HEAD/OPTIONS)和 WebSocket 连接,如果带有 Origin,它必须与页面自身的地址相同,或列在 server.allowed_origins 中,否则返回 403(bad_origin);没有 Origin 的跨站请求同样被拒绝。

如果你在另一个网页或工具中调用这个 API(例如自己写的前端),把它的来源加入 server.allowed_origins,服务器也会为这些来源开启 CORS(CORS 部分在启动时配置,修改后需要重启):

rvc-next config set server.allowed_origins '["http://localhost:5173"]'

实时变声:服务器的设备或浏览器的设备

实时变声在服务器所在的电脑上运行。选 服务器设备(默认)时,麦克风输入、变声输出和监听都使用这台电脑的音频设备,而不是你打开网页的那台设备。设备面板的标题会写明主机名(<主机名> 上的音频设备),远程访问时还会提示 这些设备属于服务器所在的电脑,而不是此浏览器。 命令行的 rvc-next live devices 同样列出服务器本机的设备。

在实时页顶部选 本浏览器 时,打开网页的手机或电脑的麦克风会发送到服务器,转换后的声音在那台设备上播放(使用本浏览器的麦克风)。浏览器只允许 HTTPS 页面或服务器本机(localhost)上的页面使用麦克风。要从其他电脑使用,请给服务器配置证书:

rvc-next webui --host 0.0.0.0 --ssl-certfile cert.pem --ssl-keyfile key.pem
# 或一次性设置:rvc-next config set server.ssl_certfile /path/cert.pem(以及 server.ssl_keyfile)

自签名证书在浏览器中确认警告后即可使用(openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365 -subj /CN=my-pc)。由反向代理终止 HTTPS 也可以;它除了转发 /ws/ 下的 WebSocket,还需要转发 /api/v1/live/browser-audio。

反向代理

代码没有专门支持在反向代理后运行,也没有可配置的路径前缀。如果确实要这样做,需要注意上面的检查:

  • 服务器只监听本机时,代理转发的 Host 必须是 localhost 或 127.0.0.1(否则 400 bad_host);嵌入 rvc-next 的程序可以用 extra_hosts / allow_host() 允许代理或内网穿透的公网主机名(嵌入);
  • 浏览器发出的 Origin 是代理的地址,与转发后的 Host 不一致,需要把它加入 server.allowed_origins;
  • 需要转发 /ws/ 的 WebSocket 连接,以及 /api/v1/live/browser-audio(浏览器音频);
  • 服务器只把来自回环地址、且 Host 是本机名称(localhost、127.0.0.1、::1)的请求当作本机。代理和服务器在同一台电脑上、又把 Host 改写为 localhost 时,所有访问者都会被当作本机;保留公网主机名的代理和内网穿透则不会。公开到互联网时,请在代理上加身份验证或设置访问令牌。

相关页面

本页目录