之前说过STUN内网穿透获取公网ipv4,但是由于会不定时变化,而且无法固定端口,不是非常实用。然后又说了利用Cloudflare的cdn服务实现ipv4访问ipv6,但是端口只有几个,用起来不方便。
于是发现使用Cloudflare Tunnel可以实现任意端口转发到80/443端口,并且自动开启SSL。我觉得这是目前为止不使用云服务器建站的最优方法。对于建站之外的其他服务,也同样可以使用,但是受限于国内的网络环境,速度最多就1-3MB/s,但是对于常规使用完全足够了。最重要的还是完全免费
一、搭建前准备
1、域名获取:需要一个域名。可以选择免费的域名服务,但相比之下,直接购买付费域名会更省心,因此建议优先考虑付费域名。
2、域名托管:域名需要配置DNS解析到Cloudflare。
3、Cloudflare账户:注册一个Cloudflare账户是必不可少的步骤,后续的Tunnel配置和管理都需要依赖这个账号。
二、托管域名
打开Cloudflare主页,点击右上角加号,选择现有域

输入根域名后继续

下拉选择Free后继续

选择继续前往激活后,复制Cloudflare的DNS服务器名称,然后回到购买域名的服务商替换DNS服务器

替换之后点击继续,过几分钟就会显示活动状态,这个时候就完成托管了

二、设置Cloudflare Tunnel
点击右上角的小黄云回到主页,在左侧栏中选择Zero Trust,然后选择网络→Tunnels

点击创建隧道,选择第一个Cloudflared

随便起个名字后点击保存就来到了配置界面,选择相应的教程,按照步骤执行。不知道为什么,我的Docker配置不通,应该是防火墙的原因。最好是直接部署在系统上,如果服务器没有魔法导致下载过慢的,也可以自行下载deb包后上传
Github下载加速地址:https://git.zhike.in/ (将下列链接粘贴至输入框即可下载)
Debian:https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
Red Hat:https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm
Docker拉取加速命令:
docker pull docker.1ms.run/cloudflare/cloudflared:latest
然后cd到相应目录后执行后续命令(记得替换文件名)

部署完成后,在隧道界面上会显示连接器ID(我的打码了)以及正常状态

点击右侧三小点,配置,进入到主界面,然后点击公共主机名

点击添加公共主机名后填写访问域名以及目标地址,子域+域+路径即是你的访问资源的地址,子域可自定义,域只可以选择刚刚第一步托管到Cloudflare的根域名,路径可以不填。例如子域填abc,域为xyz.com,那么最终域名即为 abc.xyz.com 。服务那一栏,类型最好选择http,URL直接填写服务的局域网地址(去掉前面的协议,例如 192.168.1.1:5244 )因为内网地址很少会有SSL证书的(宝塔除外),这里的http协议并不影响访问地址使用https协议,因为SSL证书是流量到达Cloudflare的服务器后才套上的。

至此穿透已经完成,注意如果显示无限重定向错误的,需要到域面板中的SLL/TLS将加密配置为完全
三、SSL证书设置
为了实现穿透后域名的https访问,设置证书。继续在Zero Trust主界面,点击设置→资源。

然后在Cloudflare证书右边点击管理

进入到这个界面后查看是否有证书部署状态为 “可用,正在使用”,如果有,那么就不用继续配置了

如果没有,点击生成证书,时间选5年,然后生成证书

生成证书后,点击证书右边三个点,点击激活,当状态变为可用后,再次点击三点,设置状态为正在使用即可
最终可以实现https协议的免端口访问
