Raemote

你本来就在跑的应用,现在手机、电脑随处可用。

在电脑上装好 Raemote,用手机扫一次二维码——或者把链接贴给 raemote connect,直接在浏览器里打开同样的应用。无论哪种方式, 你本来就在跑的那些东西——影音、控制台、笔记、项目——都在眼前: 端到端加密,而且不会把任何东西暴露到公网上。

如果你以前为了在外面访问自己的东西,专门搭过隧道、VPN 或者反向代理—— 这条路可以短很多。

  • 无需账号
  • 不暴露到公网
  • 端到端加密
  • 必要时走中继
  • 开源,AGPL-3.0

三步搞定

安装、扫码、完成

  1. 装到电脑上

    macOS 或 Linux 上一条命令。它会装一个后台服务,自动发现你已经跑着的那些网页应用。

  2. 扫一下二维码

    运行 raemote pair,用 Raemote App 扫一下——或者把链接贴给电脑上的 raemote connect。这个链接是短期的,在过期之前可以配对不止一台设备。

  3. 打开应用

    你的应用会列出来。点开就在 Safari 里打开,登录状态和家里一模一样。

curl -fsSL https://github.com/raemote/raemote_cli/raw/main/install.sh | sh

GitHub 不顺的时候用 Gitee 镜像: curl -fsSL https://gitee.com/pppkin/raemote_cli/raw/main/install.sh | sh

大家都用它做什么

都是些小事,随时随地

Raemote 不做一件大事,它只是把那些零碎又常用的事挪到你手边—— 那些你不想等到回家才能做的事。

  • 在家里

    看一眼家里的情况

    备份跑完了吗。NAS 还在线吗。家里多少度。坐在沙发上就能看摄像头。

    Jellyfin · Immich · Home Assistant · Uptime Kuma

  • 工作

    出门在外也能干活

    在看板上挪一张卡。看一眼合并请求。看看这次构建过没过。打开管理后台。

    Vikunja 或 Planka · Forgejo 或 Gitea · Woodpecker · Portainer

  • 省钱

    省掉一份月订阅

    RSS 订阅、书签、文档归档、菜谱、账本——都是你自己的,住在自己的机器上。

    Miniflux · Linkding · Paperless · Mealie · Actual

  • 做东西

    随手打开正在做的那个

    开发服务器、预览环境、Notebook、数据库后台——就在你眼前这台机器上, 从口袋里点开就能用。

    开发服务器 · Jupyter · code-server · Adminer

  • 分享

    和一个人共享

    给家人的设备单独配对,它有自己的身份;随时可以一键撤销。

    一台设备一个身份 · 随时撤销 · 不共用账号

  • 浏览器

    或者直接用浏览器

    raemote connect 把一台电脑当普通设备配对,在浏览器里提供 同样的应用列表——走的是手机 App 同一条加密隧道。

    一条命令 · 登录状态保留 · 像其它设备一样可撤销

它为什么存在

费事的做法,和省事的做法

想在外面访问自己的机器,通常意味着要做一个小型网络工程。 喜欢折腾这个过程的人很多,这没什么不好——只是你不该为了看一眼摄像头, 必须先完成这个工程。

  • 费事的做法

    一整套要维护的东西

    • 一台有公网 IP 的机器,或一台小 VPS
    • 域名和 DNS 解析
    • 证书和反向代理配置
    • 手机上的 VPN 客户端
    • 防火墙规则,以及一直打补丁
  • 省事的做法

    一条命令,一次扫码

    • 在已有的那台机器上装好 Raemote
    • 用 App 扫一次二维码
    • 点开一个应用——已经登录好了
    • 不会有任何东西被公开到公网

    如果你本来就喜欢那套折腾方式,继续用就好。Raemote 不需要它们, 也不会碍事。

功能

Raemote 为你做的事

  • 发现

    它自己找应用

    Raemote 读取本机正在监听的端口列表——不扫端口、不用配置——并从页面标题里读出应用名字。新启动的应用会自动出现。

  • 手机端

    在真正的 Safari 里打开

    应用在系统浏览器视图里打开,每个应用都有自己稳定的源,因此登录状态、Cookie 和本地存储都能跨多次启动保留下来。

  • 手机端

    同时开多个应用

    打开的应用会作为后台标签页继续运行,切换是瞬时的,页面也保持在你离开时的样子。

  • 浏览器端

    同样的应用,浏览器里也能开

    raemote connect 会像普通设备一样配对一台电脑,把你的应用放进 桌面浏览器——同一条加密隧道,每个应用自己的源,登录状态照旧,多个应用可以 同时在标签页里打开。

  • 连接

    端到端加密,能直连就直连

    网络允许时,客户端直接和你的电脑通信;不允许时,由公共中继转发——它转发的字节自己读不懂。

  • 连接

    在麻烦的网络里也能用

    支持配置出站 HTTP 代理,用于那些封掉常规路径的网络——酒店、校园、公司网络都算。

  • 管控

    谁进来由你决定

    查看已配对设备、给它们起名字、随时撤销,也可以在 App 或命令行里用一次性邀请码添加新设备。每台配对设备可以访问你的全部应用,或者只访问你允许的那些。

  • 运维

    方便自查

    raemote doctor 会体检守护进程、权限、配置、发现和中继;raemote logs 能看到发生了什么。服务由 launchd 或 systemd 托管。

  • 信任

    开源,AGPL-3.0

    Raemote 跑在你家里,握着你的私人服务的钥匙,所以服务端和 App 都公开、可审计。代码可以自己看,威胁模型也公开。

工作原理

两个组件,一条私有连接

一个叫 raemoted 的小型服务端跑在放着这些应用的电脑上; 客户端展示它发现了什么,并把它们打开——手机上的 Raemote App,或者浏览器里的 raemote connect。中间没有账号,也没有云服务。

示意图:手机与电脑上的 raemoted 之间建立端到端加密连接——能直连就直连,否则经过读不懂内容的公共中继;raemoted 再把请求反向代理到本机的各个网页应用。
网络允许就直连,不允许就走中继。
技术细节

连接由 iroh over QUIC 提供:两端互相发现并尝试直连,只有直连不可用时才动用公共中继。两种情况下都是端到端加密。

其上跑两套应用协议:raemote/bind/0 只负责用短期 token 完成配对;raemote/0 提供一小套 HTTP 接口 (/_hub/catalog、/_hub/info、 /_hub/devices、/_hub/discover),并把 /app/<名字>/… 反向代理到应用真实地址。

在客户端这一侧,每个应用有自己的本地回环源,设备上的其它程序碰不到它—— iOS 上由每次启动都会变的密钥守护,浏览器客户端则校验请求的 Host。请求全程 流式转发——请求体、上传、服务端推送和 WebSocket 都原样通过。

信任模型

只有你配对过的设备能进来

配对只做一次。之后每台设备——你的手机、跑着 raemote connect 的电脑、朋友的手机——都凭各自的加密身份被识别:没有账号要登录,也没有密钥要保管。

示意图:配对二维码里包含服务端身份和一个短期 token;手机出示一次 token,服务端把手机身份记录到磁盘;此后凭身份识别,随时可以撤销。
二维码只是一次性的引导,不是长期密钥。
  • 已配对身份保存在服务端;手机丢了,一条命令就能撤销。
  • 每台配对设备都可以被限制成只访问你允许的应用;邀请只能缩小发出方自己的权限,绝不能扩大。
  • 配对失败次数过多会锁定该 token;token 自己也会过期。
  • 不会向公网暴露任何东西——只有配对过的设备能访问这些应用。

想看细节?威胁模型是公开的: Raemote 防什么,以及刻意不防什么。

另一个客户端

浏览器里的 Raemote:raemote connect

raemote connect 是一个完整的客户端:用和 App 完全相同的链接、 完全相同的二维码、完全相同的加密隧道给电脑配对,再把你的应用放进桌面浏览器:

raemote connect              # 打开上次用的服务端
raemote connect '<来自 raemote pair 的链接>'

应用列表跑在 127.0.0.1:7788,每个应用还会分到一个 自己的回环端口,所以 URL、Cookie 和登录状态与在服务端完全一致。配对后的电脑 会出现在 raemote devices list 里,和其它设备一样——可以起名字、 用 --ports 限制、随时撤销。

说人话

只出现一次的几个词

应用
有网页的东西——就像你在浏览器里打开的那些网站。
服务端
跑着这些应用的那台电脑。对 Raemote 来说,就是装了 Raemote 的那台机器。
端口
一个应用监听的数字编号,比如 localhost:3000。
本机
你的电脑,在你的电脑上看向它自己时的样子。
中继
直连不通时的公开中转站。它帮你转发,但读不懂内容。

说在前面

Raemote 今天到哪一步了

还没有、但正在做的:

  • 只提供 HTTPS 的应用(比如你已经配好证书的那些)暂时还连不上。 不少自托管软件默认就是普通 HTTP,这类现在就能用。
  • 暂时还没有推送通知——需要打开 App 才会更新。
  • 应用需要运行在装了 Raemote 的那台机器上。

永远不会做的:

  • 不会把你的应用公开到公网上。
  • 不会替代应用自己的登录——每个应用你还是要自己登录。
  • 保护不了一台已经被攻破的手机。
  • 它不是文件传输工具,也不是远程桌面。

看看安装步骤