家用IPV6设置SSL访问
杂记 代码记录 9

🌐 家庭 IPv6 环境下为内网服务申请 SSL 证书(完整教程)

随着越来越多的运营商支持 IPv6,家用宽带常常自动分配全球可达的 IPv6 地址。这为我们将 NAS、博客、远程桌面等服务从内网暴露到公网提供了可能。

但许多用户在尝试部署 HTTPS 时会遇到阻碍:家用 IPv6 环境下往往无法开启 80/443 端口,导致常规方式无法申请 SSL 证书。本文将介绍如何结合 Cloudflare + DDNS + Certimate + Caddy,实现家庭服务通过自签域名安全访问。


📋 一、准备工作

✅ 拥有一个可控的域名

可在如下平台购买:

  • 国内推荐:阿里云、腾讯云
  • 海外推荐:Namecheap、Cloudflare Registrar

🌩️ 二、将域名迁移至 Cloudflare

  1. 注册并登录 Cloudflare

  2. 添加域名后,Cloudflare 会提示更换你原注册商的 DNS 至 Cloudflare 提供的地址。

  3. 更改成功后,在 Cloudflare 控制面板中添加 AAAA 记录:

    主机名:home
    类型:AAAA
    内容:你的 IPv6 地址(如 2409:8a00:xxxx:xxxx::1)
    代理状态:DNS only(灰色云朵)
    

注意:不启用 Cloudflare 代理(橙色云朵),否则会影响非 80/443 端口的服务访问。


🔄 三、使用 DDNS-Go 自动更新 IPv6 地址

家庭宽带下 IPv6 地址并不固定,因此我们需要自动同步本机地址到 Cloudflare DNS

安装 DDNS-Go:

可选择 Docker 或本地运行方式。

本地运行:

wget https://github.com/jeessy2/ddns-go/releases/latest/download/ddns-go-linux-amd64.tar.gz
tar -xzf ddns-go-linux-amd64.tar.gz
./ddns-go

访问控制台:

浏览器访问 http://localhost:9876,配置如下:

  • 平台:Cloudflare
  • API Token:建议在 Cloudflare 创建,权限包括 Zone.DNS Edit
  • 域名:如 home.example.com
  • 更新类型:仅更新 IPv6 地址

DDNS-Go 会自动在后台运行并定期更新 IPv6 地址到 Cloudflare,确保访问永远指向正确的主机。


🔐 四、申请 SSL 证书(Certimate + DNS 验证,Docker 部署)

由于家宽无法开放 80/443 端口,不能使用 HTTP 验证,因此采用 DNS-01 方式申请证书。我们推荐使用 Certimate,并通过 Docker 部署图形界面与命令行两种方式统一管理。

推荐工具:Certimate

Certimate 支持 Cloudflare、阿里云等平台的 DNS API,提供现代化 Web 管理界面和 CLI 工具,适合个人/家庭场景。


🚀 5 分钟部署 Certimate(Docker 方式)

  1. 拉取并运行官方镜像:
docker run -d \
  --name certimate \
  -p 8090:8090 \
  -v /etc/certimate:/data \
  ghcr.io/certimate/certimate:latest serve
  1. 打开浏览器访问:
http://127.0.0.1:8090
  1. 登录默认管理员账号:

登录后请立即前往【设置】页面修改默认密码,并配置 Cloudflare 的 DNS API Token。


📁 证书保存路径

默认情况下,Certimate 会将申请成功的证书保存在 Docker 容器映射目录 /etc/certimate/ssl 下,例如:

  • /etc/certimate/ssl/home.example.com/cert.pem
  • /etc/certimate/ssl/home.example.com/key.pem

你可以在 Caddy 中直接加载这两个文件作为 TLS 证书使用。


✅ 使用 DNS 验证申请证书

进入 Certimate Web 控制台后:

  1. 添加域名 home.example.com
  2. 选择验证方式为:DNS(推荐 Cloudflare)
  3. 填入 Cloudflare 的 API Token 信息
  4. 点击申请证书,一键获取并安装

🛠️ 可选:命令行模式自动续签

Certimate 也支持 CLI 模式,可以通过 docker exec 调用自动续签逻辑。例如创建定期任务调用以下命令:

docker exec certimate certimate renew \
  --dns cloudflare \
  --dns-cloudflare-credentials /data/cf_token.json \
  -d home.example.com \
  --install \
  --install-path /data/ssl/home.example.com/

🧭 五、使用 Docker 部署 Caddy 反向代理内网服务(自定义端口)

为了与 Certimate 一致,我们推荐也通过 Docker 部署 Caddy,并挂载证书目录,实现完整容器化。


🧰 准备工作

确保 Certimate 申请的证书保存目录为:

/etc/certimate/ssl/home.example.com/{cert.pem,key.pem}

我们会将该目录通过 Docker 绑定到 Caddy 容器的 /etc/caddy/certs 路径。


📄 创建 Caddy 配置文件(如 Caddyfile):

放在宿主机 /etc/caddy/Caddyfile,内容如下(注意端口为容器内部端口):

home.example.com {
  reverse_proxy 127.0.0.1:80
  tls /etc/caddy/certs/home.example.com/cert.pem /etc/caddy/certs/home.example.com/key.pem
}

💡 reverse_proxy 指向容器或宿主机的服务端口,如服务在主机上运行,建议将主机端口映射为容器内的 80


🐳 启动 Caddy Docker 容器

docker run -d \
  --name caddy \
  -p 4433:443 \
  -v /etc/caddy/Caddyfile:/etc/caddy/Caddyfile \
  -v /etc/certimate/ssl:/etc/caddy/certs \
  caddy:latest

解释:

  • -p 4433:443:将外部访问端口改为 4433,可配合防火墙或 NAT 设置;
  • -v /etc/caddy/Caddyfile:/etc/caddy/Caddyfile:加载你的反向代理配置;
  • -v /etc/certimate/ssl:/etc/caddy/certs:挂载 Certimate 签发的证书文件目录;

✅ 如果你希望对接其他端口,例如将容器 80 映射为宿主 8000,可加 -p 8000:80,同时反向代理目标也需指向 127.0.0.1:80


🧪 测试访问

服务启动后,访问你的域名和映射端口,如:

https://home.example.com:4433

或配置路由器 / 防火墙转发 443 → 本机 4433,实现标准 HTTPS 访问。


✅ 六、测试访问效果

  • 浏览器访问:https://home.example.com:4433,应显示安全锁标志;
  • 命令行测试证书是否正常部署:
curl -vk https://home.example.com:4433

也可通过 SSL Labs 测试工具 进一步验证。


🧠 七、进阶建议

问题建议解决方案
IPv6 地址经常变化使用 DDNS-Go 持续更新
家宽封锁 80/443 端口使用 DNS-01 验证获取 SSL 证书
自动续签证书Certimate 支持计划任务(cron 或 systemd timer)
更复杂的反代需求使用 Caddyfile 自定义多个服务路径
家用设备安全担忧配合 HTTP Auth、IP 访问限制、Cloudflare Tunnel

🎯 总结流程图

[家庭服务] ← Caddy反代 ← [本机 IPv6地址]
                               ↑
                   Certimate 获取证书(DNS验证)
                               ↑
                Cloudflare DNS ← DDNS-Go 动态更新

🗂️ 项目参考

家用IPV6设置SSL访问
https://blog.427221.xyz/archives/jia-yong-ipv6she-zhi-sslfang-wen
作者
qqq
发布于
更新于
许可