比frp更好用的内网穿透工具-ZeroTie One

曾经我觉得, 最好用的内网穿透工具是frp, 并且写了一篇文章来赞美免费提供8M带宽提供内网穿透的Sakura Frp, 但后来我发现, 哪怕是Sakura Frp免费提供了公网服务器, 使用起来还是有点繁琐了, 并且速度只有8M, 所以最终我找到了能够代替frp的内网穿透工具 : ZeroTier One.

ZeroTier One是什么?

ZeroTier One是一款内网穿透软件, 但是和frp的"内网客户端-远程公网服务器-内网客户端"模式不同的是, ZeroTier One是通过p2p方式在不同的设备之间进行连接的, 只要所有的设备都加入了同一个ZeroTier Network, 互相之间就可以像在局域网中那样访问对方, 并且是直接连接而不是走公网服务器, 速度上限基本取决与设备之间的网速而不是ZeroTier服务器.免费版的ZeroTier能够连接多达100各设备, 足够个人使用了.

ZeroTier One使用步骤

下载并且安装ZeroTier One客户端

进入ZeroTier的下载页面点击对应系统的下载链接, 即可下载并且安装ZeroTier One客户端.

注册并且登陆ZeroTier

点击链接进入注册页面, 进行注册.

创建一个Network

点击Networks标签, 再点击Create a Network按钮创建一个网络.

配置Network基本信息

点击刚刚创建的网络, 可以进入到network配置页面, 配置的作用如下图.

基本配置
网络设置

右键电脑上运行的ZeroTier One, 点击Join Network, 粘贴上面的Network ID.

成员管理

当两台设备都安装ZeroTier One并且加入了同一个网络, 即可互相通信.

此时, 已经可以直接使用远程桌面功能, 对局域网机器进行访问.

加速ZeroTier One之间的连接(可选)

虽然两个ZeroTier One客户端之间是通过p2p连接的, 但是设备A要首先连接到ZeroTier的行星根服务器(地球 Earth), 去获取到设备B的信息, 才能在两者之间进行通信, 而ZeroTier的全球唯一行星根服务器有可能离我们很遥远, 导致在某些时候"A-根服务器-B"这一过程速度会很慢, 这个时候可以通过在自己的公网服务器中架设根服务器(月球 Moons), 来加快"A-根服务器-B"这一过程.

  1. 执行下面的命令, 在公网服务器中安装ZeroTier

    1
    curl -s https://install.zerotier.com/ | sudo bash
  2. 进入ZeroTier安装目录, 生成配置文件

    1
    2
    cd /var/lib/zerotier-one
    sudo zerotier-idtool initmoon identity.public > moon.json
  3. 修改moon.json配置文件, 找到对应的那一行, 添加你的公网服务器的ip

    1
    "stableEndpoints": [ "123.123.123.123/9993" ]
  4. 生成文件

    1
    sudo zerotier-idtool genmoon moon.json

    这个时候会在当前目录生成一个名字类似0000009b30156f58.moon的文件.

  5. 创建名为moons.d的文件夹, 并且将上面的moon文件移动进去

    1
    mv 0000009b30156f58.moon moons.d
  6. 重启服务

    1
    service zerotier-one restart

这个时候, 你的公网服务器就已经成为moon服务器了, 客户端想要加入moon, 只需要用管理员powershell执行下面命令, 即可看到设备已经添加了moon节点. 后面那段字符是moon文件生成的文件名去掉开头的6个0.

1
2
zerotier-cli orbit 9b30156f58 9b30156f58
zerotier-cli listpeers