zerotier内网穿透以及moon节点配置

这是个好东西,打洞专用,使用UDP进行打洞,致力于开源SDN,SD-WAN解决方案,属于开源精品(仅仅是客户端开源,服务端不开源但是可以免费使用100个连接,所有这里用三方的开源组件搭建Moon端).跨平台多终端。将复杂的互联网用点对点的形式进行组建,并且在上面附加一层 VXLAN-like 虚拟网络层 来提高局域网的可见性,安全性。

在服务端方面,OPenwrt/LEDE下的zerotier是个非常不错的穿透软件,和frp各有千秋。
zerotier-one优势
1:控制端(ZeroTier 官网)功能足够强大,可以下发路由表、准入控制、IP分配、流量规则等,
2:可以建立中转服务器(Moon 服务器),从而实现更好的链接效果
3:接近于免费。个人用户最多可以接入 100 节点设备,
4:客户端开源。你完全可以自己编译

基本原理介绍
说白了就是 P2P(Peer to Peer),而且组织方式很像 DNS(关于 DNS 可以看这里)。
根服务器 R 记录了路径信息,设备 A 能通过ZeroTier唯一地址标识找到需要连接的设备 B

这个过程如下:

  • A 想要将数据包发送到 B,但由于它没有直接路径,因此将其向上发送到 R。
  • 如果 R 有直接链接到 B,它会转发数据包给 B。否则它会继续向上游发送数据包,直到达到行星根(planet)。行星根知道所有节点,所以如果 B 在线,最终数据包将到达 B。
  • R 还向 A 发送一个名为会和的消息,包含有关它如何到达 B 的提示。同时,将会和发给 B,通知 B 它如何到达 A。
  • A 和 B 获取它们的会合消息并尝试相互发送测试消息,可能会对 NAT 或状态防火墙进行穿透。如果这样可以建立直接链路,则不再需要中继。
  • 如果无法建立直接路径,则通信可以继续中继(速度慢)
    ZeroTier 官方搭建了一个行星根服务器叫做地球 Earth,行星根服务器唯一的且是免费的,它记录了所有的路径信息,一般情况下大家都直接用的这个。除此之外还有 12 个遍布全球的根服务器,这些是收费的服务。所以如果使用免费套餐,连接时的延迟可能会很高,另外由于 Earth 在国外,一些不确定因素可能会影响到使用。考虑到网络的不确定性,ZeroTier 能自己创建根服务器月球 Moons,这样就能在大局域网中得到更好的体验了。

安装

ZeroTier 是跨平台的,能安装在几乎任何平台

Windows、macOS、Linux、iOS、Android、QNAP、Synology、西数 MyCloud NAS,下载地址:https://www.zerotier.com/download.shtml

路由器推荐安装 Entware 后使用 opkg install zerotier 命令安装

配置

增加Zone

路由器配置

如果没有luci,直接修改一下

# vi /etc/config/zerotier
找到以下两处进行修改:
config zerotier sample_config
option enabled 0 (这里把0替换成1,让选项生效)
list join ‘8056c2e21c000001’ (替换为自己的网络ID)

其他无需修改,退出VI,按esc,然后按:(冒号)回车,再按wq保存退出编辑界面。然后输入reboot,重启。

你也可以使用WINSCP等软件直接进行修改。

防火墙配置(关键)

在LEDE上点击网络->防火墙,在基本设置>区域设置里,把转发改为接受。区域下面的三行(出站,入站,转发)都选接受,其他选项保持不动。
在防火墙->自定义规则页面,增加下面三条记录:

iptables -I FORWARD -i ztc3qwyx5l -j ACCEPT
iptables -I FORWARD -o ztc3qwyx5l -j ACCEPT
iptables -t nat -I POSTROUTING -o ztc3qwyx5l -j MASQUERADE

ztc3qwyx5l是LEDE的ZeroTier虚拟接口的名称,在终端可以使用ifconfig命令查看,请自行替换。
Xshell_ITCZRmwBhP.png

设置完成后,点击重启防火墙。

配置MOON(进阶)

使用 zerotier-cli listpeers 命令时能看到这几个名词。充当 moon 的机子最好有公网 IP

PLANET    :行星服务器,    Zerotier 各地的根服务器,有日本、新加坡等地
Moon    :卫星级服务器,    用户自建的私有根服务器,起到中转加速的作用
LEAF     :相当于各个枝叶,    就是每台连接到该网络的机器节点

MOON又称为自定义根服务器,通过自定义的服务器作为跳板加速内网机器之间的互相访问。

在启用ZeroTier后,我发现ZeroTier安装目录/var/lib/zerotier-one(这个目录实际链接到/var/lib/zerotier-one_sample_config)是临时目录 ,在重启后就自动删除,必须修改配置文件,才能保留MOON的配置。

1.修改配置
修改 /etc/config/zerotier,加入下面一行选项:

option config_path ‘/etc/zerotier'(注意分隔符,如下图所示)

然后在根目录的/etc/目录下,新建zerotier目录用来存放moons的配置文件。

2.生成MOON文件
进入ZeroTier的安装目录:

cd /var/lib/zerotier-one_sample_config

运行下面两条命令:

zerotier-idtool generate identity.secret identity.public
zerotier-idtool initmoon identity.public >>moon.json

在当前目录生成moon.json文件。

3.修改MOONS文件
修改 moon.json文件中”stableEndpoints” 字段为LEDE路由的公网IP,9993为端口号。

“stableEndpoints”: [ “117.XX.XX.XX/9993” ]

4.生成签名文件
运行命令:

zerotier-idtool genmoon moon.json

在当前目录下生成签名文件00000005ff20a0f6.moon

5.将MOON节点加入网络
将LEDE本机设为MOON节点。
在/etc/zerotier目录建立moons.d子目录,将生成的00000005ff20a0f6.moon复制到该文件夹中,并重启设备。

其他设备加入MOON节点方法

方法一
找到ZeroTier安装目录,新建moons.d文件夹,将00000005ff20a0f6.moon复制到该文件夹中,重启设备。
不同系统的ZeroTier安装目录位置:

Windows: C:\ProgramData\ZeroTier\One
Macintosh: /Library/Application Support/ZeroTier/One (在 Terminal 中应为 /Library/Application\ Support/ZeroTier/One)
Linux: /var/lib/zerotier-one
FreeBSD/OpenBSD: /var/db/zerotier-one

方法二
在终端上执行命令:

zerotier-cli orbit 5ff20a0f6 5ff20a0f6

6.验证测试
查看是否在MOON下运行

zerotier-cli listpeers

Termius_06P9fFt8jF.png

如果某一行显示有MOON字样,就证明MOON已被本机标识了。
注意:本机不能看自己,所以只能上别的设备上看。

对比frp

和 ngrok 和 frp 功能类似,但是 ZeroTier 明显入手简单。ZeroTier 只有客户端开源,服务端并没有开源。而 ngrok 和 frp 都是完全开源。但是 ngrok 和 frp 严重依赖于公网固定 IP 的 VPS,是一个中性化的内网穿透工具,一旦中心挂掉,那么所有的节点都无法工作。Zerotier 帮助用户实现了服务端,虽然安全性有待考验,但至少还是能用状态。

但是,我还是习惯frp

部分内容转自网上很多大佬,不一一列举了

最后修改:2019 年 10 月 09 日 06 : 42 PM

发表评论