SillyTavern 设置域名 IPv6 优先教程详解

背景

最近,我发现我的海外 VPS 反代频繁无法连接,ping 测试显示丢包率很高。经过检查,我发现我的 VPS 支持 IPv6,而我的家庭宽带也有公网 IPv6。尝试使用 IPv6 连接后,延迟显著降低,丢包率也降为零。因此,我决定撰写这篇教程,帮助大家设置 SillyTavern 的域名 IPv6 优先。

适用人群

本教程适用于使用国内 NAS 或小主机等在家中部署 SillyTavern 的用户,特别是那些家庭网络支持公网 IPv6 的用户。

教程步骤

1. 检查服务器主机当前 DNS 解析顺序

首先,我们需要检查服务器当前的 DNS 解析顺序是否优先 IPv6。

getent ahosts 你的域名

查看输出结果,判断 IPv6 是否在前面。

1.1 IPv6 在后时,设置 IPv6 优先

如果 IPv6 不在前面,我们需要修改 /etc/gai.conf 配置文件。

cat /etc/gai.conf

如果文件内容如下,则表示已经是 IPv6 优先了:

#precedence ::1/128       50
#precedence ::/0          40
#precedence 2002::/16     30
#precedence ::/96          20
#precedence ::ffff:0:0/96  10

如果文件内容如下,则需要添加 # 号来设置 IPv6 优先:

precedence ::ffff:0:0/96  100

2. 检查 Docker 是否启用 IPv6

接下来,我们需要检查 Docker 是否启用了 IPv6。

docker network inspect bridge | grep -i ipv6

如果输出显示 “EnableIPv6”: true, 则表示 Docker 已经启用了 IPv6。

2.1 开启 Docker 的 IPv6

在 1Panel 面板中,进入 Docker 界面设置,开启 IPv6,子网设置为 fd00::/80,然后重启 Docker 和容器。

3. 检查容器是否有 IPv6 地址

我们需要确认容器是否成功获取了 IPv6 地址。

docker exec 容器名 ip -6 addr

如果输出显示 enp1s0 和 IPv6 地址,则表示获取成功。

4. 测试容器 IPv6 连通性

接下来,测试容器的 IPv6 连通性。

docker exec 容器名 ping6 -c 2 你的 IPv6 地址

5. 设置容器 IPv6 优先级

对于使用 Alpine 容器的 SillyTavern,我们需要在环境变量中添加以下内容:

NODE_OPTIONS=--dns-result-order=ipv6first

在 1Panel 中添加环境变量时,将网络段设置为 host

验证设置是否成功:

docker exec 容器名 node -e "
const dns = require('dns');
dns.lookup('你的域名', { all: true }, (err, addrs) => {
  console.log(addrs);
});
"

如果 IPv6 在前,则设置成功。

再次验证:

docker exec 容器名 node -e "
const dns = require('dns');
dns.lookup('你的域名', (err, addr, family) => {
  console.log('实际使用 IP:', addr);
  console.log('IP 版本:', family === 6 ? 'IPv6' : 'IPv4');
});
"

如果结果显示实际使用 IP 为你的公网 IPv6,则成功。

6. 修改容器的 config.yaml

最后,我们需要修改容器的 config.yaml 文件,确保启用 IPv6 优先。

protocol:
  ipv4: true
  ipv6: true
dnsPreferIPv6: true

结语

通过以上步骤,你应该已经成功设置了 SillyTavern 的域名 IPv6 优先。这将有助于提高你的服务器的响应速度和稳定性。希望这篇教程对你有所帮助!

标签: none

评论已关闭