cloudflare是一个免费的CDN提供商,曾经很多人使用cloudflare的优选IP进行科学上网。不过很可惜,现在cloudflare的大部分IP都被联通采取了不定时阻断的策略,一旦有大流量,就会空路由一段时间,所以优选IP科学上网算是没戏了。不过还提供了很多服务,基于cloudflare的全球边缘节点,仍然可以做很多事情。

今天要讲的是通过cloudflare的zerotrust服务中的cloudflare tunnel(也曾叫做argo tunnel)创建TCP隧道。使用cloudflared隧道大洞的好处是,不需要暴露公网IP,或者说不需要公网IP。这样做,可以有效减少服务器被攻击的风险。cloudflare的zero trust是一个很庞大的体系。包括了利用warp组建私有网络等功能,不过今天不去讲那些高深的功能了。

随着版本的迭代,目前cloudflared的边缘节点已经支持IPv6了,这样,我们就可以很轻松的将纯IPv6的节点通过cloudflared映射出来。

建立隧道或是映射,我们需要注册一个cloudflare账户,同时为了使用access功能访问TCP端口,我们还需要在控制台开启zero trust服务。开启zero trust服务需要绑定支付方式,可以使用PayPal或是信用卡。这个过程不会产生费用。

进入到zero trust控制台后,在access中选择tunnel,创建tunnel有两种方法,一种是通过控制台创建,另一种是通过命令行创建。通常我推荐使用web控制台创建,有界面的创建方式更简单一些,稍后我也会讲到通过命令行创建隧道。

首先点击access中的隧道,并创建新的隧道。

然后输入隧道名称

最后选择对应的系统版本以及架构。并执行运行命令。需要注意的是通过生成的安装命令(包管理器安装)的不能使用cloudflared update进行升级,所以建议到github下载最新版本安装,或是将cloudflare的源加入到包管理器。
https://github.com/cloudflare/cloudflared

执行安装命令后,cloudflared会自动安装成系统服务,并开机自启。如果你是纯IPv6环境或是套了warp,这边建议使用原生的IP去连接cloudflare的边缘节点以达到最大速度。cloudflared默认使用IPv4连接到边缘节点。如果需要修改成IPv6,可以修改systemd的服务或直接运行时通过--edge-ip-version 6来指定。一旦修改服务,不要忘记重启服务。

systemd服务文件位于:/etc/systemd/system/cloudflared.service

执行完安装工作后,服务器应该会自动连接到cloudflare的边缘节点,同时页面上也可以看见连接到边缘的服务器信息了。

点击下一步开始配置要映射的服务,http业务可以直接映射出来,TCP服务必须通过隧道(需要在对端安装cloudflared),同时也可以设置回源host,连接超时,保活的包时间等等。

cloudflared连接边缘节点默认使用quic,如果服务器UDP质量不佳,应该手动指定protocol(--protocol [quic/h2mux/http2/auto]

Kunger

完成服务映射后,即可保存隧道。如果你希望映射http服务出来,接下来就是绑定域名了。通过zero trust页面创建的隧道,会自动创建DNS记录,如果你没有通过NS接入cloudflare则需要手动到DNS服务商去添加一下记录。

域名解析生效后,如果映射的是http服务,那么应该已经生效了,如果出现错误,可以查看cloudflared的日志,通常情况是映射https服务,源站的证书不受信任,需要使用可信的证书或者是cloudflare办法的源证书。

如果映射的是TCP服务,接下来需要到对端(访问端)进行处理。对端也需要安装cloudflared,由于对端不安装服务,则需要通过命令行登录cloudflared。在对端执行cloudflared login 并复制生成的登录链接到浏览器进行认证就可以。

对端登录后执行 cloudflared access tcp --hostname [绑定的域名] --url [监听地址] 就可以通过cloudflared的隧道访问映射的TCP服务了。我这边映射了iperf3通过隧道访问,测试得到的结果隧道内的速度大约在100M左右。

如果不想通过web端进行配置,可以通过命令行进行配置。在映射端执行cloudflared login进行登录

使用如下命令创建隧道,并记录UUID

cloudflared tunnel create

执行如下命令运行隧道

cloudflared tunnel run --url tcp://localhost:3000

使用cloudflared创建的隧道,不会自动创建对应的记录,需要手动在cloudflare中创建记录,将你希望使用的子域名CNAME指向UUID.cfargotunnel.com
如果没记UUID,可以到zero trust的web控制台找到,或者使用命令命令查找。

cloudflared tunnel list

cloudflare提供的隧道服务还是很方便的,并且依托cloudflare在全球的节点,可以说在绝大多数国家,访问cloudflare的隧道都是非常快速的。虽然在国内速度不如意,但是在国外VPS上的体验还是很不错的。

Img@PixivID:106396383[ボタン@ぽんゆい]