今天给大家分享一个使用 Cloudflare 搭建免费隧道穿透内网,不需要公网IP、服务器,只需要一个 Cloudfare 账号,一个域名即可搭建免费的内网穿透。这个 Cloudflare 方案目前来说相对完美。如果 Cloudflare 不出幺蛾子,理论上可以永久使用。如果你家里没有公网IP,没有也不打算购买服务器完全符合你的预期。最主要的是网页免端口;
Cloudfare 的账号注册简单,你还需要一个域名并且可以解析。目前国内的要求是注册域名必须要通过实名认证,不需要备案。阿里、腾讯都可以。
0x01 注册账户
登录到 Cloudflare 官网注册账户,如果你已经有了账户选择登录;

0x02 添加站点
登录到 Cloudflare 选择左侧的网站,然后添加站点;

0x03 输入域名
输入你的域名,然后点击添加站点;

0x04 选择计划
Cloudflare 提供了多种方案,当然是选择免费的方案,如果你是土豪除外,点击开始使用;

0x05 检查记录
Cloudflare 会检查域名的 DNS 记录,等待即可;

是新添加的域名,所以没有任何的解析记录,点击继续;

提示没有 DNS 记录无法激活 Cloudflare 站点,暂时先不添加 DNS 记录,点击确认;

这一步就需要我们登录到购买的域名控制面板将域名的默认 DNS 更改为 Cloudflare 的 DNS;

点击跳过建议;

检测到我的域名在阿里,需要将阿里的 DNS 删除添加 Cloudflare 的 DNS,需要删除的 DNS 和需要增加 DNS 都给了,只需要登录域名控制台 DNS 修改替换即可;

0x06 修改 DNS
登录到阿里云的域名管理控制台,DNS 修改,删除阿里的 DNS 添加 Cloudflare 的 DNS,这里多说一下,虽然阿里可以添加多个 DNS 但是这里一定要删除阿里的 DNS 只保留 Cloudflare 的 DNS 否则无法激活添加的站点;

0x07 激活站点
当在域名控制台将 DNS 修改为 Cloudflare 的 DNS 后可以在 Cloudflare 的控制台概述看到,域名转移完成,同时也会收到一封邮件提示站点激活完成。

如果出现一下提示,说明站点还没有激活,可以继续进入下一步操作等待 DNS 生效,生效时间最长48小时,耐心等待即可;

0x08 创建隧道
在 Cloudflare 站点管理面板点击 Zero Trust 跳转到新窗口创建穿透隧道;

在 Zero Trust 面板点击 Access,Turst;

点击 Create tunnel (创建隧道)

输入隧道的名称,然后点击 Save tunnel;

0x09 配置隧道
点击 Docker 复制生成的 Docker token 令牌,后续需要用到的只有下图红色框内的内容;

0x10 创建主机
创建隧道主机,设置主机名和内网地址;
Subdomain 填写你主机名。举例:我的这个隧道用于群晖 NAS 所以我设置了 nas;
Domain 选择添加的站点域名,如果添加了多个站点,这里可以选择;
Path 没有特殊需求留空;
Service 选择 http 如果你有 https 证书并且设置好了证书可以选择 https 后面选择内网的地址,如下图中的这个内网地址就是我群晖 nas 内网访问的 http 地址;
最后设置成功了,就可以使用 nas.itquan.cc 直接访问内网的群晖;

如下图,我创建了两个地址,第一个是群晖 NAS;第二个是我的路由器。我可以使用这两个地址在任何地方访问我内网的群晖和路由器;
至此我们在 Cloudflare 创建了站点,在 Zero Trust 中创建了穿透隧道,现在还不能直接使用上述设置的地址来访问。还需要在NAS中配置隧道的客户端;这和 FRP 的设置类似分为服务端和客户端;Zero Trust 就属于服务端,群晖中在部署个客户端;

0x11 安装套件
登录到群晖的套件中心,搜索 docker 并安装这个套件;

0x12 下载映像
打开 Docker 的管理面板,选择注册表,搜索 cloudflare/cloudflared 这个映像;

在搜索结果中右键选择下载此映像;

在弹出的标签选择 latest (最新的)虽然下拉会有很多标签,选择最新的就没错;

等待下载完成;

0x13 创建容器
在 Docker 的管理面板选择容器,点击新增;

选择刚才下载的 cloudflare/cloudflared 这个映像;

网络,选择使用与 Docker Host 相同的网络;

常规设置,可以设置执行容器的权限,容器使用资源的限制。选择高级设置;

在高级设置中,选择执行命令将以下启动命令中的 token 修改为你自己的 token 粘贴进入即可;就是在 0x09 步骤中的 token;
'tunnel' '--config' '/etc/cloudflared/config.yaml' '--no-autoupdate' 'run' '--token' '你自己的token粘贴替换这行'

命令粘贴完毕后点击保存;

常规设置中点击下一步;

存储空间设置,选择添加文件夹;

如果没有 docker 和 Cloudflared 这两个目录就先创建一个 docker 目录,然后再 docker 目录下在创建一个 Cloudflare 目录,然后选择 Cloudflare 目录;

装载路径,填写 /etc/cloudflared

勾选向导完成后运行此容器,点击完成;

此时在 Docker 的管理面板已经看到容器已经运行,右键选择详情可以查看容器的详细设置;

Docker 运行容器详情;

0x14 确认隧道
经过以上步骤,如果不出现什么意外应该是可以直接使用 nas.itquan.cc 来访问内网的群晖NAS了;最后在 Zero trust 管理面板查看确认隧道已经建立,可以看到 Status 状态为 Active、Origin IP 已经获取到了(我是有动态的公网IP)

0x15 访问测试
使用浏览器直接输入访问测试,虽然有点慢但是还能接受。最后使用手机4G 和 DS File APP访问都可以;在使用 DS File 设置地址时需要加入80端口,直接填写地址无法访问;
以下服务均部署在内网:
Alist:https://dl.itquan.cc


