Contents
最近没事逛B乎的时候看到有人在安利一款内网穿透工具叫做ZeroTier,是基于P2P(peer to peer)的,出于兴趣安装并了体验了这个所谓的「无需公网ip,端对端穿透,多达100台设备」的免费工具。
之前介绍了nps和frp这两款内网穿透工具,他们的共同特点都是需要一个带有公网ip的服务器做中心节点,通过反向代理的方式实现内网穿透,因而需要做各种端口映射。而ZeroTier则像一个全球大型交换机,通过P2PVPN这种方式实现你的多台设备连在同一个虚拟交换机下面从而实现穿透。
经过体验之后我先上结论:官方的中心节点服务器太慢,建议自建中心服务器Moon。那样的话不如直接用nps和frp,除非你对端口映射有心理阴影。
交流群:Newlearnerの水群
简介与原理
官方Github:https://github.com/zerotier
Zerotier在笔记本电脑,台式机,电话,嵌入式设备,云资源和应用之间建立了Peer to Peer VPN(P2PVPN)连接,在客户端通过ZeroTier One在对等体之间建立直接连接,即使它们位于NAT之后。连接到虚拟LAN的任何计算机和设备通常通过NAT和路由器设备与Internet连接。ZeroTier One使用STUN和打孔来建立NAT后对等体之间的直接VPN连接。
说的直白一点,就是通过P2P等方式实现形如交换机或路由器上LAN设备的内网互联。
ZeroTier 官方搭建了一个行星根服务器叫做“行星Planet“,行星根服务器唯一的且是免费的,它记录了所有的路径信息。除此之外还有 12 个遍布全球的付费根服务器。所以使用免费套餐,连接时的延迟可能会很高,尤其是移动,毕竟 Earth 在国外。不过ZeroTier 能自己创建根服务器“卫星 Moon”,提供了一个解决网络延时、卡顿和失联的可能解决方案。连接行星或卫星的服务器成为”叶子节点 Leaf“。
每个免费套餐可以享受100台设备的内网互联,还是挺良心的。
注册与客户端安装
-
注册与Planet配置
登录官网注册即可,填写你的邮箱和密码。
注册好之后我们来建立一个Network并分配内网网段:
以上信息中Network ID需要牢记,这是客户端连接到行星服务器的唯一识别码。
-
客户端配置
ZeroTier支持Windows、macOS、Linux 三大桌面平台,iOS、Android 两大移动平台,QNAP(威连通)、Synology(群晖)、Western Digital MyCloud NAS(西部数据)三个 NAS 平台,还支持 OpenWrt/LEDE 开源路由器项目。
可以说是支持的很全面了,对于路由器想多说两句:除非你有两台路由器,一台放在家里,另一台放在公司等地,并且有大量设备连接于这两台路由器且需要内网穿透,否则不要在路由器上面部署ZeroTier,仅使用单设备客户端即可。并且为了连接的稳定性,强烈建议自己部署Moon节点。
下载地址:https://www.zerotier.com/download/
我们以iOS和Mac设备为例介绍一下客户端如何与Planet相连接并分配到内网地址:
iOS下载好ZeroTier One之后填入刚刚的Network ID,配置好VPN之后会启动连接,届时会根据MAC地址分配给设备一个唯一认证字符串Node ID,可用来在web配置界面保留该设备不被删除以及帮助我们区分设备。
macOS同理,并且可以使用命令行辅助:
1 2 3 4 5 6 7 8 9 10 |
# 启动 zerotier-one -d # 获取地址和服务状态 zerotier-cli status # 加入、离开、列出网络 zerotier-cli join # Network ID zerotier-cli leave # Network ID zerotier-cli listnetworks |
-
认证设备和组网
回到一开始注册的网页,会发现设备当中多了两台,在前面的方框打钩即可。根据Node ID判断设备的类型,牢记设备被分配的ip。
简单使用体验
很遗憾我这边的体验可以用极差来形容,并且对B乎人均几十ping、不断连还可以流畅传输文件产生怀疑。当然移动要负一部分责任,不过我觉得这还是和Planet远在国外水土不服有关系。
测试环境:MBP连接电信网络,iPhone连接移动4G网络
从图中可以看到丢包严重,ping一直在400ms左右波动,最后测试结果丢包率高达85%。并且iOS上面有断连的情况发生。
最后还是成功连接上了Mac的ssh,我觉得这样的内网体验大概也只能连接ssh了:
优缺点
优点
1、配置简单上手方便
2、支持多设备多平台
3、无需配置端口映射,组网即用
4、免费且可以无需公网服务器
5、安全性从某种程度来讲好于自己维护的服务器
6、给设备分配唯一标识符,无需DDNS
缺点
1、Planet服务器在国外,在国内使用不稳定
2、相对于frp、nps等项目应用范围较小,更偏向于组网
针对以上的优缺点,我的建议是:
想要稳定&体验好,建议直接上nps和frp这两款工具,或者使用国内的花生壳等付费服务。
纯组网并有简单穿透需求,又不想大费周章,可以采用ZeroTier。进一步追求稳定,自己搭建Moon服务器。
Moon服务器搭建
-
部署
1 2 3 4 5 6 7 8 9 10 |
#下载并安装 curl -s https://install.zerotier.com/ | sudo bash #加入创建好的局域网 zerotier-cli join <network id> #生成并给配置文件赋权 chmod 777 /var/lib/zerotier-one cd /var/lib/zerotier-one zerotier-idtool initmoon identity.public > moon.json #查看本机Node ID zerotier-cli info |
生成好moon.json
之后我们需要手动修改一项参数:
将下面的 “stableEndpoints”: [“公网ip/端口”] 补全完整并保存,并检验id
是否有误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "id": "", "objtype": "world", "roots": [ { "identity": "", "stableEndpoints": ["公网ip/端口"] } ], "signingKey": "", "signingKey_SECRET": "", "updatesMustBeSignedBy": "", "worldType": "moon" } |
1 2 3 4 5 6 7 8 9 |
#生成moon.json zerotier-idtool genmoon moon.json #新建文件夹 mkdir moons.d mv xxxxxxxxxxx.moon moons.d #kill killall -9 zerotier-one #启动 zerotier-one -d |
-
使用
1 |
zerotier-cli orbit <id> <id> |
*id为之前配置文件中的参数
-
检验
1 |
zerotier-cli listpeers |
列表中出现带有”MOON“字样的公网ip节点则说明部署成功。
关于ZeroTier就尝试了这么多,很多人可能关心路由器的配置,鉴于本人条件有限不能一一尝试。现在很多路由器固件提供了ZeroTier的下载,弄好防火墙和路由表即可,不过注意穿透两边的内网地址网段不要相同。
参考文章:
维基百科
ZeroTier Wiki
免费服务给的带宽多少啊 这类穿透 给的免费服务 带宽一般都不给多少 这是比较郁闷的
确实,我测试的时候电信、移动两个运营商互相穿透,基本处于高丢包不可用状态。还是自建nps或者本地申请公网ip做ddns来得实在。
两个客户端之间建立的是P2P连接,通信不经过服务器的
高丢包只能是不同运营商之间的QOS了
不会啊,我用这个,,ping 校园网和移动网 ,,都只有50ms以内,晚上10以内
刚刚试了一下,移动联通ping不通,同一网络才行,还没回学校,不是很清楚教育网用着怎样,
还别说这几个都用过。还有一个p2p的smarGate 和python版的shootback
nps这玩意安卓端90多兆?核心只有几百kb?不知作者水平lj还是另有想法!(暂且认为水平lj)
个人感觉最好的frp稳定,其次是shootback,单文件穿透,丢包率还极低。
goproxy并发和丢包率都不行。不过还是麻烦,最后只能自己写了一个java版500多kb....效果杠杠