sillytavern 设置域名 ipv6 优先教程
背景:
昨天开始就频繁的无法连接位于海外 vps 的反代,然后 ping 一下发现丢包率好高,今天突发奇想我的 vps 是带 ipv6 的,因为我部署酒馆的服务器是家庭宽带有公网的 ipv6,我就 ping6 试了一下发现延迟低不少而且丢包率为 0,以此开始以下环节。
适用人群:
使用国内 nas 或者小主机等在自己家部署的酒馆,也就是家庭网络,现在大部分家庭网络都有公网的 ipv6
教程开始:
- 检查服务器主机当前 DNS 解析顺序
getent ahosts 你的域名
看输出结果是 ipv6 在前还是在后
1-1.ipv6 在下时,设置 ipv6 优先
查询配置文件
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 如果是出现以下,需要给前面加上 #号
precedence ::ffff:0:0/96 100 - 检查 Docker 是否启用 IPv6
docker network inspect bridge | grep -i ipv6
出现以下则代表开启
“EnableIPv6”: true,
2-1. 开启 docker 的 ipv6
1Panel 面板
docker 界面设置,开启 ipv6,子网 fd00::/80
并重启 docker 和容器
- 检查容器是否有 IPv6 地址
docker exec 容器名(sillytavern) ip -6 addr
如果出现
enp1s0 和 ipv6 地址则代表获取成功
3-1. 测试容器 ipv6 连通性
docker exec 容器名 ping6 -c 2 你的ipv6地址
- 设置容器 IPv6 优先级
酒馆是 Alpine 容器,在环境变量里添加
NODE_OPTIONS=--dns-result-order=ipv6first
因为 docker 的网段设置是默认不带 ipv6 的所有在 1panel 里添加环境变量的时候,把网络段设置为 host
在 ssh 里输入如下
docker exec 容器名 node -e "
2const dns = require('dns');
3dns.lookup('你的域名', { all: true }, (err, addrs) => {
4 console.log(addrs);
5});
6"
7
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 则成功
- 修改容器的 config.yaml
protocol: ipv4: true ipv6: true dnsPreferIPv6: true