使用Zerotier实现内网穿透和异地组网

前言

Zerotier 是一款开源工具,可以用来构建点对点(P2P)虚拟网络

当你不在家的时候想访问家里的nas或者其他设备,但是没有公网的时候

当你想跟朋友们一起局域网联机打游戏,但是你们并不在一起的时候

Zerotier 就可以帮你解决这个问题了

注册Zerotier

官网地址:https://www.zerotier.com/

注册登录之后点击Create A Network创建网络

1678800675151.png

创建好后下面会出现一条记录

1678801240758.png

Netwrok Id我们组网的时候需要用到

安装

  1. Linux系统安装
    curl -s https://install.zerotier.com | sudo bash
  2. Windows安装

    直接去官网下载安装包进行安装

    连接:https://www.zerotier.com/download/

客户端加入虚拟网络

  1. Linux加入虚拟网络

    将命令中的 xxxxxxxx 替换成上面的Netwrok Id

    zerotier-cli join xxxxxxxx
  2. Windows加入虚拟网络

    右下角图标,右键-Join New Network,在弹出出口输入你的Network Id,然后点join

    1678801200553.png

使用云服务器搭建Zerotier Moon 节点

为什么要搭建Zerotier Moon节点?

因为Zerotier 服务器在国外我们组网进行p2p连接的时候延迟比较大,官方服务器用的人很多高峰期很拥堵

我们使用国内服务器可以降低延迟,服务器不需要太大宽带,因为p2p是设备间通信不经过服务器流量,服务器宽带不会影响组网的速度

服务器安装Zerotier和加入虚拟网络(服务器也需要加入到虚拟网络)可以参考上面的Linux的操作

  • 配置Moon
    #进入 zerotier-one 程序所在的目录
    cd /var/lib/zerotier-one
    #生成 moon.json 配置文件
    zerotier-idtool initmoon identity.public >> moon.json
    #编辑 moon.json 配置文件
    vim moon.json
    #将配置文件中的 "stableEndpoints": [] 修改成 "stableEndpoints": ["IP/9993"],IP是云服务器的公网IP
    #服务器需要开放 9993 的UDP端口
    
    #生成 moon 文件
    zerotier-idtool genmoon moon.json
    #将生成的 000000xxxxxxxxxx.moon 移动到 moons.d 目录
    mkdir moons.d
    mv 000000xxxxxxxxxx.moon moons.d
    #000000xxxxxxxxxx.moon其中的xxxxxxxxxx是本机的节点ID
    #重启 zerotier-one 服务
    systemctl restart zerotier-one
  • 使用 Moon

    Linux和Windows使用命令使用Moon节点,Wondows建议使用管理员权限启动Power Shell

    #xxxxxxxxxx为Moon节点Id 就是上述生成的moon文件的文件名中的xxxxxxxxxx
    zerotier-cli orbit xxxxxxxxxx xxxxxxxxxx
  • 查看moons
    zerotier-cli listpeers

    配置路由

给哪台组网设备配置路由就可以访问哪台设备内网所有设备

Destination 是 内网ip段/24 Via是组网的那台设备在Zerotier的内网ip

1678851435425.png

还需要给组网那台设备开启路由转发和防火墙设置

开启路由转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

防火墙设置

#查看网卡信息
ip a
#这里zt8u6z2kio为zerotier虚拟网卡
iptables -A FORWARD -i zt8u6z2kio -j ACCEPT
iptables -A FORWARD -o zt8u6z2kio -j ACCEPT
iptables -t nat -A POSTROUTING  ! -o lo -j MASQUERADE
#保存配置
iptables-save

Zerotier常用命令

#加入网络
zerotier-cli join xxxxxxxx
#离开网络
zerotier-cli leave xxxxxxxx
#获取本机节点Id和查看服务状态
zerotier-cli status
#加入Moon节点
zerotier-cli orbit xxxxxxxxxx xxxxxxxxxx
#查看moons
zerotier-cli listpeers
#查看所有的网络
zerotier-cli listnetworks
Last modification:April 10, 2024
If you think my article is useful to you, please feel free to appreciate