ZeroTier 是一个便捷的虚拟局域网工具(VLAN),可以在不同外网的电脑主机建立一个局域网网络,方便电脑于电脑之间的通信。可用于内网穿透,相对内网穿透,ZeroTier可以使用对于IP的所有端口,包括80端口,21,443,445端口等。其最大的优势是免费而且部署非常便捷,几乎零配置,支持各大主流平台,Wndows、macOS、 Lnux、 Android、iOS、群晖、Docker和其他NAS系统上面。对于复杂的内网环境还可以建立节点服务器(moon),直接打通不同网络不同环境下的主机。
官方网站:https://www.zerotier.com/
Github : https://github.com/zerotier/ZeroTierOne/
访问Zerotier账号注册页面建立账号
登录成功后点击创建一个网络
创建成功后会生成一个 Network ID
把这个ID加入到客户端即可连接到虚拟局域网
ARM架构搭建
树莓派开发板等迷你设备搭建客户端是一个不错的选择,在部署好Docker环境下输入搭建命令,注意$HOME位置
docker run --name zerotier-one --device=/dev/net/tun --net=host \
--cap-add=NET_ADMIN --cap-add=SYS_ADMIN \
-v $HOME/docker/zerotier-one:/var/lib/zerotier-one ugeek/zerotier:arm
进入容器
docker exec -it zerotier-one bash
加入虚拟网络,此时的Network_ID是在官网上申请下来的ID
zerotier-cli join Network_ID
离开虚拟网络
zerotier-cli leave Network_ID
X64架构搭建
普通PC平台搭建相对简单快捷,注意$HOME位置
docker run \
-d \
--restart unless-stopped \
--name zerotier-one \
--device /dev/net/tun \
--net host \
--cap-add NET_ADMIN \
--cap-add SYS_ADMIN \
-v /disk/docker/zerotier-one:/var/lib/zerotier-one \
henrist/zerotier-one
加入网络
docker exec zerotier-one zerotier-cli join 88503383901559a0
显示服务状态,显示200表示正常
docker exec zerotier-one zerotier-cli status
Zerotier 默认的节点网络很多时候连接不上或者连接速度慢,导致主机和主机之间的速度不够理想
搭建moon节点条件
生成moon.json文件
Zerotier配置文件目录在 /var/lib/zerotier-one
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public > moon.json
修改配置文件,在stableEndpoints字段后面添加服务器公网IP和端口
vim moon.json
"stableEndpoints": [公网IP:/9993"]
生成 .moon 签名文件
zerotier-idtool genmoon moon.json
执行之后会生产一个 000000xxxx.moon 的文件,将这个文件复制出来。
加入 Moon 节点
在 ZeroTier 安装目录新建一个名为moons.d的文件夹,将上步下载下来的000000xxxx.moon文件复制至该目录下,重启 ZeroTier 即可。
系统 | 路径 |
---|---|
Windows | C:/ProgramData/ZeroTier/One |
Macintosh | /Library/Application Support/ZeroTier/One |
Linux | /var/lib/zerotier-one |
FreeBSD/OpenBSD | /var/db/zerotier-one |
验证
在其他设备输入下面的命令列出 zerotier 的 peer 列表,当列表中含有 Moon 节点的 IP 的记录的角色为MOON时,该设备 zerotier 成功加入私有 Moon 节点。
zerotier-cli listpeers
树莓派安装了zerotier之后,可以通过修改转发和来实现访问局域网的其他设备,不局限于已经加入虚拟局域网的设备
首先开启路由转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
添加以下转发条件
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o 808557a394 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i 808557a394 -o eth0 -j ACCEPT
# iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j MASQUERADE
注:eth0 是树莓派的网卡名,808557a394是zerotier建立的虚拟网卡名,具体可以通过输入 ip addr 来查看,每台设备的虚拟网卡名不一样,不要抄。
10.10.10.0/24是局域网的IP段不是zerotier的IP段
进入zerotier后台管理
新建一条本地局域网的路由表,如图所示,例如树莓派的局域网IP是 10.10.10.210 ,那么需要添加一条 10.10.10.0/24 的路由表。同时 via 要填写的是zerotier分配的IP(10.17.10.210)
注意:10.10.10.210是本地的设备的IP,不是zerotier分配的IP,10.17.10.210才是zerotier分配的IP
在设备列表中,点击树莓派列表旁边的小扳手(设置)展开,勾选 Allow Ethernet Bridging (允许以太网桥接)即可完成设置。