登录
  • 人们都希望被别人需要 却往往事与愿违
  • 在进度落后的项目中增加人手只会导致进度更加落后@Fred Brooks (图灵奖得主 《人月神话》作者)

使用Cloudflare Zero Trust创建大内网

Cloudflare Benny小土豆 8548次浏览 3903字 8个评论
文章目录[显示]
这篇文章在 2023年04月21日20:51:15 更新了哦~

创建大内网是一件非常重要的事情。一旦有了安全的内网环境之后,我的服务器之间就可以使用私有IP进行通信,不用再考虑这个协议是否适合暴露在公网上、是否会被MITM等问题了。管他什么协议的,telnet我都照样跑🤪!

通常来说,我是使用WireGuard来创建内网的。选择一个机器作为“服务器”,其他的节点作为客户端加进来就好了。这也是业界最为成熟的方案了

但是这样做仍有一些限制和缺陷,比如说:

  • 如何暴露整个家庭内网,如192.168.7.0/24 给出门在外的我,家里的每一个设备都要通过WireGuard加进来吗,或者写奇奇怪怪的iptables规则?
  • 所有的数据要通过“服务器”中转,两个美国的服务器明明直接就能沟通,50ms解决,如果WG服务器在亚洲,那么就基本上300ms左右了
  • 穷到买不起服务器,没有公网IP

在这种情况下,最好的办法就是用Cloudflare Zero Trust中的tunnel啦!

之前简单的提过我已经把所有的web服务都通过argo tunnel 暴露了,拓扑图大概是这样,从Cloudflare那边偷过来的:

使用Cloudflare Zero Trust创建大内网

在我的服务器上安装cloudflared,然后添加Public Hostname,所有的访问直接从Cloudflare的网络来。安全且环保!

那么Cloudflare tunnel还有那些有趣的用法呢?先从暴露整个家庭内网来说吧!同样的道理,我们需要在家里运行一个cloudflared connector,然后其他终端设备通过WARP连接到Cloudflare,然后把整个网络暴露给终端设备,拓扑图如下:

使用Cloudflare Zero Trust创建大内网


暴露家庭内网

获取team domain

打开Cloudflare Zero Trust,设置里就可以看到你的team name,我这里就是bennythink

使用Cloudflare Zero Trust创建大内网

配置网络协议

Settings-network,找到proxy,把TCP、UDP、ICMP和WARP to WARP都打开(这个后续要用)

使用Cloudflare Zero Trust创建大内网

创建WARP 设备注册权限

首先要定义如何注册设备,简单的来说通过邮箱就好了。比如说一个公司的人,用公司后缀的邮箱连接到同一个内网。在Zero Trust的面板中,Settings - WARP client - Dvice enrollment permission

使用Cloudflare Zero Trust创建大内网

使用Cloudflare Zero Trust创建大内网

创建 WARP Profile

所谓Profile,就是定义什么用户使用什么样的WARP的规则,规则包括用户能否断开,自动重连等,其中最重要的是路由规则。

如图,在此我配置的[email protected] 这个用户的规则

使用Cloudflare Zero Trust创建大内网

Split tunnel用来配置如何分发流量,分为两种模式,include和exclude,有点像黑名单白名单的概念。

使用Cloudflare Zero Trust创建大内网

  • Include,就像WireGuard allowIP配置为192.168.6.0/24一样,只有这个网段的流量会走WireGuard,其他流量会直接出去,不走cloudflare
  • Exclude,就是所有流量都要走cloudflare,因此192.168.7.0/24走了cloudflare所以可以访问,列表中的直接连接

说人话的话,比如你在外面,要访问家里192.168.7.0/24,并且所有其他流量要走cloudflare,那么你要用exclude模式;

你在外面,要访问家里的192.168.7.0/24其他流量直接出 以方便真人快打,那么就要用include模式。

这里我就选择include模式,因此上图切换到include,然后添加IP段,CIDR表示法

使用Cloudflare Zero Trust创建大内网

同时在tunnel的Private Network也要创建一样的CIDR

使用Cloudflare Zero Trust创建大内网

看cloudflared日志可以看到已经自动更新了配置

使用Cloudflare Zero Trust创建大内网

配置客户端连接

客户端需要下载WARP,然后  Login to Cloudflare Zero Trust,输入team name

使用Cloudflare Zero Trust创建大内网

进行邮件验证

使用Cloudflare Zero Trust创建大内网

然后你的warp就会接收到新的配置,连接起来,就会发现192.168.7.0/24已经通啦

使用Cloudflare Zero Trust创建大内网

并且路由器的管理界面是打得开的

使用Cloudflare Zero Trust创建大内网


创建大内网

拓扑图如下,所有同一个organization(team)的WARP都有一个独立的内网,可以安全进行数据交换。还记得上面开的TCP、UDP、WARP to WRAP吗?这里用到的就是WARP to WARP

使用Cloudflare Zero Trust创建大内网

创建profile

同样创建一个新的profile

使用Cloudflare Zero Trust创建大内网

Split tunnel的原理相信大家已经懂了,简单起见,同样选择include,只不过IP段写100.64.0.0/10,这个是Cloudflare 默认的Virtual Network,使用了WARP的设备会被分配到这个IP段里。这里一共有400多万个可用的IP,沃尔玛员工人手2个WARP,或者克罗地亚人一人一个都足够🤣

使用Cloudflare Zero Trust创建大内网

注册设备

安装warp-cli,然后

warp-cli teams-enroll bennythink

在你的浏览器上打开链接,输入邮箱[email protected]验证,但是并没有任何信息告诉你怎么打开终端里的warp-cli,那怎么办呢?别怕,打开F12,找到Open Cloudflare WARP那个按钮的元素,找到onclick事件,复制从com.cloudflare.warp开始的信息到结尾的单引号

使用Cloudflare Zero Trust创建大内网

然后在终端中:

warp-cli teams-enroll-token com.cloudflare.warp://bennythink.cloudflareaccess.com/auth?token=
警告:
如果你使用的是zsh,记得给那段token上用引号包起来 "your-token-with?weird/=+stuff"或者切换到bash

连接设备

λ maria-pl ~ → warp-cli status
Status update: Disconnected. Reason: Manual Disconnection
Success

λ maria-pl ~ → warp-cli connect
Success

在Zero Trust - My team - Devices中就可以看到你的这个设备的IP地址了!

使用Cloudflare Zero Trust创建大内网

同理,连接另外一个设备,同样的邮箱就可以。

测试内网互联

直接ssh过去试试看

λ maria-pl ~ → nc -v 100.96.0.14 22
Connection to 100.96.0.14 22 port [tcp/ssh] succeeded!
SSH-2.0-OpenSSH_8.9p1 Ubuntu-3
^C

λ maria-pl ~ → ssh 100.96.0.14
The authenticity of host '100.96.0.14 (100.96.0.14)' can't be established.
ED25519 key fingerprint is SHA256:Gffeu3+72Z9pwZDawOHGSN7M2JxrbBub1hZoueKGJ1o.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

使用Cloudflare Zero Trust创建大内网

iperf3测试

速度也还不错,本来带宽也是100Mbps

使用Cloudflare Zero Trust创建大内网

延迟测试

延迟略有增大,可能是peer连接到了不同的数据中心导致的。但是肯定不会出现美国-日本-美国这种绕圈圈的模式了。

使用Cloudflare Zero Trust创建大内网

如何使用自定义的网段

如果不喜欢上面的100.96.0.0/10网段,怎么切换到自己的网段呢,比如192.168.6.0/24

根据文档来说,似乎是可以通过创建自己的Virtual network(还不能在网页上创建),然后WARP连接的时候选择这个network,然后IP就应该是你定义的而不是100.96之类的了

cloudflared tunnel vnet add private
cloudflared tunnel route ip add --vnet private 192.168.89.0/24 home

warp-cli get-virtual-networks
warp-cli set-virtual-network UUID
warp-cli connect

但是我测试的时候,无论是CLI还是macOS WARP,即使选择了新建的网络,网页上看到的IP也始终是100.96,不知道为何,可能是他们的bug

使用Cloudflare Zero Trust创建大内网

其他

Zero Trust还有很多好玩的玩法,比如可以给不同用户配置不同的网络访问规则,私有DNS,可控网络(就是在家里连到VPN,在公司直接走内网,不是根据SSID判断),以及大家都爱的中转梯子等等玩法。有空可以再探索探索。

Cloudflare 的WARP直接用起来也不错,比如在公司、外面的公共Wi-Fi,我都是直接打开的,体验非常好,在不需要换IP的情况下,可比买的那个Surfshark VPN好多了🥸

再次感叹,Cloudflare真是一家伟大的公司。Cloudflare 的使命是帮助建立一个更好的互联网👍

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/private-net/create-private-networks/

https://help.teams.cloudflare.com/

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/

https://developers.cloudflare.com/cloudflare-one/tutorials/warp-to-tunnel/

https://dash.cloudflare.com/argotunnel


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/cf-zero-trust.html
喜欢 (8)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(8)个小伙伴在吐槽
  1. 请问使用CF Zero Trust的前提是需要一个域名吗?
    tad2023-07-11 05:22 回复
    • 看你使用哪部分功能,比如如果只是使用1.1.1.1+warp来保护公共Wi-Fi,那不需要。如果做argotunnel网站,那自然需要了。
      Benny小土豆2023-07-11 11:07 回复
  2. 稳定性咋样,移动cloudflared有时候会断线
    bboysoul2023-04-10 05:23 回复
    • 我这边还行,但是延迟就……很不美好了
      Benny小土豆2023-04-10 21:28 回复
  3. Zero Trust居然也有free plan,cloudflare牛逼! 回头折腾一下
    paw2023-04-09 16:45 回复
  4. 菜鸡问一下,这个方案和tailscale有啥区别和联系么?
    Congee2023-04-02 01:38 回复
    • tailscale应该也行,看官方说 「Secure, peer-to-peer connections」。
      Benny小土豆2023-04-02 16:17 回复
    • tailscale打通后基本算直连,zerotrust不知道情况如何
      molezz2023-09-19 10:08 回复