我没有 homelab ,但是对这个话题感兴趣,经过我搜索。有这样一个未经验证的方案:不需要你去搞内网 DNS ,全部使用 Caddy+CF 搞定( Caddy 支持用 CF 的 DNS 进行证书挑战。)
1 、先按这个人的这个配置完成内网用域名直接进行 https 访问:
https://samedwardes.com/2023/11/19/homelab-tls-with-caddy-and-cloudflare2 、然后再按这个教程
https://caddy.community/t/caddy-with-cloudflare-tunnel/18569 ,创建外网访问的隧道,隧道设置:
- https ,转发到 1 里面给反代服务器设置的那个域名
- 设置 Origin Server Name 和 Http host Header 为那个域名
理论上,2 配置完成后,外网也用同样的域名也可以访问了。我决定支持一个服务应该是可以打,要多个服务就需要泛域名,
至于泛域名,你可以试试上面那个同学那样配,就是在 1 里面做挑战的时候给 caddy 用的域名就设置为: *.lab.yourdomain.com ,然后隧道配置里,子域名填写 *.lab 域名填写
yourdomain.com 这样理论上应该就可以支持多个服务了。Caddyfile 应该是类似这样写:
*.lab.yourdomain.com {
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
reverse_proxy
service1.lab.yourdomian.com x.x.x.x:port1
reverse_proxy
service2.lab.yourdomian.com x.x.x.x:port2
reverse_proxy
service3.lab.yourdomian.com x.x.x.x:port3
}
如果你是全 docker 部署的那就更简单了。放在一个 network 里,上述反代配置都不用写 ip ,直接容器名加端口。
隧道设置里,直接 https 转发到 caddy:443 。
总之要试一下,我相信肯定可以的。我没这个条件,如果你们谁尝试后有了结论,请告诉我。谢谢。