给n8n的本地访问链接配置成公网访问
给n8n的本地访问链接配置成公网访问
指导链接:Cloudflare Tunnel 内网穿透工具(Windows + 自定义域名)_内网穿透自定义域名-CSDN博客
Windows 使用 CloudFlared 实现内网穿透-CSDN博客
整体架构说明:
本文通过cloudflare tunnel,将本地运行在localhost:5678的n8n服务,通过cloudflare的中转网络暴露为公网HTTPS域名,从而实现外部设备访问与webhook的调用。
问题背景:
n8n通过docker启动之后,访问链接为localhost:5678
其它设备无法访问链接或者发送http消息到n8n项目中,因此使用cloudflare工具进行内网穿透(把只能在内网访问的服务通过一个中转通道变成外网能够访问的https url)
步骤
1、官网注册https://dash.cloudflare.com/
2、到github或者cloudflare官网中下载cloudflared工具:cloudflare/cloudflared: Cloudflare Tunnel client
下载最新版就好,windows的话可以选择msi或者exe版本(我下载的exe版本)

下载的客户端会在本机主动向Cloudflare发起HTTP/QUIC长连接,外部访问n8n服务时的流程为:
浏览器→HTTPS→Cloudflare→加密tunnel→cloudflared→n8n
ps:dev-sidecar会阻碍文件的下载(本质上是一个本地代理/流量劫持工具,劫持github网址链接,把访问转发到加速源/镜像上面,提高网页放速度,因此我点击大文件下载链接时,release下载的就不是正确的链接)
3、将exe文件放置在d://software/cloudflared/文件夹,cmd中验证是否可用:cloudflared.exe--version
4、给tunnel分配一个可访问的域名——DNS迁移:zyydgrbk.top(申请的阿里云域名)
此步骤需要在cloudflare官网的域中添加网址,步骤如下:

根据信息选择

其中需要选择一个套餐,根据需求选择free即可,这里将阿里云上的dns配置移动到了cloudflare中,这样博客也可以继续访问,相当于只是在阿里云的域名管理中将dns解析器从阿里云的官方解析器换成了cloudflare的解析器而已。

这里是在阿里云的域名管理页面,切换dns服务器

ps:Cloudflare并没有转移域名的权力,需要把域名解析权交给Cloudflare,tunnel最终通过域名访问,Cloudflare需要为我自己的域名自动创建DNS记录
a、该域名包括其下的所有子域名都可以使用
b、在cloudflare中会添加博客网址,也就是阿里云购买的个人域名,会影响博客的访问吗?
www -> CNAME yangzouy.github.io
@ -> A 185.199.110.153(这是GitHub Pages 的一组 IP 之一)
将域名NS修改到cloudflare 阿里云的DNS将不会再被访问,如果cloudflare的DNS中如果也有这两条记录,那么访问依旧正常
5、登录cloudflare并且授权域名网址(所谓授权其实就是cloudflare知道将tunnel挂在哪个域名下面)的使用,cmd中输入:cloudflared tunnel login,跳转到登录界面

登录成功后会安装证书,页面如下:

ps:注意,在授权过程中,被提示需要去邮件中验证邮箱,原来在登录时就需要进行邮箱验证,否则会卡在这一步
6、创建tunnel
cmd中输入:cloudflared tunnel create <隧道名称>

创建成功后会生成tunnel的json文件,名称是tunnel的ID

查看所有的tunnel列表cloudflared tunnel list
7、创建管道对应的配置文件config.yml(依旧在c盘的相同位置)

这里贴上全部的config.yml:
tunnel: 1b43c60d-4bd7-4457-b365-d4f765f00b09
credentials-file: C:\Users\邹阳\.cloudflared\1b43c60d-4bd7-4457-b365-d4f765f00b09.json
ingress:
- hostname: n8n.zyydgrbk.top
service: http://localhost:5678
- service: http_status:404
在该文件中定义域名到本地服务的映射
8、给tunnel分配公网域名
cloudflared tunnel route dns tunnel-ID n8n.zyydgrbk.top
成功后在域管理页面dns中

9、启动tunnel,访问页面
cloudflared tunnel run <tunnel ID>

在手机上通过浏览器访问n8n.zyydgrbk.top的页面(先登录,登录后访问到n8n.io)

ps:官网中的也可以创建tunnel,但是需要通过zero trust的入口进入
整体流程理解:
① 浏览器访问:https://n8n.example.com
② DNS 查询:n8n.example.com → Cloudflare
普通dns只是做域名映射到IP,但是这个域名不暴露源站IP,因为这个域名被配置成一种走cf网络的特殊记录,所以需要换成cf的DNS解析器NS,它可以知道这个域名是否需要走cloudflare tunnel
③ Cloudflare DNS 返回:这是一个 Tunnel 域名(非 IP)
HTTP全部交给tunnel处理,DNS只负责判断(即指路)
ps:cf要做到这一点的话,需要控制浏览器访问的这个域名的DNS,TLS证书,HTTP入口,因为需要将该域名挂载到cf中,并且修改阿里云DNS为cf的DNS
④ HTTP请求到达 Cloudflare 边缘节点
⑤ Cloudflare 根据 Host(n8n.example.com)匹配 Tunnel
在cf中配置DNS的时候会添加域名对应tunnel id的映射
⑥ Cloudflare 通过 Tunnel ID 找到在线的 cloudflared 客户端
⑦ 请求通过加密隧道发给 cloudflared
⑧ cloudflared 根据 ingress 规则转发到 localhost:5678
cloudflared通过ingress找到机器上的某个服务
⑨ n8n 响应→ 原路返回





