ZeroTier 内网穿透

由 夏日冰菓 发布

用ZeroTier搭建属于自己的虚拟局域网(VLAN)

ZeroTier

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/

建立管理账号,新建专属ID

访问Zerotier账号注册页面建立账号
地址:https://my.zerotier.com/
登录

登录成功后点击创建一个网络

创建成功后会生成一个 Network ID

把这个ID加入到客户端即可连接到虚拟局域网

创建一个网络

基于Docker容器来搭建客户端

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

连不上?搭建Moon节点拯救你的网络

Zerotier 默认的节点网络很多时候连接不上或者连接速度慢,导致主机和主机之间的速度不够理想

搭建moon节点条件

  • 需要一台独立IP服务器
  • 开放9993通讯端口
  • 需要按照Zerotier客户端程序

生成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 即可。

系统路径
WindowsC:/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 (允许以太网桥接)即可完成设置。

添加路由表


暂无评论

发表评论