Cloudflare有个叫ZeroTrust的东西,之前注册来科学上网用,注册的时候就很在意,感觉这个东西功能特别多,今天研究了一下···
Cloudflare的代理
在此之前,先了解一下Cloudflare代理,当网站开了Cloudflare代理之后,DNS会将网站域名解析到Cloudflare边缘节点的IP上,Cloudflare边缘节点代理用户访问服务器,同时边缘节点会有一些流量过滤、缓存什么的,这就是听说了好久的CDN~~,原来这么简单~~ψ(`∇´)ψ。
根据测试,Cloudflare代理给纯IPV4服务器或纯IPV6服务器代理后网站是能够支持IPV6和IPV4访问的。
根据测试,边缘节点代理未备案的IP(仅测试了IPV6)的443和80端口会在经过长城的时候被阻断。
Cloudflare 支持的 HTTP 端口
80
8080
8880(禁用缓存)
2052(禁用缓存)
2082(禁用缓存)
2086(禁用缓存)
2095(禁用缓存)
Cloudflare 支持的 HTTPS 端口
443
2053(禁用缓存)
2083(禁用缓存)
2087(禁用缓存)
2096(禁用缓存)
8443(禁用缓存)
虽说Cloudflare手里的的IP地址特别多,但也不会比用户多,众所周知,访问网站是将域名解析为IP,然后访问IP,但是Cloudflare边缘节点数量肯定是小于需要代理的网站数量的,这样必然会有两个网站解析到同一个IP上面,而且这个代理属于CDN,应该给一个网站提供多个边缘节点,这样才能叫CDN嘛( •̀ ω •́ )✧。
怎么解决的呢?我Ping了一下域名,然后直接访问域名解析的IP地址,如下:

浏览器在访问网站的时候会将域名放在HTTP头上发过去,边缘节点依靠这个判断访问哪个网站,完美解决┌(。Д。)┐
因为是放在HTTP头上发过去,所以只有HTTP和HTTPS才可以,直接TCP、UDP或者是SSH、FTP这些是不行的。
Zero Trust 的隧道
隧道,和我以前理解的隧道是一样一样的,反向代理呗。
但是这个隧道可以将任意端口的Http或Https流量代理到域名的80和443端口上。
所以说这个和代理一样也是能处理Http流量?我是这样想的,但是在后台配置是可以选择使用什么协议的,然而测试的结果是只有Http和Https可以( ̄_ ̄|||)。
总感觉有什么猫腻,既然不能用为什么还要给选项,于是继续研究···
这个反向代理的程序Cloudflared会连接服务器,在服务器上会给分配一个域名地址XXXX..cfargotunnel.com,一个Cloudflared进程可以为多个地址隧道,但只会分配一个域名地址。
正常来说需要另一台机器再运行一个Cloudflared进程,这个去连接到到之前给的域名地址,这个客户端进程将本地的连接通过Cloudflare服务器转发到服务器进程。
Http和Https协议算是一种不正常的情况,因为有Http的Host头(经过测试无论是否代理均能正常访问)可以无需客户端访问。
异地组网
Zero Trust的WARP客户端在运行的时候会在本地创建一个虚拟网卡,通过虚拟网卡接管本机所有流量。
我发现在Zero Trust的后台能够看的每台连接过的设备信息,并且每个设备都有一个固定虚拟IP地址。
直觉,这个虚拟IP地址肯定有什么东西(⓿_⓿)
乱七八糟的选项调了好久,也没什么用,偶然发现官方文档居然有写。
操作分两步,在后台,
1.允许Zero Trust在设备之间通信,设置>网络>防火墙>代理打开,WARP to WARP打开。
2.允许设备将流量发送到Zero Trust,设置>网络>WARP 客户端>设备设置 >默认>配置>分割隧道>管理,让100.96.0.0/12这个网段的流量能够被转发。
终于能Ping通了φ(゜▽゜*)♪
虚拟网络
Zero Trust可以创建多个虚拟网络,最开始有一个默认的虚拟网络,在没有隧道的情况下这个虚拟网络似乎没啥用,已知连接到隧道的主机可以分配到虚拟网络。
我家的的网段是192.168.1.0/24,我希望我身在南方也能访问到北方家里的网络,之前我的解决方案是用v2ray,奈何学校里面没有IPV6,现在我可以用Zero Trus可以一边在家里网段,一边科学上网。
只需要给隧道中的主机加一个专用网络,填主机所在的网段就能将隧道里面的主机放到虚拟网络里,然后像前面一样不要让客户端过滤相应网段的流量。
φ(゜▽゜*)♪
考虑到之后可能会有其他虚拟网络和其他人,我给家里主机的单独放到一个虚拟网络内,然后配置了流量过滤:
网关>防火墙策略>网络,添加一个策略:
