-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Remote access zh
English · Tiếng Việt · 中文
从 1.4.2 起,SkimMail 可以通过隧道把自己暴露到公网上——不需要在你的路由 器上开放任何入站端口——用 Cloudflare Tunnel 或 Tailscale 作为可选的、运行时 下载的插件来实现。
一个自托管实例通常活在私有网络里:局域网、VPN,或者绑定在 localhost 上,
由你自己运行的反向代理挡在前面。这在家里没问题,但「用手机流量查一下邮件」
需要一个能公开访问的地址,而获得它的常规方式——一台有公网 IP 的 VPS、你自
己的反向代理、一张 TLS 证书——是大多数自托管者不想仅仅为此而搭建的基础设施。
Remote access 让你不需要这些就能获得一个公网(或仅 tailnet 内可见)的
HTTPS 地址,代价是要把流量的元数据托付给一个隧道厂商。
Settings ▸ Remote access,仅所有者——/api/remote/* 下的每一个路由都要
求所有者角色。
| 厂商 | 插件 | 需要什么 | 地址是否稳定 |
|---|---|---|---|
| Cloudflare Tunnel,quick tunnel |
cloudflared(Cloudflare 自己的二进制,已做 SHA256 固定) |
什么都不用——无需账号、无需 token | 否——每次启动都是一个新的随机 trycloudflare.com URL |
| Cloudflare Tunnel,named tunnel | cloudflared |
一个 Cloudflare tunnel token,以及你在 Cloudflare 上为它配置的 hostname | 是 |
| Tailscale |
skimmail-tunnel-ts(SkimMail 基于 tsnet 自行构建) |
一个 Tailscale auth key | 是,在你的 tailnet 内;只有开启 Funnel 才公开 |
两个插件都是按需下载的——基础二进制、apt 包或容器镜像里都不包含它们——安装 /更新/移除都走和其他运行时插件一样的机制;插件在磁盘上的位置、manifest 签 名校验,以及更新时「in use」影响的含义,见 Operations ▸ Plugins。这个界面自己的 Install/Uninstall 按钮只负责把插件 放到磁盘上;更新一个已安装的厂商插件是在 Settings ▸ Plugins 里完成 的,不是在这里——这个界面本身没有 Update 按钮。
保存某个厂商的配置和启动隧道是同一个动作,Save & connect。token/auth-key
字段是只写的:之后编辑时留空会保留已存的值,和 Settings 里其他密钥字段的
约定一致。Cloudflare token 通过环境变量传给 cloudflared 子进程,绝不出现
在命令行里——命令行是主机上任何能运行 ps 的人都能看到的。
隧道运行起来后,面板会显示实时 URL、一个 Copy 按钮,以及一个在客户端本 地渲染的二维码(没有任何第三方服务会看到这个 URL),可以直接用手机摄像头 扫描——在小屏幕上什么都不用打字。任何一种 Cloudflare tunnel 一旦运行就总是 公开的;Tailscale tunnel 只有开启 Funnel 才公开,否则只有你自己 tailnet 里的设备能访问。
启动一个隧道会停掉当前正在运行的那个——同一时刻只有一个隧道进程在运行, 不论厂商。
在这里做任何改变——保存配置、安装、启动、停止——只要服务器运行在
AUTH_MODE=none(完全跳过登录界面的模式,用于真正私密的网络)下,都会被直
接拒绝。界面会把厂商卡片替换成一条纯红色横幅,API 返回 409 auth_mode_none。这是代码里的硬性拦截,不是可以从 UI 里覆盖的设置:关闭身份
验证和打开 remote access 被有意设计为互斥——因为一个通向没有登录的实例的公
网隧道,会把整个邮箱交给任何找到这个 URL 的人。AUTH_MODE=none 的用途见
安全。
当隧道处于公开状态时,如果双因素认证看起来是关闭的,界面会显示一条琥珀色警 告。有一个值得知道的限制:这个检查看的具体是 account id 1,而不是当前 登录的人。在常见的单所有者实例上,那就是你自己,所以这个提示是准确的;在多 用户实例上,它反映的是最早创建的那个账户,未必是正在打开这个界面的所有者, 也未必和你一样开了 2FA。
| 起始版本 | 1.4.2 |
| 角色 | 所有者 |
| 厂商数量 | 2 —— Cloudflare Tunnel、Tailscale |
| 并发 | 两个厂商合计同一时刻只有一个隧道进程 |
| 2FA 提示 | 只检查 account id 1,不是调用者本人 |
| 硬性禁用于 | AUTH_MODE=none |
-
不附加任何自己的身份验证。 公网隧道让 SkimMail 自身的登录成为互联网
和你的邮件之间唯一的屏障——这正是
AUTH_MODE=none拦截和 2FA 提示存在的 原因。 - 不能同时运行两个隧道。 启动一个会停掉当前正在运行的那个厂商;两者之 间没有负载均衡或故障转移。
- Cloudflare quick tunnel 让你完全无法控制地址。 只有带 token 的 named tunnel 在重启之间才是稳定的。
- 不管理任何自己的 TLS 证书。 两个厂商都在各自的边缘节点终止 TLS; SkimMail 从不会看到或存储这方面的证书。
- 运维 —— 插件在磁盘上的位置、如何更新,以及 manifest 签 名校验
-
安全 ——
AUTH_MODE,以及为什么none会完全禁用这个功能 -
配置 ——
SKIMMAIL_PLUGINS_URL,用于把插件 manifest 的抓取指向一个私有镜像
SkimMail · skimmail@base101.app · 2026-09-15 · commit dffbb18