# 项目介绍
项目地址:https://www.github.com/fscarmen/cfd_return
视频教程:
在搭建网络服务的过程中,我们常常会用到 CDN(内容分发网络)来加速用户访问。传统的 CDN 服务,如通常是“正向”的,即用户访问 CDN 节点,CDN 节点再转发请求到远程的 VPS(虚拟专用服务器)。然而,这种方式需要 VPS 具有公网 IP,且可能会受到网络延迟和带宽限制的影响。
今天,我们要介绍的是一个基于 Cloudflare Tunnel 的“反向回源”工具,它能够让你的本地服务通过内网穿透的方式接入 Cloudflare 的 CDN 网络,实现全球加速访问。这个工具支持多种操作系统,包括 CentOS、Debian、Ubuntu、Alpine 和 OpenWRT,安装和使用都非常方便。
# 什么是 Cloudflare Tunnel?
Cloudflare Tunnel 是 Cloudflare 提供的一种安全、可靠的内网穿透服务。它允许你将本地服务暴露给互联网,而无需开放任何公网端口或配置复杂的防火墙规则。通过 Cloudflare Tunnel,你的本地服务可以接入 Cloudflare 的全球网络,享受低延迟、高带宽的访问体验。
# 什么是 Gost?
Gost (GO Simple Tunnel) v3 是用 GO 语言实现的安全隧道,支持多种网络协议和代理方式。它的设计目标是提供一个简单、灵活且高效的网络代理解决方案。Gost 可以用于构建各种网络拓扑结构,如正向代理、反向代理、隧道代理等。
项目地址:https://github.com/go-gost/gost
项目文档:https://gost.run/
# 反向回源的优势
- 突破公网入口限制:传统 CDN 需要 VPS 具有公网 IP,而本工具借助 Cloudflare Tunnel,实现了内网穿透,无需公网 IP 即可接入 CDN。
- 自动优选 cloudflared 接入 IP: 使用热心网友 cf中转ip群群主提供的玩具 cfd,从多个候选的 endpoint(包括 region1.v2.argotunnel.com、region2.v2.argotunnel.com、us-region1.v2.argotunnel.com、us-region2.v2.argotunnel.com 等)中,这些 endpoint 可能包含多个 IPv4 和 IPv6 地址,工具选出延迟最小的接入 IP。
- 应用场景广泛:除了传统的 VPS 外,你还可以在各种容器、游戏平台甚至家庭网络中部署本工具,实现服务的全球加速访问。
- 无需额外优选:由于 Cloudflare 的线路质量通常很好,因此使用本工具时无需进行额外的网络优选,即可享受稳定的访问速度。
- 轻量运行:本工具近乎 0 依赖,不需要处理复杂的证书和配置问题,安装和使用都非常简单。
# 实现原理举例
通过 json 或者 token 的方式,创建了 Cloudflare Tunnel (各自的创建方式看后文),比如隧道名为 gost.argo.com,回源到本地的端口是 20000
## 本地 OpenWRT 运行
```
gost -D -L "relay+ws://:10000?path=/3b451552-e776-45c5-9b98-bde3ab99bf75&bind=true"
cloudflared tunnel --logfile /tmp/cloudflared.log --edge-ip-version auto --config /etc/cfd_return_server/tunnel.yml run
cfd -file /etc/cfd_return_server/ip
```
注意:上述三条命令在执行时均会占用前台终端,导致终端被阻塞无法执行其他操作。因此,如果你打算手动执行,建议利用 screen 或类似的终端复用工具。这样,你可以为每个进程分配一个独立的 screen 会话,使得这些进程能够在后台持续运行,同时你仍然可以自由地访问并控制它们,而不会影响到其他终端会话的使用。
命令解析
gost:
- -D:这个标志启用调试模式,提供详细的日志以便排除故障。
- -L "relay+ws://:10000?path=/3b451552-e776-45c5-9b98-bde3ab99bf75&bind=true":这指定了本地监听的地址和端口,使用 WebSocket 协议。path 参数用于指定 WebSocket 路径,Relay 服务并开启了 BIND 功能,采用 UDP-over-TCP 方式。
cloudflared:
- --logfile /tmp/cloudflared.log:这个选项指定了保存输出日志的文件路径。
- --edge-ip-version auto:这个选项自动选择连接的 IP 版本(IPv4 或 IPv6)。
- --config /etc/cfd_return_server/tunnel.yml:这指定了隧道的配置文件路径。
- run:这个命令启动隧道。
cfd:
- -file:IP地址文件名
## 远程 VPS 运行
```
gost -D -L socks5://[::1]:20000
gost -D -L rtcp://:30000/[::1]:20000 -F "relay+ws://gost.argo.com:80?path=/3b451552-e776-45c5-9b98-bde3ab99bf7&host=gost.argo.com"
```
命令解析
gost:
- -D:这个标志启用调试模式,提供详细的日志以便排除故障。
- -L socks5://[::1]:20000:这指定了本地监听的地址和端口,使用 SOCKS5 协议。[::1] 是回环地址,20000 是端口号。
- -L relay+rtcp://:30000/[::1]:20000:这指定了本地监听的地址和端口,使用 RTCP 协议。30000 是本地端口(如家里或者公司使用的软路由),[::1]:20000 是远程地址和端口(VPS端)。
- -F "ws://gost.argo.com:80?path=/3b451552-e776-45c5-9b98-bde3ab99bf7&host=gost.argo.com":这指定了转发地址,使用 WebSocket 协议。path 和 host 参数用于指定 WebSocket 路径和主机。
# 项目一键脚本部署
## 交互式安装
服务端和客户端均使用
```
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh)
```
## 快捷参数安装
安装服务端
```
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh) \
-s \ # 安装服务端
-p server-origin-port \ # 指定本地服务的端口
-d your-domain.com \ # 指定 Cloudflare Tunnel 的域名
-w your-ws-path \ # 指定 WebSocket 路径(用于与 Cloudflare Tunnel 通信)
-t 4 \ # 只优选 IPv4 endpoint
-a your-cloudflare-auth # 指定 Cloudflare Json 或者 Token 认证信息
```
客户端安装
```
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh) \
-c \ # 安装服务端
-r remote-socks5-port \ # 指定映射到服务端的 SOCKS5 端口
-d your-domain.com \ # 指定 Cloudflare Tunnel 的域名
-w your-ws-path # 指定 WebSocket 路径(用于与 Cloudflare Tunnel 通信)
```
卸载方法
```
bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/cfd_return/main/cfd_return.sh) -u
```
更多参数请参照项目 README.md: https://www.github.com/fscarmen/cfd_return
# Cloudflare Tunnel Json 的获取
用户可以通过 Cloudflare Json 生成网轻松获取: https://fscarmen.cloudflare.now.cc
![](https://pic.forvps.gq/20250111152319004.webp)
# Cloudflare Tunnel Token 的获取
![](https://pic.forvps.gq/20250111152542001.webp)
![](https://pic.forvps.gq/20250111152713706.webp)
![](https://pic.forvps.gq/20250111152759867.webp)
![](https://pic.forvps.gq/20250111152942273.webp)
![](https://pic.forvps.gq/20250111153456679.webp)
# 部署运行截图
## 服务端: Json 方式
- 部署在软路由
![](https://pic.forvps.gq/20250111162644125.webp)
## 服务端: Toson 方式
- 部署在软路由
![](https://pic.forvps.gq/20250111154139704.webp)
## 客户端(VPS)
- 部署在 VPS
![](https://pic.forvps.gq/20250111155304171.webp)
## 应用设置
- ![](https://pic.forvps.gq/20250111155455252.webp)
# 参考内容
Gost v3 转发链: https://gost.run/tutorials/port-forwarding/#_5