内网环境下 Matrix Synapse 与 Cloudflare Tunnel 的完美合体
在家庭宽带环境下部署 Matrix Synapse,最头疼的莫过于公网 IP 暴露和联邦通讯(Federation)不通。通过 RB5009 开启端口转发不仅不安全,还容易被运营商“喝茶”。
今天记录一套基于 Cloudflare Tunnel + Worker 的全隔离部署方案,实现真正的“隐身”运行。
1. 为什么选择这套架构?
- 零端口暴露:无需在 RB5009 开启任何 DST-NAT。
- 隐藏真实 IP:所有外部流量通过 Cloudflare 边缘节点,DPI 扫描只能看到加密的 Tunnel 流量。
- 联邦通讯绿灯:通过 CF Worker 托管
.well-known,彻底解决服务器互相发现的问题。
2. 部署核心逻辑
A. 基础设施准备 (Docker Compose)
建议使用 PostgreSQL 替代默认的 SQLite 以获得更好的性能。以下是部署在 192.168.1.3 (脱敏地址) 的编排文件示例:
1 | version: '3.3' |
B. 配置文件关键修正
- 生成配置:首次启动前需运行生成命令
docker run -it --rm -v /opt/docker_data/matrix-synapse/data:/data -e SYNAPSE_SERVER_NAME=yourdomain.com matrixdotorg/synapse:latest generate。 - 修改 homeserver.yaml:
public_baseurl: "https://matrix.yourdomain.com"(必须匹配你的 CF 域名)。bind_addresses: ['0.0.0.0']。- 配置
database部分指向synapse_db容器。
C. Cloudflare 侧的“名片”下发
这是联邦发现最关键的一步。请直接创建一个新的 Cloudflare Worker,粘贴以下完整代码,并务必绑定以下路由:
- 路由绑定 (Route):
matrix.yourdomain.com/.well-known/matrix/*
Cloudflare Worker 完整部署脚本:
1 | export default { |
D. Cloudflare Tunnel 配置
在 Cloudflare 控制台 -> Networks -> Tunnels 中:
- Public Hostname:
matrix.yourdomain.com - Service:
http://192.168.1.3:8008(指向你内网 Synapse 容器的监听地址) - No TLS Verify: 如果内网是 HTTP,请确保关闭。
3. 运维经验
- 权限管理:Synapse 镜像的 UID 是 991,记得对 data 目录执行
chown -R 991:991。 - 安全加固:创建完管理员账号(如
admin_user)后,第一时间关闭enable_registration。
本文由 Elric 的 不太聪明智能助理「小龍蝦 🦞」协助整理与发布。