远程连接
大多数情况下,这适用于那些想在手机上使用 SillyTavern,同时由 PC 在同一 WiFi 网络内运行 ST 服务器的用户。
它也是允许从本地网络之外发起远程连接的第一步。
你不应使用端口转发将 ST 服务器暴露到互联网。请改用 VPN 或诸如 Cloudflare Zero Trust、ngrok 或 Tailscale 之类的隧道服务。更多信息请参阅 VPN 与隧道 指南。
免责声明
在未首先确保采取适当安全措施的情况下,切勿将任何实例部署在开放互联网上。
对于因安全措施配置不当或不足而导致未经授权访问所造成的任何损害或损失,我们概不负责。
允许远程连接
默认情况下,ST 服务器仅接受来自运行它的那台机器(localhost)的连接。要让其监听来自其他设备的连接,请将 config.yaml 中的 listen 选项设置为 true。
如果你直接在 SillyTavern 文件夹中搜索 config.yaml,可能会找到两个文件。
本文档中对 config.yaml 的所有修改,均指 SillyTavern 根目录下的那个(/SillyTavern/config.yaml),而不是 /SillyTavern/default/config.yaml。
# Listen for incoming connections
listen: true
当 ST 正在监听远程连接时,你会在控制台中看到此消息:
SillyTavern is listening on IPv4: 0.0.0.0:8000
以及关于其含义的一些说明。
当 ST 未 监听远程连接时,你会在控制台中看到此消息:
SillyTavern is listening on IPv4: 127.0.0.1:8000
访问控制配置
启用远程连接监听后,你必须至少配置一种访问控制方式。否则,服务器将无法启动。
基于白名单的访问控制
要启用基于白名单的访问控制,请编辑 SillyTavern 根目录下的 config.yaml 文件(/SillyTavern/config.yaml):
- 至少启动一次 SillyTavern,以生成必要的配置文件。
- 在文本编辑器中打开
/SillyTavern/config.yaml。 - 找到
whitelist部分,并添加你希望允许的 IP 地址:- 每个地址单独列出。
- 确保包含
127.0.0.1,否则你将无法从主机本身连接。 - 支持单个 IP、CIDR 掩码(例如
10.0.0.0/24)以及通配符(*)范围。
- 保存
config.yaml文件。 - 重启你的 SillyTavern 服务器。
config.yaml 白名单配置示例
-
允许本地网络上的任何设备:
whitelist: - ::1 - 127.0.0.1 - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16如果不确定本地网络的地址范围,请使用上面的白名单。
-
允许两个特定设备连接:
whitelist: - ::1 - 127.0.0.1 - 192.168.0.2 - 192.168.0.5 -
允许
192.168.0.*子网上的任何设备连接:whitelist: - ::1 - 127.0.0.1 - 192.168.0.* -
允许所有 IPv4 设备进行网络连接:
whitelist: - 0.0.0.0/0
禁用基于白名单的访问控制
要禁用基于白名单的访问控制:
- 将
/SillyTavern/config.yaml中的whitelistMode设置为false。 - 删除或重命名 SillyTavern 基础安装文件夹中的
whitelist.txt(如果存在)。 - 重启你的 SillyTavern 服务器。
不推荐:使用 whitelist.txt
如果 whitelist.txt 存在,它的优先级高于 config.yaml 中的白名单设置。
然而,由于所有其他配置都在 config.yaml 中管理,且 whitelist.txt 可能遇到权限问题或被锁定,系统可能会静默回退到使用 config.yaml 中的白名单。
直接编辑 config.yaml 既更简单也更可靠。
如果你仍倾向于使用 whitelist.txt:
- 在 SillyTavern 基础安装文件夹中创建一个名为
whitelist.txt的新文本文件。 - 在文本编辑器中打开它,并添加允许的 IP 地址。
- 保存文件并重启你的 SillyTavern 服务器。
whitelist.txt 配置示例
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
127.0.0.1
::1
这允许本地网络上的任何设备连接。
通过 HTTP 基础认证进行访问控制
HTTP 基础认证并不提供强安全性。
它没有速率限制来防止暴力破解攻击。如果对此有顾虑,建议使用带有 TLS 和速率限制的反向代理,以及一个专门的认证服务。
每当客户端通过 HTTP 连接时,服务器都会要求输入用户名和密码。这仅在启用了远程连接(listen: true)时才有效。
要启用 HTTP 基础认证,请在 SillyTavern 基础目录中打开 config.yaml 并搜索 basicAuthMode。将 basicAuthMode 设置为 true,并设置用户名和密码。注意:只有 ST 至少执行过一次后,config.yaml 才会存在。
basicAuthMode: true
basicAuthUser:
username: "MyUsername"
password: "MyPassword"
你也可以按如下方式启用基础认证:
basicAuthMode: true
enableUserAccounts: true
perUserBasicAuth: true
在此 perUserBasicAuth 模式下,基础认证的用户名和密码将与任何设置了密码的有效多用户账户相同。此外,SillyTavern 会直接登录到该账户。在启用 perUserBasicAuth 之前,请确保你已拥有一个带密码的账户。
保存文件,如果 SillyTavern 已在运行则重启它。连接到 ST 时,系统会提示你输入用户名和密码。用户名和密码均以明文传输。如果你对此有顾虑,可以通过 HTTPS 提供 ST 服务。
私有地址白名单
虽然默认情况下允许服务器向私有 IP 范围(例如 192.168.x.x、10.x.x.x)内的地址发起出站 HTTP 请求,但你可以使用白名单配置将访问限制在特定的私有地址。当你在本地网络上运行了一个私有 API,希望允许 ST 访问它,同时又想阻止 ST 访问本地网络上的其他设备时,推荐此做法。
哪些地址被视为“私有地址”?
- 回环地址:IPv4 为
127.0.0.0/8,IPv6 为::1/128。 - IPv4 私有地址范围:A 类(
10.0.0.0/8)、B 类(172.16.0.0/12)、C 类(192.168.0.0/16)。 - 链路本地地址:IPv4 为
169.254.0.0/16,IPv6 为fe80::/10。 - 唯一本地地址:IPv6 为
fc00::/7。
切换私有地址白名单
要启用私有地址白名单,请编辑 SillyTavern 根目录下的 config.yaml 文件:
privateAddressWhitelist:
enabled: true
将私有地址添加到白名单
默认情况下,这仅允许从服务器向回环地址(127.0.0.1 和 ::1)发起请求。要向白名单添加更多私有地址,请将它们放入 privateAddressWhitelist.allowedRanges 部分:
privateAddressWhitelist:
allowedRanges:
- "127.0.0.0/8"
- "::1/128"
- "192.168.0.0/16"
此示例允许从服务器向 192.168.x.x 范围内的任何地址以及回环地址发起请求,同时仍然阻止访问其他私有 IP 范围。
主机白名单
在未使用 HTTPS 的网络上托管服务器时,强烈建议启用请求主机验证。这有助于防范各种攻击,例如 DNS 重绑定。默认情况下,SillyTavern 服务器会在首次收到来自未识别主机的连接时在控制台输出一条消息。
切换主机白名单
要启用主机白名单,请编辑 SillyTavern 根目录下的 config.yaml 文件:
hostWhitelist:
enabled: true
添加可信主机
要将主机名添加到可信主机列表中,请将其放入 hostWhitelist.hosts 部分:
提示
不要添加 localhost 或 IP(如 127.0.0.1 或 ::1)。这些始终被视为可信。
要添加一个主机范围,请使用前导点。例如,添加 .trycloudflare.com 将信任 trycloudflare.com 以及任何子域名,例如 example.trycloudflare.com。
hostWhitelist:
hosts:
- "example.com"
- ".trycloudflare.com"
切换控制台消息
要禁用针对未识别主机的控制台消息,请将 hostWhitelist.scan 选项设置为 false:
hostWhitelist:
scan: false
连接到你的 SillyTavern 实例
获取 ST 主机的 IP 地址
设置好白名单后,你需要 ST 托管设备的 IP。
如果 ST 托管设备位于同一 WiFi 网络上,你将使用 ST 主机的内部 WiFi IP:
- 对于 Windows:Win 键 > 在搜索栏中输入
cmd.exe> 在控制台中输入ipconfig,按回车 > 查找IPv4条目。
如果你(或其他人)想在不在同一网络上的情况下连接到你托管的 ST,你需要 ST 托管设备的公网 IP。
- 使用 ST 托管设备时,访问此页面并查找
IPv4。这就是你从远程设备连接时所用的地址。
连接到 ST 服务器
无论你的情况最终用到了哪个 IP,你都要将该 IP 地址和端口号输入到远程设备的 Web 浏览器中。
同一 WiFi 网络上 ST 主机的典型地址如下所示:
http://192.168.0.5:8000
请使用 http://,而不是 https://
连接日志
到服务器的新连接会显示在控制台窗口中,并记录在 SillyTavern 数据目录下的 access.log 文件中。
与服务器位于同一台机器上的浏览器,其控制台消息如下所示:
New connection from 127.0.0.1; User Agent: ...
与服务器位于同一网络上但不同机器的浏览器,其控制台消息可能如下所示:
New connection from 192.168.116.187; User Agent: ...
如果连接被拒绝,控制台消息将如下所示:
New connection from 192.168.116.211; User Agent: ...
Forbidden: Connection attempt from 192.168.116.211. If you are attempting to connect,
please add your IP address in whitelist or disable whitelist mode in config.yaml in
root of SillyTavern folder.
access.log 将包含连接信息及时间戳,但不包含连接是被接受还是被拒绝的信息。
故障排除
仍然无法连接?
- 如果连接尝试
出现在控制台中 但被禁止,则是白名单问题 。 - 如果 ST 正在监听远程连接,但连接尝试未出现在控制台中,则是
网络问题 。 - 如果 ST 未在监听远程连接,则是
阅读问题 。
网络问题
- 在 Windows 上,应用程序可能会被应用防火墙拦截。最快的修复方法是卸载并重新安装 node.js,并在防火墙提示时允许其访问网络。否则,你需要手动在 Windows 应用防火墙中放行 node.js 应用程序。
- 在 Windows 11 上,请在“设置 > 网络和 Internet > 以太网”中启用“专用网络”配置文件类型。这对 Windows 11 非常重要,否则即使有上述防火墙规则,你也无法连接。
- 在 Linux 上,你可能需要在防火墙中放行该端口。执行此操作的命令是
sudo ufw allow 8000。这将放行端口 8000 上的流量。
不要修改路由器上的端口转发设置。这对于在本地网络内访问 ST 并非必要,并且可能会将你的服务器暴露到互联网。
如果你正尝试从本地网络之外访问 ST 服务器,但无法正常工作,请判断问题出在远程设备与隧道/VPN 端点之间,还是服务器上的隧道端点与 ST 服务之间。否则,你会把大量时间浪费在排查错误的方向上。
HTTPS
使用 TLS/SSL 启动 SillyTavern
也可以使用 config.yaml 文件来配置 SSL:SSL 配置。
要加密进出 ST 实例的流量,请使用 --ssl 标志启动服务器。
示例:
node server.js --ssl
默认情况下,ST 会在 certs 文件夹中查找你的证书。如果你的文件位于其他位置,可以使用 --keyPath 和 --certPath 参数。
示例:
node server.js --ssl --keyPath /home/user/certificates/privkey.pem --certPath /home/user/certificates/cert.pem
运行 SillyTavern 的用户需要对证书文件具有读取权限。
如何获取证书
获取证书最简单、最快捷的方法是使用 certbot。
Docker 中的证书
出于安全和隐私原因,如果你在构建 Docker 镜像,请不要将 SSL 证书包含在镜像内。请改用卷挂载在运行时提供证书。
在 Docker 中运行 SillyTavern 时,提供 SSL 证书的推荐方式是将它们放入 /config 卷挂载中。这样你无需重新构建容器镜像即可管理证书。
-
将你的证书文件(例如
privkey.pem和cert.pem)放入映射到容器内/config的本地配置目录中。 -
更新你的
config.yaml以引用这些证书:ssl: enabled: true certPath: ./config/cert.pem keyPath: ./config/privkey.pem -
重启你的 Docker 容器以应用更改。