type
status
date
slug
summary
tags
category
icon
password
比如我是公网IP 58.12.3.6下的内网中的一台机器172.17.12.32 他是如何实现外网访问到我这台172.17.12.32的
Cloudflare Tunnel(原称 Argo Tunnel)是一种安全的反向代理技术,允许您无需开放防火墙端口即可让外网访问您内网中的服务。它的核心原理是通过建立一条持续的、加密的隧道,将您的内网服务暴露到互联网,同时通过 Cloudflare 的网络层提供安全性和性能优化。
原理分析
- 隧道的建立:
- 您的内网机器(172.17.12.32)运行一个 Cloudflare Tunnel 客户端(
cloudflared
)。 - 该客户端主动与 Cloudflare 的服务器建立一条加密的、长连接隧道(通常基于 HTTP/2 或 WebSocket)。
- 隧道连接的方向是 内网机器向 Cloudflare 服务器,这避免了内网防火墙配置的复杂性。
- 公网到内网的路由:
- Cloudflare 将为您的服务分配一个唯一的域名(如
example.com
)。 - 当外网用户访问
example.com
时,DNS 请求解析到 Cloudflare 的 Anycast IP,用户的流量会被路由到距离用户最近的 Cloudflare 数据中心。 - Cloudflare 数据中心会通过加密的隧道,将请求转发到运行
cloudflared
客户端的内网机器。
- 内网服务的响应:
cloudflared
客户端接收到从隧道传递来的请求后,会将流量转发给内网的实际服务(如运行在172.17.12.32:8080
的服务)。- 服务的响应通过隧道返回到 Cloudflare,然后由 Cloudflare 发送给外网用户。
具体实现步骤
1. 前提条件:
- 您的机器(172.17.12.32)可以访问公网(无需拥有公网IP,只需能访问互联网)。
- 已经注册并验证了一个域名(如
example.com
)。
2. 安装 cloudflared
:
- 在内网机器上下载并安装
cloudflared
(Cloudflare Tunnel 客户端)。
- 登录 Cloudflare 并验证您的域名。
3. 启动隧道:
- 使用以下命令启动一个隧道:
- 绑定域名并指定内网服务:
- 这会告诉 Cloudflare 隧道将流量指向内网服务
172.17.12.32:8080
。
4. DNS 配置:
- Cloudflare 会自动为
example.com
添加 DNS 记录,指向 Cloudflare 的 Anycast IP。
5. 外网访问:
- 外网用户访问
https://example.com
时,Cloudflare 会通过隧道将流量路由到172.17.12.32:8080
。
为何能够穿透内网?
- 主动连接机制:
cloudflared
客户端主动与 Cloudflare 的数据中心建立连接,因此绕过了内网 NAT 和防火墙对入站连接的限制。
- 基于 Cloudflare 网络的反向代理:
- 外网用户的请求不会直接进入内网,而是通过 Cloudflare 的网络反向代理到隧道中。
- 端到端加密:
- 隧道使用 TLS 加密,确保内网和外网之间的通信安全。
安全性分析
- 端到端加密:隧道通信经过加密,防止中间人攻击。
- 隐藏内网 IP:外网用户只能看到 Cloudflare 的 IP,而看不到您的内网地址。
- 访问控制:您可以通过 Cloudflare Access 对外网访问进行身份验证。
这种架构的优点是部署简单,安全性高,同时无需暴露公网IP或配置复杂的端口映射。
- Author:Gweek
- URL:https://www.myla.eu.org/article/cloudflaresd
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!