我在 DS220+ 上运行了很多私有云服务,群晖生态的 Photos、Drive,Docker 搭建的 Vaultwarden、AFFiNE 等等。
这些服务都运行在内网,为了在外网也能正常使用这些云服务,我使用了 DSM 自带的反向代理功能来实现外网访问。
下面是我的操作步骤:
准备域名和申请免费 SSL 证书
我的域名在 namecheap.com 注册,namecheap 的 DNS 支持 DDNS,很方便家庭宽带动态 IP 环境做域名解析。如何在 DSM 启用 DDNS,可以阅读之前的文章。
SSL 免费申请的方式也很多,我在 ohttps.com 申请。这是我唯一找到的一个支持泛域名的证书服务商。使用泛域名证书,每3个月更新证书时就很方便(现在免费证书只有3个月有效期,到期需要更新)
如果用我的邀请链接注册,可以获得1000余额,够20次证书更新,等于免费使用5年。
OHTTPS 注册邀请 👉 https://ohttps.com?invitationCode=xlpm40gvngl05n9g
注册完成后,添加一个免费泛域名证书,例如 *.mydomain.com:

完成证书申请后,下载3个证书文件 cert.key、cert.cer、chain.cer 备用。
安装证书
登录 DSM,进入控制面板 → 安全 → 证书 → 新增证书:

点击几次下一步到导入证书页:

将前面下载的3个证书文件上传,点击确定。到此就完成了证书安装。
配置反向代理规则
我们要将 affine.mydomain.com 这个子域名用于 AFFiNE 服务,那么先在 DNS 增加这个子域名的解析记录。
登录群晖 DSM,进入控制面板 → 登录门户 → 高级 → 反向代理服务器。
之前我部署 AFFiNE 时设置的本地端口是 3010 那么按如下新增一条反向代理记录:

特别注意的是来源端口,如果 443 端口可用,可以直接使用这个端口。如果不可用,那么需要自定义一个可用的端口号。
不论哪种情况,都需要在路由器上将对应的端口映射到群晖 NAS 的内网地址。
最后一步,进入控制面板 → 安全 → 证书 → 设置,将 affine.mydomain.com 服务的证书设置为前面我们安装的证书。
使用子域名访问服务
回到 AFFiNE APP,添加服务器 https://affine.mydomain.com,就可以在外网使用私有化部署的 AFFiNE 服务了。
通过反向代理在外网使用内网服务还有其他解决方案,如使用 Caddy 做反向代理和自动管理 SSL 证书,可以省去手工更新证书的麻烦。我还在研究中,等跑通了再分享。