OpenWRT(R2S) 中运行Cloudflared(Zero Trust)实现内网穿透访问局域网任意设备

前言

通过Cloudflared(Zero Trust) 内网穿透,访问家庭中(内网)erp、nas、web,远程桌面,在或者是想实现手机相册自动同步备份到NAS,随时观看局域网中学习视频、随时下载电脑中的文件。

目前实现的方式

  • 当我们有公网IP的时候可以通过端口映射转发来实现这些需求。
  • 如果有公网IPV4,配合DDNS可以实现域名加端口访问。(缺点:不能使用80、443端口。IP暴露在公网(套CDN解决)、优点速度取决于你带宽的上行(套CDN外)。
  • 没有IPV4有IPV6可以可以实现域名加端口访问。(除了和IPv4一样的优缺点,还有个缺点 访问者必须支持IPV6) 。
  • 第三方内网穿透平台(花生壳、神卓、节点小宝) 优点:有免费服务会有速度和数量限制,缺点:付费价格不划算,大部分为国内节点无法使用80和443端口。
  • vps(云服务器)端口转发,通过安装frp或者nps来实现远程访问。访问速度取决于你服务器带宽。大陆vps(服务器)速度快、价格便宜,域名需备案后使用80和443端口,香港、台湾vps(服务器)没有80和443端口限制价格稍微贵点。国外vps(服务器)首选韩国、日本延迟也非常低。

接下来说下今天的主角 Cloudflare 的 Zero Trust(Cloudflared)。

Zero Trust(Cloudflared)

优点:

  • Cloudflared :无需公网实现远程访问局域网任意设备,没有任何费用。
  • 该内网穿透项目优点:和国内花生壳这种一年只有几M就要4位数的比起来CF不亏是业界钱多多
  • 它不需要你购买VPS;有免费项且个人足够使用;带宽很高;可以跨电信,联通,移动各家ISP运营商;不必在客户端上安装软件(智能家电,机顶盒等都不需要安装客户端,有局域网IP就直接可以穿透);无需北岸(CF是海外的么);支持HTTP3/QUIC(UDP协议);不限服务数量。
  • 支持windows、linux、MAC、docker。方法比较简单。
  • 安装在OpenWRT(软路由)24小时开机、功耗低。

缺点:

  • 夜间高峰期时期延迟不稳,抖动也高(和我们日常开CF盾一样的速度,延迟大概150左右);国内暂不支持HTTP3/QUIC;暂不支持UDP(支持也没用,国内三大运营商都是QOS UDP的);当然还有就是需要将一个域名托管在Cloudflare。
  • 速度慢(可进行IP优选解决,如果点赞和观看人多会在出一期IP优选视频)Cloudflared安装在局域网中任何一台电脑上都可以实现远程访问局域网中同IP端的设备。
  • 官方没有提供OpenWRT软件包,但是在 Github提供了各种架构的二进制文件。

教程正式开始:

一:域名解析到CF

这是前提,你要有一个域名,并且已经将DNS解析地址改到了CloudFlare

二:登入CloudFlare.com官网

首先用你自己的账号登入CloudFlare.com官网,登入后,在首页左侧菜单找到Zero Trust点击进入后,如果是第一次打开,可能会让你选择付费项目,选免费就够了,然后会让你绑定信用卡或者Paypal。放心是0元,我用的是Paypal。

三:创建一个隧道

上一步操作好后,会跳转到下一个菜单Zero Trust,在这里找到Access菜单边上的下拉箭头,找到Tunnels,进入后选择Create a tunnel创建一个隧道,Tunnel name(Required)这里任意填写一个好记的隧道名,例如:小明的办公室,xiaomingoffice,我的家,myhome,然后点击Save tunnel。在 Cloudflare 的控制台就有 Zero Trust 的菜单。

点进去之后,左侧的菜单里有个 Tunnels 的选项。

接下来创建 Tunnel(Create a tunnel),意思就是建立一条隧道。一般来讲,只要在局域网中的其中一台设备上建立一条 Tunnel 就够了,通过在 Tunnel 中设置各种服务的路由,就可以访问到局域网中的几乎所有服务。

名称自己填一个就可以,点击 Save tunnel,接下来设置连接。支持各大平台,按需部署即可。

四:openwrt上安装

接着就跳转到下一个菜单,官方给出了Windows,Linux两大家族系,Mac,和Docker的32位和64位部署安装包,这里我是安装在openwrt上的,所以都不用,但是下面自动生成的握手令牌码,我们要复制一下,让在记事本上,一会要用到,就是类似下面的这串:

cloudflared.exe service install eyJhIjoiMDU0MDk0OTgxNWIyMTg5ZGJmZDc3NDA5YzDFCVcszciLCJ0IjoiZDVlZDZmYmUDVDVADFDG3LWFkNjAtMjM2MTI4YjRhYzYyIiwicyI6Ik5UVXdOekZoWVRBdE9UVTJOQzAwTVRWaExXRTRZemN0TnpJMFlUWXlZMkkyTmpNeSJ9

(忽略cloudflared.exe service install 这个安装命令,只需要复制下面的令牌从ey到J9结束。)

五:SSH连接你的openwrt

任意SSH工具,连接你的openwrt,输入下面下载命令,回车。

VERSION="2023.3.1"
curl -O -L \
https://github.com/cloudflare/cloudflared/releases/download/${VERSION}/cloudflared-linux-arm64 \
&& chmod +x cloudflared-linux-arm64 \
&& mv cloudflared-linux-arm64 /usr/bin/cloudflared

VERSION=”” 里面的数字,请打开这个网址:https://github.com/cloudflare/cloudflared ,这是官方CloudFlared二进制可执行文件放在Github上的网址(但没有openwrt直接安装的ipk包),右侧Latest数字为最新版本的版本号,复制过来就行了,以后有新版本就只要改这里就行。

[alert title=”注意”]

架构的话我是用的R2S,是ARM64的openwrt,所以直接用这条命令,如果你是X86或者其它架构的,把${VERSION}/后面的改掉即可。

例如X86就是cloudflared-linux-arm#。[/alert]

[error title=”注意”]第3、4、5行里面的都要改掉。[/error]

六:创建cloudflared文件

依次输入下面2条命令,回车。

touch /etc/init.d/cloudflared
chmod +x /etc/init.d/cloudflared

在openwrt重启引导目录里创建一个名为cloudflared的文件给刚才创建的这个文件赋予一个可执行权限,类似Windows鼠标右键以管理员身份运行

七:修改cloudflared内容

输入nano /etc/init.d/cloudflared 将下列代码修改一处就是令牌这里,然后粘贴,CTRL+O CTRL+X 保存。

上面这一步是原作者的教程,我推荐使用SSH工具来操作,这一步具步骤参考视频里面的教程。

 #!/bin/sh /etc/rc.common
USE_PROCD=1
START=95
STOP=01
cfd_init="/etc/init.d/cloudflared"
cfd_token="这里改成教程004:你复制好的token"
boot()
{
ubus -t 30 wait_for network.interface network.loopback 2>/dev/null
rc_procd start_service
}
start_service() {
if [ $("${cfd_init}" enabled; printf "%u" ${?}) -eq 0 ]
then
procd_open_instance
procd_set_param command /usr/bin/cloudflared --no-autoupdate tunnel run --token ${cfd_token}
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
procd_close_instance
fi
}
stop_service() {
pidof cloudflared && kill -SIGINT `pidof cloudflared`
}

八:设置开机启动

输入下面2个命令,回车。

/etc/init.d/cloudflared enable
/etc/init.d/cloudflared start

#设置这个文件,开机启动#

#现在运行这个文件#

九:设置完成,验证连接

这个时候回到CloudFlare我们Access-Tunnels的菜单下,刷新一下,应该就能看到一个隧道链接的提示,隧道名是我们自己取的,在Status状态栏下显示绿色HEALTHY就代表隧道已经穿透,可以用了,如果是INACTIVE就说明隧道连接失败,可以等等,或者看看上面的步骤是否有错。

如果已经HEALTHY健康状态了,就点边上的3个点,选择Congfigure,进入后选上面Public Hostname菜单,点击Add a public hostname,进入后在Subdomain里取你的二级域名名字,

如果直接用根域名就输入@,Domain(Required)菜单里选择你托管在CF的域名,Path一般不填写

除非像宝塔这种默认安全设置这里有扩展路径例如:https://bt.cn:8888/format/,那么你就需要在Path里填写/format,下面的Service-Type这里就随便了,看你自己要穿透的协议,如果是穿透局域网里的openwrt自身,例如:http://192.168.1.1,那么这里选http就行了,后面的URL就填写192.168.1.1

以此类推,再举个例子黑群晖https://192.168.1.5:5000 ,那么Type就改成https,后面URL就填写192.168.1.5:5000即可。局Windows11电脑,局域网IP是192.168.1.10装了VNC远程桌面,VNC默认端口5900,那么应用类软件只要不是UDP,那这种TCP的就在Type里选TCP,URL里填写192.168.1.10:5900即可。

十:教程完毕!

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Commonly asked questions and answers

Phone:
+1 (555) 000-0000
Email:
info@mysite.com
What does your web design and development process include?
Egestas nullam vehicula, at litora pharetra lacinia. Integer suspendisse condimentum, urna etiam, risus sollicitudin primis varius erat. Donec senectus massa, hendrerit vulputate convallis felis.

Aenean fames risus sodales, viverra accumsan suspendisse, eleifend nunc pharetra hendrerit hac class. Viverra sit vitae dictumst, massa consequat hac, nullam tristique vehicula metus eleifend curabitur. Tellus nostra commodo, et inceptos facilisis neque.

Augue vestibulum netus, neque ante a turpis molestie. Phasellus maecenas, hendrerit varius tristique non. Egestas rutrum ornare augue, suspendisse vehicula pellentesque, dictum ad cubilia nisi lectus duis sodales at. Pretium arcu dictumst, inceptos hendrerit, ad sociosqu pellentesque sollicitudin curabitur curae.

Newsletter subscribe!

Enter your email to unlock an exclusive 10% discount on professional website development tailored to your business needs.

Have more questions?

Let’s schedule a short call to discuss how we can work together and contribute to the success of your project or idea.