用 Matrix 服务器发起一场 Discord 迁徙
本文介绍如何用开源协议 Matrix、Synapse 与 Element 自建聊天服务替代 Discord,并分享语音视频、NAT 穿透和联邦化部署中的真实取舍。
互联网的集体记忆往往很短。Discord 在年龄验证政策上引发反弹后,只承诺推迟上线,并没有真正放弃,而是继续用一系列小改动推进同一目标。对不满的用户来说,迁移到 Matrix 服务器是一个值得考虑的选择:它开源、可自托管,也不受单一公司意志左右。
Matrix 不是另一个 Discord,而是协议
Discord 是闭源平台,规则由公司决定;Matrix 则是开放通信协议和标准。其主流服务端与客户端实现开源,任何人都能围绕它构建工具,并与其他使用同一协议的系统互通。这种关系类似电子邮件:没有哪家公司锁死整个通信网络。
Matrix 最常用的服务端软件是 Synapse,常见通用客户端是 Element 系列。作者在试验中也采用这套默认组合。
选择太多,反而难以下手
为家人、朋友或游戏社群寻找 Discord 替代品时,选项多到令人犹豫。Stoat、XMPP 以及其他可自托管的文字和视频通信项目都存在,但不少服务用户基数很小,或者有别的短板。开源社区项目往往容易写代码、发版本,却很难做市场推广并建立可持续的用户群,这一点和 Linux 在桌面市场遇到的困境有些相似。
作者最终选择 Matrix,有几个现实原因:用户社区相对活跃、愿意帮忙;私聊默认启用了较强的端到端加密;可以托管在自己拥有的机器上。更重要的是,自托管并非必须。matrix.org 是一个大型活跃服务器,某种意义上充当默认入口,几乎任何人都能注册,只需安装 Element 之类的客户端就能聊天。这让它有点像 IRC 黄金时代:大型服务器让匿名互联网用户无需太多准备,就能在主题聊天室里交流。
联邦可以开,也可以关
Matrix 常被归入 Lemmy、Mastodon 这类“联邦式”社交网络。它们都没有 Discord 或 Reddit 那样的中央服务器,也没有统管全网的权威机构。Matrix 服务器之间可以联邦,让不同服务器上的用户进入同一房间、交换消息。某台服务器离线或选择断开联邦,并不会拖垮整个网络,只是仅托管在该服务器上的用户和房间会受影响。
不过,联邦同样是可选项。为家人朋友运行一台不与其他服务器联邦的独立实例,完全可行;大型服务器也可以与 matrix.org 等主要节点互联。相比 Discord,这种去中心化结构更能抵御单一实体的临时决定。
Matrix 使用的协议与 ActivityPub 不同,但它有桥接网络,可以与 IRC、Discord 以及其他多种聊天服务通信。理论上,搭好 Matrix 服务器并不意味着和仍留在 Discord 的朋友断联,也方便一个群体分阶段迁移,而不是要求所有人同一天搬家。
从一台 Synapse 容器开始
真正搭建 Matrix 服务器,比在 Discord 里新建频道要麻烦一些。作者有一台 Proxmox 服务器,新建虚拟机相对轻松,但服务端和客户端软件在大多数 Linux 发行版上直接运行也没问题,不一定需要虚拟化。起步时,他创建了一个 LXC 容器运行 Synapse。Synapse 自身只提供文字和图片聊天室,最初通过 Cloudflare 隧道把服务暴露到公网。把 Cloudflare 地址、加密密钥和各台机器上的 Element 客户端交给家人朋友后,大家就能进入聊天室,消息端到端加密,并保存在作者实际控制的机器上。
如果只需要文字聊天,走到这一步就够用,也是更简单的方案。但 Discord 那种随手发起的语音和视频通话,才是 Matrix 服务器管理开始变复杂的地方。
语音、视频与 NAT 的层层障碍
作者搭建时,Matrix 的语音视频存在旧版和新版两套模式。为了都支持,需要额外部署两个服务:旧模式需要 TURN 服务器,Element 支持的现代语音视频系统通常需要 LiveKit 服务器。不过在他搭建之后,这套架构已经简化,TURN 在典型 Matrix 部署中的中心程度有所下降。
下一个障碍是互联网服务提供商的网络地址转换(NAT)。这也是最初使用 Cloudflare 隧道的原因之一。但免费版 Cloudflare 隧道基本只做 HTTP/WebSocket 代理,无法接收 TURN 和 LiveKit 通常需要的 UDP 媒体流量。为此,作者用了一台带公网 IP 的小型 VPS:TURN 较轻量,可以直接跑在 VPS 上;LiveKit 则更吃资源,作者不愿为它支付高额 VPS 费用,于是让 LiveKit 留在自己的服务器上,再通过 WireGuard 从 VPS 连回 Proxmox 上的容器。
这套配置比一般情况更麻烦,不只因为 NAT。数据包到达同样跑在 Proxmox 上的路由器后,还会进入家庭网络中独立 VLAN 上的 DMZ,确保公网流量无法进入局域网其他部分。DMZ 里又有若干由 nginx 管理的公网服务,等于再套一层。算上 Matrix 的支持服务、网络层、外部 VPS 和 Matrix 服务器本身,作者的方案涉及六台虚拟机、与 Cloudflare 的配合,以及一项额外但不算昂贵的付费服务;这还没算 Proxmox 宿主机和其他虚拟机上用于监控流量、增强网络安全的服务。
它仍然不完美
即使花了大量时间排错,这套系统仍有缺点。作者至今没弄清,为什么部分使用 Element X 的 iPhone 用户会随机无法向聊天室发送图片。某台虚拟机上的服务偶尔会失效,而且似乎总在他不在笔记本电脑旁边时发生。
更值得注意的是,这台 Matrix 服务器没有与其他服务器联邦。这不是故障,而是有意选择。借助 VPS 的公网端点,联邦在技术上可行,但作者尚未尝试。主要原因是活跃用户都是家人,他们不需要也不想要面向广阔互联网的曝光;而作者在 matrix.org 上的体验也常被加密货币骗局和冷清聊天室破坏。
值不值得折腾?
用一个需要自己维护的系统替代免费服务,听起来要求很高。Discord 确实让玩家更容易在网上互相联系,也改变了在线聊天室的面貌。但平台一次次表明,它愿意为了股东价值慢慢侵蚀用户信任、隐私、安全和体验。年龄与身份验证等功能会引入更多类别的敏感信息,也要把它们存储在某个地方,增加更多故障点。大型公司保护用户数据的历史并不光彩,迟早会有人犯错,泄露用户从未期望 Discord 收集的信息。
所以,对于那些还记得 Discord 曾推行不受欢迎政策的人,或者记得其他公司泄露敏感用户信息的人,Matrix 服务器也许值得一试。它不会像注册账号那样轻松,但能把控制权拿回自己手里。
讨论
0 条评论