使用ZeroTier-One有一段时间了,但由于公用节点,有时不稳定,而又没有moon,所以一直没有用它做为内网的主要使用工具.
正好有点时间, 就查了下资料,把各节点的moon都配置好了, .期间还是遇到满多问题的, 所以就在此处将其中遇到的问题和坑点记录下来,以供大家参考..
说明一下, moon的搭建是为了补充根节点在国外,速度慢, 且不稳定的一个补充方案, 以便使zerotier能在各种情况都能稳定运行的一种保障. 由于我的moon是搭建在linux环境下, 所以此处均以linux环境为准,其它平台方式类似.
curl -s https://install.zerotier.com/ | sudo bash
2.生成moon配置文件
cd /var/lib/zerotier-one #安装好zerotier后,自动会安装到此目录
sudo zerotier-idtool initmoon identity.public > moon.json #该命令将id文件转换为能用于配置的json
3. 修改配置文件moon.json,主要是添加公网IP,修改内容如下, 9993是默认端口
"stableEndpoints": [ "23.23.23.23/9993" ]
注:23.23.23.23为公网ip, 一定要配置正确,Zerotier依靠此配置去连接moon.后面的端口若没有改变则默认都是9993端口, 且是UDP协议的, 此处在防火墙上需要开放UDP,否则是连接不上Moon的.
该配置里面,有一个id字段,10个字符,如: ["id": "18fasd2319"], 就是moon的id, 在客户端连接时,需要用到它.
4.生成moon文件
sudo zerotier-idtool genmoon moon.json
执行该命令后,会在在/var/lib/zerotier-one目录下生成一个类似00000018fasd2319.moon的文件..这个文件非常重要,所有的客户端要连接上moon都是依靠该文件关联的..
5.使moon配置文件生效:
在/var/lib/zerotier-one目录下,新建一个 moons.d 文件夹,并将刚生成的moon配置文件放到该文件夹下
mv 00000018fasd2319.moon moons.d/
6. 重新启动moon服务器,由于使用命令安装时会自动注册为服务,所以可以依靠以下命令完成启动或重启
service zerotier-one restart #(服务重启命令)
/etc/init.d/zerotier-one restart #(服务重启命令)
service zerotier-one start #(服务启动命令)
zerotier-one -d #或直接程序启动
经过以上配置,服务器上的moon即配置并应用完闭.
接下来就需要在各客户端zerotier上配置,并连接此服务器,
有两种方法可以完成.
Linux: 直接在zerotier目录下,创建moons.d文件夹,并且将生成的00000018fasd2319.moon文件拷入,并重启服务即可.
Windows(10):由于大部分人常用环境都是windows,所以此处着重对在windows环境下的配置说明下:
打开服务程序services.msc, 找到服务"ZeroTier One", 并且在属性内找到该服务可执行文件路径,我的环境下为C:\ProgramData\ZeroTier\One\zerotier-one_x64.exe, 打开该文件夹, 并且在其下建立moons.d文件夹,然后将moon服务器下生成的000xxxx.moon文件,拷贝到此文件夹内..再重启该服务即可..
(注,此处重启的是该项服务,不是电脑右下角的图标程序..网上大多资料都没法特别说明,或者含糊没说清,甚至重启电脑之类的说法都说出来了,比较马虎..右下角任务栏程序路径是在C:\Program Files (x86)\ZeroTier\One目录下,而服务路径却并非在该路径,若将moons.d文件夹放不对位置,是无法连上Moon服务器的.)
只需执行此命令即可,此处需要输入两遍id:
zerotier-cli orbit 18fasd2319 18fasd2319
(此种方法依赖zerotier的根服务器,若根服务器连接不上,则会无效,由于不确定性, 所以本人更喜欢方法1..这个看个人情况而定,适用就好...)
zerotier-cli listpeers
若有类似地址,即可证明moon连接成功
200 listpeers 18fasd2319 23.23.23.23/9994;4242;4038 224 1.2.12 MOON
附录:
由于很多人对配置服务端的moon都会有修改端口的需求,笔者也不例外, 翻了官网不少文档最后才找到方法..在此处一并记录下来..以供大家参考:
在运行程序同级目录下建立local.conf文件:
文件内容配置如下,primaryPort即为想要配置的端口:
{
"settings":
{
"primaryPort":9994
}
}
local.conf 完整配置示例如下:
{
"physical": { /* Settings that apply to physical L2/L3 network paths. */
"NETWORK/bits": { /* Network e.g. 10.0.0.0/24 or fd00::/32 */
"blacklist": true|false, /* If true, blacklist this path for all ZeroTier traffic */
"trustedPathId": 0|!0 /* If present and nonzero, define this as a trusted path (see below) */
} /* ,... additional networks */
},
"virtual": { /* Settings applied to ZeroTier virtual network devices (VL1) */
"##########": { /* 10-digit ZeroTier address */
"try": [ "IP/port"/*,...*/ ], /* Hints on where to reach this peer if no upstreams/roots are online */
"blacklist": [ "NETWORK/bits"/*,...*/ ] /* Blacklist a physical path for only this peer. */
}
},
"settings": { /* Other global settings */
"primaryPort": 0-65535, /* If set, override default port of 9993 and any command line port */
"portMappingEnabled": true|false, /* If true (the default), try to use uPnP or NAT-PMP to map ports */
"softwareUpdate": "apply"|"download"|"disable", /* Automatically apply updates, just download, or disable built-in software updates */
"softwareUpdateChannel": "release"|"beta", /* Software update channel */
"softwareUpdateDist": true|false, /* If true, distribute software updates (only really useful to ZeroTier, Inc. itself, default is false) */
"interfacePrefixBlacklist": [ "XXX",... ], /* Array of interface name prefixes (e.g. eth for eth#) to blacklist for ZT traffic */
"allowManagementFrom": "NETWORK/bits"|null, /* If non-NULL, allow JSON/HTTP management from this IP network. Default is 127.0.0.1 only. */
"allowTcpFallbackRelay": true|false /* Allow or disallow establishment of TCP relay connections (true by default) */
}
}