给运行在局域网内的服务添加 https
这是一个很奇怪的需求,在大多数情况下,局域网内的设备是相互信任的,https 似乎是件没有什么必要的事情。
但是有些软件要求必须使用 HTTPS,比如 Vaultwarden,因为它依赖大多数浏览器仅在 HTTPS 才可用的 SubtleCrypto API。1 此外,一些软件在未开启 HTTPS 时,会在页面上显示不安全的提示。还有一些软件若不开启 https ,则会在页面上显示不安全的提示。这时候 https 就有必要了。
之后我用搜索引擎搜了下有关这方面的内容,大部分都是用通过自签证书实现的。这确实是实现 HTTPS 的一种常见方法,但在多台机器上配置自签证书比较繁琐。
对于 Tailscale 用户来说,只需要少量配置即可实现 HTTPS。Tailscale 的 Tailnet 提供域名和证书生成功能,通过 tailscale serve
命令,可以轻松反向代理服务并提供 HTTPS 支持。如果需要更复杂的配置,可以使用 Caddy。Caddy 遇到 *.ts.net
域名时,会自动从 Tailscale 获取证书。我的个人设备几乎都连接了 Tailscale。
如何配置
tailscale serve
- 打开 console 的 DNS 页面。
- 确保 MagicDNS 和 HTTPS Certificates 都为开启状态
- 执行以下命令:
tailscale serve --bg --https=443 localhost:<port>
之后,就可以通过在 Tailscale 设置好的域名访问服务了。
把 serve 换成 funnel,则可以将服务暴露在互联网。
Caddy
从 Caddy 2.5 测试版开始,Caddy 支持与 Tailscale 集成。当 Caddy 收到 *.ts.net
域名的 HTTPS 请求时,会自动从本地 Tailscale 守护程序获取证书,无需额外配置。
配置示例如下:
machine-name.domain-alias.ts.net {
handle_path /vw/* {
reverse_proxy http://127.0.0.1:8089
}
handle_path /alist/* {
reverse_proxy http://127.0.0.1:5244
}
}
Footnotes
本作品采用知识共享署名-非商业性使用-相同方式共享 (CC BY-NC-SA) 协议进行许可。