永久免费的科学上网方案?
2025 年 06 月 19 日
写在前面的备注:本文内容中, 关于 docker 镜像的部分已经过时,具体原因请参考《科学上网的碎碎念》。本文随时可能删除。
这几天发现了一个 VPS 厂商,叫 claw cloud。他们家提供了一个所谓应用部署平台,允许你直接部署 docker 应用,按使用量付费,关键是对于 github 账户超过 6 个月的用户,每月送 5 美刀。所以如果使用量不大的话,这就是永久免费了。
对于我来说,科学上网总是需要一些备份方案。那么,问题就转换成了,怎样才能在这里使用最低的资源完成科学上网?
先用一句话简单描述这个方案,也就是:cloudflare tunnel -> cloudflared@docker -> xray@docker。能看懂的话,后面的基本可以不用看了。
构建 Docker 镜像
实际上我直接在 docker hub 上发布了一个做好的镜像,不过目前觉得还不完善,因此还没开始写说明。
大概记录一下思路:
- 镜像要尽量精简,因此系统打算选 alpine。但考虑到 xray 和 cloudflared 都没有 alpine 所需要的 musl 版本,因此选了 frolvlad/alpine-glibc。
- 构建镜像时,下载 cloudflared 和 xray 并放到特定位置。
- 需要构建一个 xray 的配置文件模板。
- 启动镜像时,根据预先配好的环境变量:
- 生成 xray 配置文件。
- 启动 xray 和 cloudflared。
- 在 log 中打印链接。
已完成的镜像如何使用
当前版本只是自用,所以使用起来不怎么灵活。简单说一下要点。
- 要保证目标地址固定,所以需要有 cloudflare 账号,以及一个域名,用来建立 cloudflare tunnel。(注:没有 cloudflare 账号和域名的话,得到的域名只能是临时域名,也无法直接生成链接)。
- 建立 cloudflare tunnel 时,需要记录 token、公共主机名(host)、以及对应的服务端口(服务可以配成 http://localhost:9090,9090 即是默认端口)。
- 需要构建一个 uuid,以及一个 path,后者可选。
uuid 可以用任意方式生成,例如
xray uuid
,或New-Guid
(PowerShell),或uuidgen
(bash)。
也就是说此时应该记录了以下数据:
- token
- host(公共主机名)
- port(默认 9090)
- uuid
- path(以 / 开头的字符串,默认为 /)
在 run.claw.cloud 中,按照如下步骤:
- 创建 app,拉取
cliffhan/tunneled-xray
镜像。 - 使用最小资源(0.1 CPU,64M 内存)。
- 设置以下环境变量(注意右边的值都是记录的内容,而非字面值):
- XRAY_UUID = uuid
- XRAY_PORT = port(可选,默认使用 9090)
- XRAY_PATH = path(可选,默认使用 /)
- CFT_HOST = host
- CFT_TOKEN = token
- 启动 app,查看 log。
- log 开头部分,会有一个 vless 地址,即服务端地址。
- 从 log 其他部分可以看到应用是否正常运行
claw cloud 只允许映射一个端口到外部,所以目前暂无必要,后续再看哪个端口的需求更强烈,再考虑如何修改。