背景:
昨天开始就频繁的无法连接位于海外 vps 的反代,然后 ping 一下发现丢包率好高,今天突发奇想我的 vps 是带 ipv6 的,因为我部署酒馆的服务器是家庭宽带有公网的 ipv6,我就 ping6 试了一下发现延迟低不少而且丢包率为 0,以此开始以下环节。

适用人群:
使用国内 nas 或者小主机等在自己家部署的酒馆,也就是家庭网络,现在大部分家庭网络都有公网的 ipv6

教程开始:

  1. 检查服务器主机当前 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 
  1. 检查 Docker 是否启用 IPv6
docker network inspect bridge | grep -i ipv6

出现以下则代表开启
“EnableIPv6”: true,

2-1. 开启 docker 的 ipv6
1Panel 面板
docker 界面设置,开启 ipv6,子网 fd00::/80
并重启 docker 和容器

  1. 检查容器是否有 IPv6 地址
docker exec 容器名(sillytavern) ip -6 addr

如果出现
enp1s0 和 ipv6 地址则代表获取成功

3-1. 测试容器 ipv6 连通性

docker exec 容器名 ping6 -c 2 你的ipv6地址
  1. 设置容器 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 则成功

  1. 修改容器的 config.yaml
protocol: ipv4: true ipv6: true dnsPreferIPv6: true 

📌 转载信息
原作者:
ak7876
转载时间:
2026/1/12 15:39:49

标签: docker, sillytavern, 容器化部署, 网络配置, IPv6

添加新评论