header
img of 给运行在局域网内的服务添加 https

给运行在局域网内的服务添加 https

这是一个很奇怪的需求,在大多数情况下,局域网内的设备是相互信任的,https 似乎是件没有什么必要的事情。

但是有些软件要求必须使用 HTTPS,比如 Vaultwarden,因为它依赖大多数浏览器仅在 HTTPS 才可用的 SubtleCrypto API1 此外,一些软件在未开启 HTTPS 时,会在页面上显示不安全的提示。还有一些软件若不开启 https ,则会在页面上显示不安全的提示。这时候 https 就有必要了。

之后我用搜索引擎搜了下有关这方面的内容,大部分都是用通过自签证书实现的。这确实是实现 HTTPS 的一种常见方法,但在多台机器上配置自签证书比较繁琐。

对于 Tailscale 用户来说,只需要少量配置即可实现 HTTPS。Tailscale 的 Tailnet 提供域名和证书生成功能,通过 tailscale serve 命令,可以轻松反向代理服务并提供 HTTPS 支持。如果需要更复杂的配置,可以使用 Caddy。Caddy 遇到 *.ts.net 域名时,会自动从 Tailscale 获取证书。我的个人设备几乎都连接了 Tailscale。

如何配置

tailscale serve

  1. 打开 console 的 DNS 页面。
  2. 确保 MagicDNS 和 HTTPS Certificates 都为开启状态 DNS Settings
  3. 执行以下命令:
    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

  1. Enabling HTTPS · dani-garcia/vaultwarden Wiki · GitHub

本作品采用知识共享署名-非商业性使用-相同方式共享 (CC BY-NC-SA) 协议进行许可。
评论
由于是静态页面,评论提交后不会立即显示,这里 查看提交的评论。