zerotier-one安装及配置
简介
ZeroTier
这一类 P2P VPN 是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 NAS,而且是点对点直连,数据传输并不经由第三方服务器中转。
Zerotier 在多设备之间建立了一个 Peer to Peer VPN(P2PVPN)
连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 ZeroTier One
( ZeroTier
的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT
之后。连接到虚拟 LAN 的任何计算机和设备通常通过 NAT
或路由器设备与 Internet
连接,ZeroTier One
使用 STUN
和隧道来建立 NAT
后设备之间的 VPN 直连。
简单一点说,Zerotier
就是通过 P2P
等方式实现形如交换机或路由器上 LAN
设备的内网互联。
概念
所有的设备都是客户端,连接方式是点对点。在路由器下面的话是用 uPnP 的方式进行转发实现客户端到客户端的直接连接。如果 uPnP 没有开启,会通过传统的服务器转发的方式进行连接。
Earth
根据其介绍,将地球上的所有设备连起来。那这里的 Earth 指的就是整体的一个服务。
Network
每一个 Network 包含的所有设备都在同一个网络里。每个网络有一个 Network ID。各客户端通过这个 ID 连接到此网络。当然,一个账号是可以创建多个网络的。
网络氛围 Public 和 Private。一般我们自己组网是要用 Private,需要在页面授权设备才可以进行访问。Public 权限好像不太有人会需要吧..
以下介绍的所有概念都是属于 Network 下的。
Planet
星球嘛。指的是官方提供的服务器节点。各客户端都是通过这些服务来互相寻址的。相当于 zookeeper 的不同节点。
Moon
自定义的 Planet。由于 Zerotier 没有国内节点,在两个设备刚开始互连的时候有可能需要通过国外的节点寻址(不过我没发现有什么慢的)导致创建连接的速度偏慢。在自己的网络里搭建 Moon 可以使连接提速。
Leaf
客户端。就是连接到网络上的每一个设备。其实经过测试,Moon 也是客户端的一种。这里特指没有额外功能,单纯用于连接的客户端。
开始使用
Zerotier 支持基本所有设备:Windows、MacOS、iOS、Android、Linux、FreeBSD、Synology、QNAP、WD MyCloud、OpenWRT。再不济,支持 Docker,凡是能跑 Docker 能联网的设备都可以用。
其中 iOS 不支持自定义 Moon,Android 的自定义 Moon 要下载非官方的 APP。
本着不给自己找麻烦的原则,能用 ui 就用 ui,能一键搭建就一键搭建。给了 docker-compose 就直接用,不要折腾乱七八糟的东西。
注册账号
官方网站登录,我直接用 Github 登录。登录后发现我两年前玩过这个东西…
创建网络
不用输入任何没用的信息,上来直接创建网络,只需一次点击,网络就创建好了。
记住这个 Network ID,以后会经常见到。
点击网络进去,默认配置基本够用。
MacOS
brew install zerotier-one
在下面输入网络 ID,点击 Join Network 即可。
Windows 的 UI 跟这个一毛一样。
iOS
AppStore 搜索 Zerotier,下载。点击右上角加号,输入网络 ID,OK。
Linux
根据官网给的说明,直接运行脚本即可。
curl -s https://install.zerotier.com | sudo bash
如果你安装了 GPG 密钥验证,用下面这条命令
curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
脚本会自动将 Zerotier 的源添加到 apt/yum 里并安装。
安装好后,运行命令
sudo zerotier-cli join 你的网络ID
即可。
管理系统ztncui
https://gitee.com/OnlyVersion/ztncui
PLANET 服务器搭建
简单来讲就是官方的服务器在海外,我们连接的时候会存在不稳定的情况
准备条件
- 具有公网
ip
的服务器(需要开放 3443/tcp 端口,9993/tcp 端口,9993/udp 端口) - 安装
docker
下载项目源码
git clone https://github.com/xubiaolin/docker-zerotier-planet.git
执行安装脚本
进入项目目录
cd docker-zerotier-planet
运行 deploy.sh
脚本
./deploy.sh
根据提示来选择即可,操作完成后会自动部署
-------------------------------------------
您当前公网ip为:8.8.8.8, 使用当前ip请输入:y
-------------------------------------------
使用其他ip请输入要使用的ip,例如1.1.1.1
-------------------------------------------
整个脚本预计需要 3-10 分钟,具体需要看网络与机型
当您看到类似如下字样时,表示安装成功
Step 6/6 : CMD /bin/sh -c "zerotier-one -d; cd /opt/ztncui/src;npm start"
---> Running in 13b4acf043ce
Removing intermediate container 13b4acf043ce
---> f66b3f73437e
Successfully built f66b3f73437e
Successfully tagged zerotier-planet:latest
启动服务
WARNING: Published ports are discarded when using host network mode
7782066b89fb217bf53ae57b139c73c3d6df79fecf887d1571aa8eed2433ba75
planet
文件
脚本运行完成后,会在 /opt/
目录下有个 planet
文件
下载该文件以备用
新建网络
访问 http://ip:3443
进入controller页面
使用默认账号为:admin
默认密码为:password
创建网络
进入后创建一个网络,可以得到一个网络ID
创建网络,输入名称
得到网络 id
客户端配置
客户端主要为Windows, Mac, Linux, Android
Windows 配置
首先去zerotier官网下载一个zerotier客户端
将 planet
文件覆盖粘贴到C:\ProgramData\ZeroTier\One
中(这个目录是个隐藏目录,需要运允许查看隐藏目录才行)
Win+S 搜索 服务
找到ZeroTier One,并且重启服务
加入网络
使用管理员身份打开PowerShell
执行如下命令,看到join ok字样就成功了
PS C:\Windows\system32> zerotier-cli.bat join 网络id(就是在网页里面创建的那个网络)
200 join OK
PS C:\Windows\system32>
登录管理后台可以看到有个个新的客户端,勾选Authorized就行
执行如下命令:
PS C:\Windows\system32> zerotier-cli.bat peers
200 peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
fcbaeb9b6c 1.8.7 PLANET 52 DIRECT 16 8994 1.1.1.1/9993
fe92971aad 1.8.7 LEAF 14 DIRECT -1 4150 2.2.2.2/9993
PS C:\Windows\system32>
可以看到有一个 PLANTET 和 LEAF 角色,连接方式均为 DIRECT(直连)
到这里就加入网络成功了
Linux 客户端
步骤如下:
- 安装linux客户端软件
- 进入目录
/var/lib/zerotier-one
- 替换目录下的
planet
文件 - 重启
zerotier-one
服务(service zerotier-one restart
) - 加入网络
zerotier-cli join
网络id
- 管理后台同意加入请求
zerotier-cli peers
可以看到planet
角色
安卓客户端配置
Zerotier 非官方安卓客户端发布:支持自建 Moon 节点 - V2EX
MacOS 客户端配置
步骤如下:
- 进入
/Library/Application\ Support/ZeroTier/One/
目录,并替换目录下的planet
文件 - 重启 ZeroTier-One:
cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill
- 加入网络
zerotier-cli join
网络id
- 管理后台同意加入请求
zerotier-cli peers
可以看到planet
角色
参考链接
五分钟自建 ZeroTier 的 Planet/Controller
管理面板SSL配置
管理面板的SSL支持需要自行配置,参考Nginx配置如下:
upstream zerotier {
server 127.0.0.1: 3443;
}
server {
listen 443 ssl;
server_name {CUSTOME_DOMAIN}; #替换自己的域名
# ssl证书地址
ssl_certificate pem和或者crt文件的路径;
ssl_certificate_key key文件的路径;
# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
proxy_pass http: //zerotier;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name {CUSTOME_DOMAIN}; //替换自己的域名
return 301 https: //$server_name$request_uri;
}