个人在朋友圈内自助托管的服务:2022 年对退出 Google Workspace 的考虑记录(2)
在一篇报道中,提到由于Google与IEEE的合同变更,GoogleApps@IEEE无法正常使用,同时还在寻找临时解决方案。
在进一步考虑之后,我们决定尽力自己托管并解决问题,于是继续使用自己托管的方式运营了大约一个月。最后要提到的是,事实上与上次相比唯一的变化就是我们找到了替代GMail的自托管解决方案。然而,基于考虑到之前的各种经历,从能够自行控制的角度出发,我们并不仅限于寻找替代的Google Workspace,而是对广泛范围进行了考虑,并将我目前的自托管服务的运营情况记录下来。
因此,我將記述我目前個人、團隊內部或公共伺服器上自行托管的服務的總結。
首先
将数据存储在GAFAM平台上带来了个人隐私问题以及互联网的中心化的讨论已经有很长一段时间了。个人觉得计算机科学和网络工程更多地基于人类的”思想”而不是自然科学。这些思想以及时代潮流的影响,引发了关于网络和互联网服务的中心化与分散等议题。目前,尤其是在爱德华·斯诺登揭露事件之后,个人认为出现了对分散思想的回归。
也存在着一些问题。
-
- サービスの突然の変更、値上げ
-
- 巨大企業にデータを吸われるプライバシの懸念
- など
自分自身のデータを管理できるオープンソースの代替サービスが人気を集めています。
-
- 自分のデータは自分の手元に置く; あるいは
- End-to-End暗号化などにより、自分と適切な受信者以外にはデータは渡さない
这种思想正受到越来越多的关注。
在中国,这个极北的定义是指自己搭建自己专用的服务的自助托管,也就是自宅服务器。像我这样的网络老人或者说是古代的网络用户,10到20年前,在家里运行UNIX系列操作系统的服务器是很普遍的,但现在可能只是少数派了。另外,对于漏洞和硬件故障的应对措施,都需要自己负责,这是不言而喻的。
然而,自主托管具有重要优势,除了网络连接之外,可以自行管理自己的数据,并能够解决不合理的服务变更和隐私问题。
本次,我打算谈谈关于之前写的“不再使用Google Workspace”一文的最新考虑,并列出我目前自主托管的服务清单,截止到2022年9月为止。
因为我觉得下面的文章很有趣,所以我要模仿它。
-
- 個人的にセルフホストしてるソフトウェア 2021
- クラウドから撤退して自前サーバに自分でwebアプリを建てるおはなし
组成
首先,我们记录下组织结构。虽然自称自己是自托管,但实际上并没有在家里准备服务器,而是通过私有网络将几个VPS连接起来并进行使用。考虑到家用服务器的电费每天都在上涨,因此目前基本上都是通过VPS完成的。
我将在下图中记述构成的概要。

基本上,我們將幾乎所有的服務都容器化為 Docker 來運行。這樣做可以使配置變得更加靈活。由於規模不算很大,我們使用 docker-compose 來管理,不需要使用 K8s。
从构成上来看,自助式主机服务被分为三种类型。
-
- 外部向けWebサービス
-
- 内部限定サービス
- 上記2つのあいのこ (メール)
对外Web服务
外部的HTTP/HTTPS请求(TCP 80/443、UDP 443)通过支持多域名的HTTPS反向代理进行处理,并路由到后端的Web服务容器。
这个HTTPS反向代理是用rust自己实现的,除了支持TLS,还支持HTTP/3、多域名和SNI清理等功能。它是一个直接而实用的实现,运行非常快速和轻量级。
GitHub junkurihara/rust-rpxy是一个用Rust编写的简单而超快的HTTP反向代理,可以为多个域名提供服务,并在http/1.1、2和3协议上终止TLS。
有关TLS所需的证书,我们使用cron定期运行lego并从Let’s Encrypt获取域名证书。
乐高:使用Go语言编写的Let’s Encrypt客户端和ACME库。
仅供内部使用的服务
只有来自外部网络的连接请求可以通过VPN访问,该服务仅限于自身或特定成员的访问。此外,VPN连接基本上采用分割隧道,即除了访问VPN内部地址外,还会通过客户端的默认路由进行访问,通过设置配置文件来实现。
连接VPN时,会将自定义的DNS解析器(DNS加密代理)设置为默认的DNS解析器。通过VPN内部的解析器,可以解析VPN内部各个服务的名称。
GitHub junkurihara/doh-auth-proxy:本地DNS代理,支持DNS over HTTPS(DoH),Oblivious DoH(ODoH)和Multiple-relay-based ODoH extension(Mutualized ODoH;MODoH),此外还支持基于域名的过滤和代理/解析器身份验证。
同样地,我们在VPN内部安装了反向代理,使其与外部的Web服务一样,支持HTTPS。通过这个反向代理,我们将内部使用的Web服务的HTTP请求进行路由。
爱的子(邮件)
在电子邮件方面,接受外部网络访问的SMTP是公开的,但将POP/IMAP隔离在VPN内部,形成了一种虚拟状态。
2022年9月份目前提供的主机服务列表。
下面是更详细描述的构成图,对于个人的兴趣项目来说,规模相当可观呢。

在接下来的内容中,我们将介绍正在自行托管的服务。
无需VPN即可访问的对外网服务
VPN(Wireguard,OpenVPN)
这个VPN服务器可以进行分流以访问被隔离的内部限定服务。基本上使用Wireguard就足够了,但由于Wireguard只支持基于UDP的通信,所以在禁止出站UDP通信的环境下无法使用。为了应对这种环境,我们也提供了OpenVPN。
GitHub linuxserver/docker-wireguard:
GitHub上的linuxserver/docker-wireguard:
我在自定义上述的Docker镜像并使用它。对于客户端,我使用原生的WireGuard客户端,而对于OpenVPN,我使用比原生更易用的pritunl客户端。我认为使用pritunl作为OpenVPN服务器也是一个不错的选择。
Mac App Store: WireGuard
iOS App Store: WireGuard
Pritunl
作为基于TCP的VPN,DSVPN(dead simple VPN)也可以作为选择。与复杂的OpenVPN相比,它非常简单易用。但请注意,它无法在iOS设备上使用。
GitHub jedisct1/dsvpn:一个简单易用的VPN。
分散式社交网络 (Mastodon, Misskey)
虽然并非一个人,但我还是创建了一个小规模的公开实例。这是为了在朋友之间一起开心玩耍,或者仅仅是出于兴趣而已。关于Mastodon,我在2017年当Mastodon开始流行时就开始了运营,并且一直在不同的VPS之间转换托管。而Misskey则是大约两年前出于兴趣开始,与Mastodon共存并玩耍。

Jitsi-Meet: Jitsi-会议
这是一个由Java制作的网上会议服务。它是Zoom和Google Meet的替代品。它的便利之处在于无需用户注册即可使用。主要用于在线聚会,但偶尔也用于小型会议。

GitHub jitsi/docker-jitsi-meet 可以被翻译为 “GitHub上的jitsi/docker-jitsi-meet”。
由於官方提供了Docker映像的發行,因此可以輕鬆進行設置。
Mailu (仅支持SMTP)
本次在Mailu中进行的外部公开仅限于SMTP (postfix) 的外部连接端口。关于在VPN内部托管的内容,将在下文中进行说明。
透过VPN进行访问的内部限定服务
石河子授权代理
这是一个自制的DNS代理,用于加密和匿名化DNS数据包。连接到VPN时,将doh-auth-proxy的docker容器地址设置为默认的DNS服务器。
doh-auth-proxy可以通过加密和匿名化DNS,阻止对特定域名的访问,或者覆盖对特定域名的请求并将其重定向到任何地址。使用这种覆盖功能,我们可以对托管在VPN内部的服务容器进行名称解析。
GitHub: junkurihara/doh-auth-proxy: 本地DNS代理器,支持DNS over HTTPS (DoH),Oblivious DoH (ODoH)和基于多中继ODoH扩展的互用ODoH(Mutualized ODoH; MODoH),同时还支持基于域名的过滤和代理/解析器认证。
DockerHub: jqtype/doh-auth-proxy: 使用Rust编写的支持认证连接的DoH和Oblivious DoH本地代理。
Project页面: μODNS项目
使用dnscrypt-proxy也可以做到同样的域名覆盖,但既然我有使用自己开发的更高级匿名化技术(μODNS)的选项,我选择使用它。最明显的好处可能是对特定域名的过滤(广告阻止)。有了这个,就感觉很舒适了。
小型通量
这是一个使用Golang(+PostgreSQL)制作的Feed聚合器。它是Feedly、古老的Livedoor Reader和Google Reader的替代品。正如其所标榜的“专为极简主义者”、“专注于简洁”,其Web界面非常简洁,但运行非常流畅。它还可以与Pocket和下面提到的Wallabag进行集成。

官方Miniflux
GitHub miniflux/v2:极简与有主张的订阅阅读器
在国内看来,FreshRSS和TinyTinyRSS似乎拥有更多用户。然而,实际上我们进行了比较测试后,由于Miniflux的操作轻快且可以与ReadKit配合使用,我们选择了Miniflux。虽然其网页界面相对简约,但通过使用ReadKit,在macOS和iOS设备上都能获得舒适的体验。
袋鼠囊
这是一个由PHP制作的“稍后阅读”服务,它是Pocket和浏览器阅读列表的替代品。我喜欢它可以以PDF和ePub格式进行导出。虽然操作有点重,但我很喜欢它可以通过iOS的“分享”功能或浏览器扩展功能轻松地添加网站。我喜爱并常用它,正如Miniflux一样,它可以与Readkit配合使用。

官方链接 https://wallabag.org/zh-CN
GitHub wallabag/wallabag:wallabag是一个可以自行搭建的应用程序,用于保存网页:保存和分类文章。稍后阅读,随心自由。
除了这个之外,我还同时使用了使用Golang制作的栞(shiori),但为了与iOS设备和浏览器连接,我主要使用Wallabag。在性能方面,栞(shiori)明显更出色。
GitHub go-shiori/shiori: 使用Go构建的简单书签管理器
Mailu(邮件接收协议(POP)、邮件发送协议(IMAP)、Web界面)
这是一个基于Docker主机托管的一体化解决方案,用于搭建邮件服务器。包括postfix、dovecot、clamav、rspamd、rainloop等组件,所有必需的服务都可以在Docker上搭建。只需在已经安装Docker的环境中运行,大约30分钟就可以完成搭建。当然,前提是您拥有自己的独立域名。

官方Mailu
GitHub Mailu/Mailu: 隔离的电子邮件分发 – 邮件服务器作为Docker镜像
将 postfix 的 SMTP 相关端口开放给外部连接,而其他的 POP、IMAP、Web 接口等端口只能通过 VPN 进行连接。
Mailu是一种全方位解决方案,它支持多域名、邮件转发和邮件别名,并且可根据需要设置SPF、DKIM、DMARC等配置参数。以前我对邮件服务器的运维持有些许恶感,但是有了Mailu的一体化解决方案,好像我可以继续顺利地进行运维了。
在中国,有许多类似于Docker的解决方案,例如mailcow和docker-mailserver都很有名。然而,Mailu也需要相当大的计算机性能和内存。如果要运行反病毒软件(clamav),至少需要两个核心的CPU和2GB以上的内存,否则看起来会很慢。
GitHub 码头杂货邮箱邮件服务/mailcow:邮件杂货店:Docker化 – ? + ? = ? – 我们与 ?? 一起站立
GitHub 码头杂货调用邮箱邮件服务/docker-mailserver:生产就绪的全方位而简单的邮件服务器(SMTP、IMAP、LDAP、反垃圾邮件、反病毒等)在容器内运行。
Vaultwarden(原名:bitwarden_rs)
这是一个使用Rust开发的Bitwarden克隆的密码管理服务。虽然本身的Bitwarden服务器也可以进行自托管,但是由于使用了.NET编写,对服务器的要求较高。因此,在自托管领域中,使用Rust开发的Vaultwarden克隆更受欢迎。

我读了源代码并注意到Vaultwarden在登录密码的哈希化中使用了PBKDF2算法。虽然在实际应用中PBKDF2没有太大问题,但为了使用更新且更强大的算法Argon2,我进行了修改。当然,我在追随原始版本的基础上将其docker化。使用方法与原版Vaultwarden以及我的修改版都与Bitwarden官方版本一致。
官方版本:GitHub dani-garcia/vaultwarden:用Rust编写的非官方Bitwarden兼容服务器,之前被称为bitwarden_rs
Argon2版本的分支:GitHub junkurihara/vaultwardenArgon2版本的Docker镜像:DockerHub jqtype/vaultwarden-argon2
“代码服务器”
这是一个用于在浏览器中使用VSCode的服务。当然,它与VSCode一样,是用TypeScript(Node.js)开发的。为了在长期出差期间当笔记本电脑损坏时,也能够在iPad等设备上进行编程而启动了这个服务。不过,按照我的使用方式,只要电脑不坏,它就几乎没有用武之地了。而且随着官方的Visual Studio Code Server的推出,未来可能不再使用它。
GitHub程序员/码云码云
WordPress – 网络内容管理系统
这是众所周知的PHP (+MySQL)制作的博客引擎。虽然不是日记,但我喜欢记录旅行中的照片,并在之后回顾它们。我已经将其作为个人的照片日志使用了十多年。由于只有我能看到,所以我将其放在VPN里。
Docker 正式版: 快速开始:使用Compose和WordPress
在官方网站上的部署说明中,使用Docker进行部署非常简单。
番外篇:其他已不再是个人私事或仅限于朋友圈内的事情。
DNS加密和匿名化服务(DNSCrypt,DoH,μODNS)
接收的服务器,能够处理通过doh-auth-proxy或dnscrypt-proxy加密的DNS请求。它是使用Golang或Rust编写的。此服务器可处理加密的DNS查询和响应。
-
- リレーして他のサーバへ転送し、匿名化
- 復号して同時にホストされるUnboundで名前解決
我們正在提供支持DNSCrypt、DNS over HTTPS (DoH)、Oblivious DNS over HTTPS (ODoH)、Mutualized Oblivious DNS (μODNS, 基於DNSCrypt和ODoH的)的服務。我們使用自身實現的伺服器來支持ODoH和μODNS。請參閱以下網站以獲取更多詳細信息。
DNSCrypt 官方网站: DNSCrypt
DNSCrypt GitHub 项目: DNSCrypt/dnscrypt-resolvers
ODoH RFC9230:高度隐秘的HTTPS DNS
μODNS:Project页面
在日本国内,可用的DNSCrypt服务器并不是很多,因此似乎处理了相当数量的查询。因此,这已经不再是个人或仅限内部使用的情况了。我们通过分离多个VPS来管理和运营服务器。
监控DNS加密和匿名化服务器(Prometheus,Grafana)。
我们使用Prometheus来收集前述DNS相关服务器的指标数据。然后在VPN内的Grafana中将Prometheus收集到的指标数据进行聚合和可视化。

由于Grafana能够可视化Strava的训练日志等,因此它非常方便。
Grafana 官方: GrafanaLabs
Prometheus 官方: Prometheus
这个网站很有参考价值。
GitHub: 令人惊叹的自托管/令人惊叹的自托管、令人惊叹的开源软件管理员/令人惊叹的系统管理员
以下是一份关于自助托管和系统管理软件的庞大清单。几乎全部都是FLOSS(自由/开源软件)。从这里开始寻找项目会更加顺利。
-
- GitHub awesome-selfhosted/awesome-selfhosted
GitHub awesome-foss/awesome-sysadmin
Reddit: 自托管
这是一个由Reddit自助托管的子论坛。”最近你自助托管了什么?(列出你已经自助托管或计划中的项目)” 这样的问题很有参考价值。当你对使用Mailu或Mailcow作为邮件服务器感到犹豫时,你可以在这里搜索并看到各种意见。
- Reddit r/selfhosted
结束
请在最后一项中说明您目前使用的是哪种Google Workspace和一般Google服务的替代方案。
-
- Google Workspace:
GMail → さくらのメールボックス → Mailuのセルフホスト
Google Calendar → Apple iCloud Calendar (→ Baikalのセルフホスト予定)
Google Drive → ローカルのNAS/Dropbox/Apple iCloud Drive (NextCloud使うべき)
一般Googleサービス:
Google Public DNS → Cloudflare 1.1.1.1 → DNSCrypt/DoH/μODNSの自力実装・Unboundと共にセルフホスト
Google Chrome Password Manager → KeepassXC/Vaultwardenのセルフホスト
Google Meet → Jitsi-Meetのセルフホスト
Google Play Music → ローカルのNASからストリーミング/Spotify
Google Podcasts → PocketCasts/Spotify
Google Photos → ローカルNASへのバックアップ/Dropbox/pCloud
Google Search → Brave Search/DuckDuckGo
Google Reminder → Apple iCloud Reminder (→ ???)
Google Keep → Apple iCloud Notes (→ ???)
Google Analytics → 解析自体やめた (Matomo使うべき)
Google Maps → Apple Maps/OpenStreetMaps/OsmAnd
Google Docs → 使うの自体やめた (必要に応じて対応予定)
Google Form → 使うの自体やめた (必要に応じて類似ソフトを都度セルフホスト可能)
最终,目前完全以Google Workspace的自托管替代方式仅限于邮件。关于日历和云盘等问题,使用NextCloud进行托管可以解决各种问题。但考虑到VPS存储空间的问题,目前暂时放弃了这个方案。但如果引入了功能强大的NAS,家庭托管似乎更好。另外,还存在对过于依赖Apple的问题,计划逐渐过渡到其他解决方案。至于DNS,已经不能算作替代的选项。
从去年开始到今年,我真的被Google的服务更改所困扰。通过最近一段时间的思考,我觉得重要的是,“对于我非常依赖的服务或无法访问的致命性数据,我希望尽量将其掌控在我自己的制约之下,以应对突然的服务更改或封禁”。我想要掌握自己的生杀大权。
取消谷歌化互联网↩
恢复隐私↩
棱镜突破↩
隐私工具↩
隐私指南↩
到底是根据什么样的政策决定的真是个谜,但是我们经常看到只有TCP 80/443可以通讯的组织。它们只是伪装成HTTPS,只是通过TCP 443出去而已吧….由于基于UDP的HTTP/3已经标准化,这样的政策应该会消失吧,应该吧。↩
为了使用这个DNS,分配VPN连接的成员现在也有相当多的情况。↩