外观
网络进阶
容器跑到第五个的时候,你会发现自己在记一堆端口号。这一栏解决的就是这个问题。
从端口到域名
初期访问方式通常是 IP:端口,问题很快显现:端口记不住、没有 HTTPS、换 IP 全部失效、想对外开放时不知道该放行哪些。
反向代理的思路是:一个入口接收所有请求,按域名分发到不同的后端服务。
| 访问方式 | 之前 | 之后 |
|---|---|---|
| 笔记 | 192.168.1.100:5230 | memos.内网域名 |
| 照片 | 192.168.1.100:2283 | photos.内网域名 |
| 监控 | 192.168.1.100:3001 | status.内网域名 |
单个应用的配置方法见反向代理与 HTTPS,这里讲多服务场景下的组织方式。
内网也值得用域名和 HTTPS
即使只在局域网里用,域名加证书也有实际价值:浏览器不再报警告、密码管理器能正确识别站点、换 IP 时只需改一处 DNS 记录。
做法有两种:
- 公网域名 + DNS 验证签发证书。域名解析到内网地址,证书通过 DNS 验证方式申请,不需要把任何端口暴露到公网。这是推荐做法。
- 自建内部 CA。不需要域名,但每台设备都要安装根证书,手机和电视上操作起来很麻烦。
内网 DNS
让 memos.内网域名 解析到 NAS,需要一个内网 DNS:
- 在路由器上添加自定义解析记录(最简单,但有些路由器不支持)。
- 跑一个 AdGuard Home 或类似服务,同时还能顺便过滤广告。
- 用公网 DNS 直接解析到内网 IP(配置最简单,缺点是内网地址会暴露在公开 DNS 记录里)。
证书自动续期
自动签发的证书有效期通常很短,必须自动续期。配置完成后:
- 记下续期任务在哪里、以什么身份运行。
- 配置续期失败的告警。证书过期是最典型的「静默失败」——直到某天所有服务一起打不开。
- 在日历上记一个检查提醒,第一次续期发生后去确认它真的成功了。
安全提醒
反向代理不等于加了一层防护
反向代理只负责转发。它后面的应用如果有弱密码或漏洞,通过代理一样能被打穿。对外开放之前,逐个确认后端应用本身有认证,且版本较新。
需要对外开放时,优先考虑只把必要的服务放出去,其余走私有网络组网。
检查结果
用域名访问每个服务都正常、证书有效且自动续期任务已验证、能说清哪些服务可以从公网访问。