使用Cloudflare Tunnels实现内网穿透,同时突破80/443限制
(感谢天地极限大佬、左右同学指导,完成了内网穿透设置,可域名不带端口访问。本文大部分内容为抄袭原作者:左右。记录下来主要为防止本人老年痴呆忘记下次如何操作)
玩NAS的朋友应该都知道,国内由于IPv4资源紧张,运营商通常不会主动给家宽用户开公网IP,即使要到了公网,也会因众所周知的原因,无法使用80/443端口,对于喜爱折腾的NAS玩家来说可谓如鲠在喉。
一般来说,有公网的情况下,可以使用DDNS实现域名访问家里的NAS,但是无法使用80/443端口;如果没有公网,也可以借助像Frp、Zerotier、NPS/NPC等家喻户晓工具实现内网穿透,不过都各有优缺点。本文要介绍的通过大名鼎鼎的工具–CloudFlare Tunnels,实现无公网的情况下,穿透到内网,并直接使用80、443端口。
前提条件
- 注册一个Cloudflare账号,选择免费计划就行
- 准备一个域名,没有就买一个,不想买可以自己找免费的
将域名解析转移到Cloudflare
1、登录Cloudfalre,将你的域名添加到Zones
中,然后在DNS
上找到名称服务器的网址,如下图红框所示,两个网址就是:将域名添加搭配Cloudflare中并找到NS服务网址
2、比如,域名是从腾讯云购买的,则找到你的域名,在管理中奖DNS解析服务器改成Cloudfalre的名称服务器网址即可,如下图在腾讯云控制台中修改域名的DNS解析服务器
创建Tunnels
1、打开Cloudfalre控制台,依次点击Zero Trust
-> Access
-> Tunnels
首次点Zero Trust会弹出下图这个,这里随意填一个,这个是隐藏的域名,专属你的
2、创建Tunnel
1) Access
-> Tunnels,
点击Add a Tunnel
按钮,创建一个新的隧道
2)名称按自己想法填,然后点击Save Tunnel
3)保存后,回到Tunnels界面,找到上面创建的Tunnel,点击右边三个点,选择Configure
,到达配置页面
4)在配置界面,切换到Public Hostname
页签,点击Add a Public Hostname
,创建一个新的穿通域名
参考图中的说明进行填写,划重点:
Subdomain
:就是你要用的子域名,比如你想用x.abc.com访问家中的服务,就填xDomain
:就是你的域名,直接下拉箭头选择Path
:路径,不用填type
:内网服务的协议,一般是http,如果你非要给内网服务配置了https,你就选httpsURL
:内网服务的ip+端口,比如你想穿透到内网的WP博客,则填写WP的ip和端口。注意:此处如果内网服务是docker部署的,需要注意使用合适的ip和端口
- 设置并保存后,回到域名的DNS记录页面,会看到已经自动添加了一个CNAME记录,并且开启了代理。什么都不要动,保持就行。
部署connector
上面的步骤已经完成了域名配置以及隧道配置,但是要想让域名自动找到你的内网服务,还需要你在内网安装一个程序,或者叫连接器,用于与Cloudfalre Tunnel进行通信。
1、回到Tunnels界面,并点击Configure
进入配置页面,在Overview
页签中,可以看到选择安装环境的按钮,选择一个,然后安装下面的提示安装即可。
2、本文以Docker
为例,选择Docker
按钮,下面会显示出一键启动镜像的命令,把命令复制到你的内网机器上,打开终端(或者ssh),直接执行即可。实际上就是启动了一个Cloudflared
容器
version: '3.8'
services:
cloudflared:
container_name: Cloudflared
restart: unless-stopped
network_mode: host
environment:
- cloudflared --no-autoupdate
command: tunnel --no-autoupdate run --token 改成你的token
image: 'cloudflare/cloudflared:latest'
token和上面图一样在获取,如下图(注意粘贴token要去掉别的无用的代码,因为按钮复制的是整个docker拉取的命令):
3、部署完成后,去博客后台,用你的域名替换原有的内网ip
强制HTTPS设置
起飞吧
现在,打开浏览器,输入你域名(不需要输入端口),你会发现可以直接在外网访问内网的服务了。