你是否有过这样的需求,想要在外网访问自己家里或者公司的内网服务,比如NAS、路由器、摄像头等,但是又不想开放端口或者没有公网IP?如果你有一个域名和一个CloudFlare账号,那么你可以利用CloudFlare Tunnel来实现免费的内网穿透,无需任何额外的服务器或者软件。
CloudFlare Tunnel是CloudFlare推出的一项服务,它可以让你在内网和外网之间建立一个安全的隧道连接,通过CloudFlare的网络来代理流量,从而实现内网服务的外网访问。CloudFlare Tunnel有以下优点:
- 免费:只要你有一个域名和一个CloudFlare账号,就可以使用CloudFlare Tunnel,无需付费。
- 安全:隧道连接是加密的,流量经过CloudFlare的网络,可以享受CloudFlare的防火墙、DDoS防护、SSL证书等服务。
- 简单:只需要在内网设备上安装一个轻量级的客户端软件cloudflared,然后配置一下域名和隧道即可。
- 灵活:你可以根据需要配置多个隧道和多个子域名,来访问不同的内网服务,比如HTTP、HTTPS、TCP等。
那么,如何使用CloudFlare Tunnel来实现内网穿透呢?下面我就以我的NAS为例,来介绍一下具体的操作步骤。
步骤一:注册域名和CloudFlare账号
首先,你需要有一个域名和一个CloudFlare账号。如果你没有域名,可以去阿里云、腾讯云等平台注册一个,价格很便宜。如果你没有CloudFlare账号,可以去https://dash.cloudflare.com/sign-up注册一个,免费即可。
注册好域名和账号后,你需要将域名解析到CloudFlare上。具体操作如下:
- 登录CloudFlare后台,点击右上角的“添加站点”,输入你的域名,点击“添加站点”。
- 选择“免费”套餐,点击“确认计划”。
- CloudFlare会扫描你的域名的DNS记录,并显示出来。你可以根据需要修改或删除一些记录,然后点击“继续”。
- CloudFlare会给你两个DNS服务器的地址,比如lucy.ns.cloudflare.com和jason.ns.cloudflare.com。你需要将这两个地址填写到你的域名注册商那里,替换原来的DNS服务器地址。这样就完成了域名解析到CloudFlare上的操作。
- 等待一段时间(可能几分钟或几小时),等待DNS生效。你可以在CloudFlare后台查看域名的状态,如果显示为绿色的小云朵,说明已经生效了。
步骤二:开通CloudFlare Zero Trust服务
接下来,你需要开通CloudFlare Zero Trust服务。这是一个提供安全访问控制的服务,可以让你通过隧道来访问内网服务,并且可以设置身份验证、权限管理等功能。具体操作如下:
- 登录CloudFlare后台,在左侧菜单栏中找到“Access”,点击进入。
- 点击“启动Zero Trust”,进入Zero Trust控制台。
- 点击“Tunnels”,进入隧道管理页面。
- 点击“Create a tunnel”,创建一个隧道。
- 输入隧道的名称,例如“my-tunnel”,然后点击“Create”。
- 下载并安装CloudFlare Tunnel客户端,根据操作系统选择合适的版本。
- 运行CloudFlare Tunnel客户端,使用以下命令登录并激活隧道:
$ cloudflared login
- 在浏览器中打开授权链接,选择要关联的账户和区域,然后点击“Authorize”。
- 回到终端,复制显示的UUID,并使用以下命令注册隧道:
$ cloudflared tunnel register --name my-tunnel <UUID>
- 使用以下命令启动隧道,并将其连接到内网服务的端口,如8080:
$ cloudflared tunnel --url http://localhost:8080
- 在Zero Trust控制台中,点击“Tunnels”,找到刚刚创建的隧道,点击其名称,查看隧道的详情。
- 在详情页面中,点击“Add a route”,添加一个路由规则,将一个域名或子域名指向该隧道,如“my-tunnel.example.com”。
- 在CloudFlare后台,在左侧菜单栏中找到“DNS”,点击进入。
- 在DNS管理页面中,添加一个CNAME记录,将刚刚设置的域名或子域名解析到该隧道的地址,如“my-tunnel.cfargotunnel.com”。
- 等待DNS解析生效后,就可以通过该域名或子域名访问内网服务了。
cloudflared.exe --config=D:\Config\config.yaml tunnel run
# 隧道的 UUID, 就是登录凭证的json文件名称
tunnel: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
# 鉴权文件的全路径,注意替换为自己的
credentials-file: C:\Users\%USERNAME%\.cloudflared\xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx.json
ingress:
# 你的freenom二级域名
- hostname: diy.domain.cf
service: rdp://localhost:3389
# 默认错误404
- service: http_status:404
以上就是基于CloudFlare Tunnel 内网穿透,访问内网服务的方法。希望对你有所帮助。如果你有任何问题或建议,欢迎在评论区留言。谢谢!
顺便记录一下两位大佬的内容