惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
M
MIT News - Artificial intelligence
腾讯CDC
B
Blog RSS Feed
H
Help Net Security
J
Java Code Geeks
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
博客园_首页
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
博客园 - Franky
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 叶小钗
Martin Fowler
Martin Fowler

Jiajun的技术笔记

你好,2026! TiDB 源码阅读(六):TiDB Coprocessor 源码解析 性能优化的核心思想 TiDB 源码阅读(五):索引 TiDB 源码阅读(四):AST、逻辑计划、物理计划 CockroachDB Serverless Architecture podman 无故退出 Cursor Control-L (CTRL-L) Keyboard Shortcuts in Terminal Replace docker with podman Using xmonad with xfce4 A RC script for freebsd frpc 自己动手写一个k8s controller AI 会取代你的(编程)岗位吗? 自建DERP服务器提升Tailscale连接速度(使用Nginx转发) 自动升级Docker容器 再读《程序员修炼之道-从小工到专家》 让浏览器下载文件 再读《软件随想录》/《黑客与画家》/《软技能》 HTTP 压力测试中的 Coordinated Omission 2的补码 编程语言中的 context 是什么? flutter macOS 构建出错 Flatpak 使用小记 Golang CAS 操作是怎么实现的 PostgreSQL 当MQ来使用 Clash 结合 工作VPN 的网络设计 使用 PostgreSQL 搭建 JuiceFS PostgreSQL 配置优化和日志分析 有GitHub Copilot?那就可以搭建你的ChatGPT4服务 窗口函数的使用(以PG为例)
zerotier简明教程
Jiajun Huang · 2019-09-11 · via Jiajun的技术笔记

最近使用zerotier替换了frp来实现内网穿透,zerotier是一个软交换机,使用zerotier可以让多台内网机器组成一个局域网。

首先要安装 zerotier-one 这个软件包,如果是ArchLinux,直接运行:

$ sudo pacman -S zerotier-one

如果是Ubuntu/Debian/CentOS,则运行:

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

注:如果是Windows或者macOS、Android、iOS等,那么可以在 https://www.zerotier.com/download/ 下载zerotier

之后就完成了安装,然后我们要启动zerotier,并且让他开机自启动,运行:

$ sudo systemctl start zerotier-one.service
$ sudo systemctl enable zerotier-one.service

例如我有两台内网机器,于是都按照上面的描述进行了安装和启动。接下来要做的事情是到 https://my.zerotier.com/ 里注册帐号并且登录,然后创建一个Network,创建之后点到这个网络里,拉到最上面,选择 Private(私有网络) ,这样别人加入的时候就需要认证, 如果想改名字的话,改个名字,其他不用动。然后复制 Network ID,就是拉到最上面的时候可以看到的一个类似 83048a0632246d2c 的字符串。

然后在两台内网机器上执行:

$ sudo zerotier-cli join 83048a0632246d2c

加入之后他们就启动了,但是还连不进我们创建的网络,因为我们选择了 Private(私有网络) ,我们还需要到 https://my.zerotier.com/ 上面对接入的机器打勾,拉到 Members 这一节,把前面的两个勾勾选上。

这个时候执行一下 ip a 你会发现多了一个叫做 ztuzethlza 或者类似名字的设备,还有IP地址,这就是zerotier组建的局域网的IP 地址,但是这个时候你如果直接连接另外一台机器的话可能会非常慢,所以为了加速,我们还需要一台在国内的,或者是在国外但是访问 速度相当快的机器做转发。

搭建中转机器(moon)

首先把中转机器按照上述步骤一起加入网络,然后执行:

$ cd /var/lib/zerotier-one/
$ sudo zerotier-idtool initmoon identity.public > moon.json

接下来编辑一下 moon.json,把 "stableEndpoints": [] 这一节里加入中转机器的公网IP,例如 "stableEndpoints": ["1.2.3.4/9993"],其中 9993是默认监听的端口,接下来要把9993端口的防火墙放开(注意是UDP),如果你的机器外边还有防火墙的话,也要一起放开,例如阿里云的机器就有 防火墙规则,要一起把对应端口的UDP流量放行,此后,我们要生成moon的配置:

$ sudo ufw allow 9993/udp
$ sudo zerotier-idtool genmoon moon.json

然后在 /var/lib/zerotier-one/ 下建立 moons.d 文件夹,并且把 0000xxx.moon 文件夹丢进去。

接下来把中转服务器的 zerotier-one 重启:

$ sudo systemctl restart zerotier-one

加入moon

注意我们搭建moon的时候有一个 moon.json,我们把内网机器加入这个moon的时候,需要其中的一个id:

$ grep id /var/lib/zerotier-one/moon.json | head -n 1
 "id": "xxxxxxxxxx",

复制这个id,然后在内网机器执行:

$ sudo zerotier-cli orbit xxxxxxxxxx xxxxxxxxxx

注意,xxxxxxxxxx 要两遍。此后重启 zerotier,完毕。等一会儿之后,zerotier局域网内的机器就可以互相访问了,延时非常低:

$ ping 192.168.1.111
PING 192.168.1.111 (192.168.1.111) 56(84) bytes of data.
64 bytes from 192.168.1.111: icmp_seq=1 ttl=64 time=35.0 ms
64 bytes from 192.168.1.111: icmp_seq=2 ttl=64 time=37.1 ms
64 bytes from 192.168.1.111: icmp_seq=3 ttl=64 time=36.9 ms
^C
--- 192.168.1.111 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4ms
rtt min/avg/max/mdev = 35.039/36.369/37.145/0.944 ms

注:如果是Windows/macOS/Android/iOS,那么可以使用所安装的图形客户端加入网络。


参考资料: