【科学新思路】👏反向回源之 Gost + Cloudflare Tunnel

# 项目介绍 项目地址: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
fscarmen

大家好!我是fscarmen,一个热爱科技和研究各种项目的爱好者。我喜欢分享我的发现和经验,希望能与大家一起探索和学习。

以下是我的一些项目分享平台:
https://github.com/fscarmen
https://gitlab.com/fscarmen
https://github.com/fscarmen2

此外,我还有一个YouTube频道,欢迎大家订阅和观看我的视频:
https://www.youtube.com/@fscarmen/videos

*

发表评论 (0)
后一页 前一页