zerotier异地组网|异地内网互通|以腾讯云广州香港为例

linux admin 1个月前 (08-24) 236次浏览 0个评论

前言

 之前小白写过一篇教程:wireguard异地组网|异地内网互通|以腾讯云广州香港为例,来介绍使用wireguard异地组网,从而实现fake iplc的效果,但是小白实际测试下来,如果是多客户端异地组网,貌似客户端与客户端之间的流量都需要通过服务端中继(也有可能是我没设置好……),而不能实现客户端点到点的数据传输。如果此时,客户端与客户端之间进行大流量的数据传输(你懂的),如果服务端性能不够强劲的话,压力还是很大的。

后来有个老哥用的zerotier,听他讲zerotier是可以实现客户端点到点的P2P传输的,我们还以腾讯云广州香港为例,利用zerotier实现内网互通。

ZeroTier 原理

ZeroTier 这一类 P2P VPN 是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 NAS,而且是点对点直连,数据传输并不经由第三方服务器中转。

Zerotier 在多设备之间建立了一个 Peer to Peer VPN(P2PVPN) 连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 ZeroTier One ( ZeroTier 的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT 之后。连接到虚拟 LAN 的任何计算机和设备通常通过 NAT 或路由器设备与 Internet 连接,ZeroTier One 使用 STUN 和隧道来建立 NAT 后设备之间的 VPN 直连。

简单一点说,Zerotier 就是通过 P2P 等方式实现形如交换机或路由器上 LAN 设备的内网互联。

ZeroTier 官方搭建了一个行星根服务器叫做 地球 Earth,这个行星根服务器是唯一且是免费的,它记录了所有的路径信息,一般情况下大家都直接用的这个。

行星根服务器 R 记录了所有的路径信息,设备 A 能通过 ZeroTier 唯一地址标识找到需要连接的设备 B。这个过程如下:

  1. A 想要将数据包发送到 B,但由于它没有直接路径,因此将其向上发送到 R。
  2. 如果 R 有直接链接到 B,它会转发数据包给 B。否则它会继续向上游发送数据包,直到达到行星根 (planet)。行星根知道所有节点,所以如果 B 在线,最终数据包将到达 B。
  3. R 还向 A 发送一个消息,包含有关它如何到达 B 的提示。同时,将消息发给 B,通知 B 它如何到达 A。
  4. A 和 B 获取它们的消息并尝试相互发送测试消息,可能会对 NAT 或状态防火墙进行穿透。如果这样可以建立直接链路,则不再需要中继。
  5. 如果无法建立直接路径,则通信可以继续中继 (速度慢)

除此之外还有 12 个遍布全球的根服务器,这些是收费的服务。由于 Earth 在国外,如果使用免费套餐,连接时的延迟可能会很高。不过 ZeroTier 能自己创建根服务器 月球 Moons,这样我们就能在大局域网中得到更好的体验了。

注册与客户端安装

注册帐号

进入https://my.zerotier.com/login,并创建账号,记录NETWORK ID,客户端要用到

客户端配置

直接使用脚本安装

curl -s https://install.zerotier.com | bash

Debian系统有可能出错,原因如下:

Debian10、11要安装zerotier时,都会出错。好像是1.65之后的都是出现这个问题,搞了很久都没有解决。因此在使用安装脚本之前,务必安装前签名GPG

apt install curl gnupg
apt install apt-transport-https ca-certificates lsb-release #这几个不是必须要安装的,不过在安装docker时也会用到
curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | bash; fi

直接使用命令行进行操作的方法如下:

# 启动
$ zerotier-one -d

# 获取地址和服务状态
$ zerotier-cli status

# 加入、离开、列出网络
$ zerotier-cli join # Network ID
$ zerotier-cli leave # Network ID
$ zerotier-cli listnetworks

加入自己的网络,如果提示200 join OK,说明没有问题。这里特别说一下,子方尝试过使用lxc安装,这里会提示 500 join OK,在管理页面能看到在线,但看大家说,需要解决tun-br问题

zerotier-cli join NETWORK ID

查看自己的网络, 这里会有zerotier的网卡信息。另外,使用<ip addr>查看自己的网卡。
200 listnetworks 83048a0632a2cb16 16:d3:3a:48:47:7b ACCESS_DENIED PRIVATE ztqu3crtje –

zerotier-cli listnetworks

认证设备和组网

回到一开始注册的网页,会发现设备列表当中新增了两台设备,在前面的方框打钩即可。根据 Node ID 判断设备的类型,牢记设备被分配的 IP 。

当然,我们也可以删掉自动分配的IP,自己分配内网IP,小白这里为了方便记忆,改成了10.144.0.310.144.0.4。这是我们可以回到广州和香港的机器,去看一下内网IP。我们可以看到,两台机器都已经获得了内网IP。

我们来看下测试一下延迟和速度。

我们可以看到,第一个ping的延迟很高,应该是广州和香港两台机器在向根服务器请求互相连接,而后面11ms的延迟则是两者已经建立了P2P的点对点传输。

这里就存在一个问题,根服务器位于境外,由于总所周知的原因,高峰期可能导致客户端之间无法建立连接。所以我们可以自建moon/planet服务器,这个以后有机会我们再来讲。

我们再来看下速度,路由啥的。

fake iplc/迫真IPLC

有到了喜闻乐见的fake iplc了,我们直接走起。

跑个油管

注意:纯属娱乐,和wireguard一样,有握手所以特征明显,udp会被限流。仅仅当作虚拟专用网络来说还可以,要富强的话,你有其他更好的选择。

提示

如果内网不通的话,考虑下是不内核转发没开启,可参考如下命令:

开启转发功能。其中,ens18要替换为自己的本地网卡,ztqu3crtje要替换为zerotier的虚拟网卡

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE
iptables -A FORWARD -i ens18 -o ztqu3crtje -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ztqu3crtje -o ens18 -j ACCEPT
apt install iptables-persistent
bash -c iptables-save > /etc/iptables/rules.v4
使规则持久化

延伸阅读

上面的示例中,我们只介绍了 ZeroTier 的基本使用。ZeroTier 的功能远不止这些,如果你非常感兴趣还可以参考下面这些文档:

  1. Openwrt 使用 ZeroTier 实现内网穿透

链接:https://qingsay.com/zerotier-openwrt.html

  1. 无公网 IP 搞定群晖 + ZEROTIER ONE 实现内网穿透

链接 1:https://www.hao4k.cn/thread-29377-1-1.html

链接 2:https://zhuanlan.zhihu.com/p/73558450

  1. 使用 ZeroTier 建立 IPv6 隧道

链接:https://moe.best/tutorial/zerotier-ipv6.html

  1. 在容器中不依赖 TUN/TAP 使用 ZeroTier 实现 P2P VPN

链接:http://www.senra.me/nat-traversal-series-zerotier-p2p-vpn-can-be-used-in-container-without-tuntap/

  1. Zerotier 简明教程

链接:https://jiajunhuang.com/articles/2019_09_11-zerotier.md.html

  1. 使用 Docker 创建 ZeroTier Moon 节点

链接:https://www.cnblogs.com/webenh/p/11263421.html

  1. Zerotier 2.0 的愿景图

链接:https://www.zealic.com/2019/10/zerotier2/

总结

从上面的介绍,我们可以看到 ZeroTier 在使用上非常简单、也支持多设备多平台,并且可以无需公网服务器。但由于其免费的根服务器在国外,可能网速会一定影响,建议自建私有根服务器。

参考文档(抄)

1.内网穿透神器 ZeroTier 使用教程

2.debian11 安装zerotier并实现局域网自动nat转发

3.Debian11 zerotier nat转发遇到的部分问题

 


VPS小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址