20240703


创建日期: 星期三, 四月 24日 2024, 9:16:33 晚上
修改日期: 星期三, 四月 24日 2024, 9:17:12 晚上

 Cloudflare  Benny 小土豆  1 年前 (2023-04-01 11:37)  8657 次浏览  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 的规则,规则包括用户能否断开,自动重连等,其中最重要的是路由规则。

如图,在此我配置的home@dmesg.app 这个用户的规则

使用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,然后

  1. warp-cli teams-enroll bennythink

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

使用Cloudflare Zero Trust创建大内网

然后在终端中:

  1. warp-cli teams-enroll-token com.cloudflare.warp://bennythink.cloudflareaccess.com/auth?token=

警告:
如果你使用的是 zsh,记得给那段 token 上用引号包起来 “your-token-with?weird/=+stuff” 或者切换到 bash

连接设备

  1. λ maria-pl ~ → warp-cli status

  2. Status update: Disconnected. Reason: Manual Disconnection

  3. Success

  4. λ maria-pl ~ → warp-cli connect

  5. Success

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

使用Cloudflare Zero Trust创建大内网

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

测试内网互联

直接 ssh 过去试试看

  1. λ maria-pl ~ → nc -v 100.96.0.14 22

  2. Connection to 100.96.0.14 22 port [tcp/ssh] succeeded!

  3. SSH-2.0-OpenSSH_8.9p1 Ubuntu-3

  4. ^C

  5. λ maria-pl ~ → ssh 100.96.0.14

  6. The authenticity of host ‘100.96.0.14 (100.96.0.14)’ can’t be established.

  7. ED25519 key fingerprint is SHA256:Gffeu3+72Z9pwZDawOHGSN7M2JxrbBub1hZoueKGJ1o.

  8. This key is not known by any other names

  9. 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之类的了

  1. cloudflared tunnel vnet add private

  2. cloudflared tunnel route ip add –vnet private 192.168.89.0/24 home

  3. warp-cli get-virtual-networks

  4. warp-cli set-virtual-network UUID

  5. 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)