宝塔面板启用IPv6需三步:1. 创建空文件/www/server/panel/data/ipv6.pl并写入::,再重启面板;2. 手动为Nginx各网站配置添加listen [::]:80;和listen [::]:443 ssl http2;;3. 系统防火墙与云安全组须显式放行IPv6端口,并配置DNS AAAA记录。

宝塔面板自身监听IPv6必须改配置文件并重启
只在面板后台勾选“监听IPv6”不生效,echo '::' > /www/server/panel/data/ipv6.pl 这一步不可跳过,否则面板仍只监听 IPv4 的 8888 端口。
执行完后必须运行 /etc/init.d/bt restart,单纯重载 Nginx 或刷新页面没用。验证方式是用另一台支持 IPv6 的机器访问 https://[你的IPv6地址]:8888,如果连接被拒绝,说明监听未真正启用。
- 常见错误:勾选了面板设置里的选项但没执行命令,导致
netstat -tlnp | grep :8888只显示*:8888(IPv4 any),没有[::]:8888 - 注意
/www/server/panel/data/ipv6.pl是一个空文件,内容仅为::,不是 JSON 或配置项,写错格式(如加引号、换行)会导致失败 - 部分低版本宝塔(如 7.9.x 之前)不支持该机制,需升级到 8.0+ 再操作
Nginx 配置里 listen [::]:80 和 listen [::]:443 必须手动加
宝塔不会自动为已有网站补全 IPv6 监听指令,哪怕你开启了面板 IPv6 支持。每个网站的配置文件都要单独编辑,在对应 server 块里插入两行:
listen [::]:80; listen [::]:443 ssl http2;
不能只写 listen [::]:80 ssl http2;(没开 HTTPS 的网站加 ssl 会启动失败),也不能把 [::] 写成 :: 或 [:::]——语法错误会导致 Nginx 重载失败,面板会提示“配置错误”。
- SSL 网站务必确认原有
listen 443 ssl http2;行存在,再在其下方加 IPv6 版本,顺序不影响,但缺失原始行会导致 HTTP/2 不生效 - 若使用了自定义端口(如 8080),也要同步加
listen [::]:8080;,否则 IPv6 用户无法访问该端口 - 加完保存后,点【重载配置】而非【保存】,否则变更不会加载进运行中的 Nginx 进程
系统防火墙和云厂商安全组都要放行 IPv6 端口
Linux 自带的 firewalld 或 ufw 默认不管理 IPv6 规则,即使 IPv4 的 80/443/8888 已放行,IPv6 流量仍会被静默丢弃。
以 firewalld 为例,必须显式添加:
firewall-cmd --permanent --add-port=80/tcp --zone=public firewall-cmd --permanent --add-port=80/tcp --zone=public --ipset=ipv6 firewall-cmd --permanent --add-port=443/tcp --zone=public --ipset=ipv6 firewall-cmd --permanent --add-port=8888/tcp --zone=public --ipset=ipv6 firewall-cmd --reload
注意:--ipset=ipv6 是关键,漏掉就只作用于 IPv4;Ubuntu 用户用 ufw 则需确认 /etc/default/ufw 中 IPV6=yes 已启用,并执行 ufw allow 80/tcp 等命令(ufw 默认对 IPv6 生效)。
- 腾讯云、阿里云、Vultr 等平台的安全组默认只管 IPv4,必须单独新建 IPv6 安全组规则,协议选 TCP,端口填 80,443,8888,源地址填
::/0 - Cloudflare 代理下,你的服务器只需响应 IPv6 请求,但 Cloudflare 本身必须开启 IPv6 支持(DNS 设置页有开关),否则 AAAA 查询返回空
- 用
tcpdump -i eth0 ip6 and port 80可抓包确认 IPv6 请求是否抵达服务器网卡,排除上层拦截
域名解析必须配 AAAA 记录,且不能和 CNAME 冲突
很多用户以为只要服务器开了 IPv6 就能通过域名访问,结果发现 dig AAAA yourdomain.com 返回空。根本原因是 DNS 没配或配错。
在 DNS 控制台新建一条记录:
- 类型选
AAAA(不是 A) - 主机名填
@或www,和你的 A 记录保持一致 - 记录值填服务器的**公网 IPv6 地址**(不是
fe80::或fd00::这类本地地址) - 不要让同一主机名同时存在 CNAME 和 AAAA,CNAME 优先级更高,会覆盖 AAAA
生效时间取决于 TTL,建议设为 300 秒快速调试;验证用 curl -g -6 https://yourdomain.com(-6 强制走 IPv6,-g 防止方括号被 shell 解析出错)。
最易忽略的一点:某些 DNS 服务商(如早期腾讯云 DNSPod)对 AAAA 记录长度有限制,超长 IPv6 地址会被截断,务必复制粘贴完整地址,不要手动删减。










