背景
公司有服务器,或者公司的电脑配置比较自己家里的笔记本高,如果要配置外网穿透,就太麻烦,而且也不安全(公司内网被黑了,可能还要你担责)。局域网组网就相对来说既简单,又安全好多。
ZeroTier是一款利用 UDP 打洞来实现内网穿透的工具,相比其他工具成功率更高、部署更简单。其基本工作原理是组建一个虚拟局域网,各个设备(NAS、Linux、Windows、Mac、iOS、Android)安装了客户端、加入到这个虚拟局域网后,就会自动分配一个IP,从而实现局域网内各个设备及服务的相互访问。
zerotier的一些专有名词:
- • PLANET 行星服务器,Zerotier 官方根服务器,在国外。免费版最大支持25个设备连接。
- • MOON 卫星服务器,私有根服务器,可以利用带有公网IP的云服务器自己搭建,起到代理加速的作用
- • LEAF 网络客户端,连接到根服务器的网络节点,如上述提到的NAS、群晖、Linux、Windows等
使用PLANET 行星服务器
通过Zerotier官方根服务器建立虚拟局域网,优点是在没有自带公网IP的云服务器的情况下也可以异地组网,部署简单快捷,全地球都可以访问;缺点是:① 免费版允许连接的设备有限,最大25台,不过个人或小团队使用的话也够用了;② 数据不安全,毕竟是外国的服务器,一般没什么重要数据的情况下可以使用;③ 受网络波动影响,用网高峰期可能连接不稳定;
一、注册ZeroTier服务
1.注册账号
访问my.zerotier.com/network[1],注册账号,注册后登录。
image-20230802185558514
2.创建网络
注册后登录到主页,会有一个“Create A Network”的黄色按钮,点击即可创建一个网络,一切保持默认即可。创建完成后,主页会显示这个网络,记住这个16位的NETWORK ID,后面会用到。
image-20230802185341198
二、客户端加入网络
1.内网服务器安装客户端
因为主要就是想内网穿透访到这几台内网服务器,所以这几台服务器都要安装zerotier客户端。zerotier有两种安装方式,一种是最原始方式的编译安装,一种是通过脚本自动安装。下面分别介绍一下这两种方式:
首次安装的话,推荐这种方式,简单快捷,只要执行以下命令一键安装即可。安装完成后会自动在/var/lib/zerotier-one/下生成相关文件及目录
代码语言:javascript复制curl -s https://install.zerotier.com | sudo bash # Linux系统
其他操作系统:下载地址:www.zerotier.com/download/[2]
代码语言:javascript复制(base) xj@xjtest:~$ cd /tmp
(base) xj@xjtest:/tmp$ curl -s https://install.zerotier.com | sudo bash
[sudo] password for xj:
*** ZeroTier Service Quick Install for Unix-like Systems
*** Tested OSes / distributions:
*** MacOS (10.13 ) (just installs ZeroTier One.pkg)
*** Debian Linux (7 )
*** RedHat/CentOS Linux (6 )
*** Fedora Linux (16 )
*** SuSE Linux (12 )
*** Mint Linux (18 )
*** Supported architectures vary by OS / distribution. We try to support
*** every system architecture supported by the target.
*** Please report problems to contact@zerotier.com and we will try to fix.
*** Detecting Linux Distribution
2.客户端加入创建的网络
客户端分别加入网络,想穿透哪台,哪台就加入。
代码语言:javascript复制sudo zerotier-cli join 9f77fc393e4f9c09 # 上面第一步创建网络生成的16位ID
sudo zerotier-cli status # 查看网络状态
客户端加入后,zerotier的Web管理页面就能看到该网络,勾选该网络,表示同意客户端接入
image-20230911194221723
3.客户端查看本地服务器网络情况
如果连接成功,并且管理页面中勾选此客户端,则会返回以下内容
代码语言:javascript复制(base) xj@xjtest:/tmp$ sudo zerotier-cli listnetworks
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks 9f77fc393e4f9c09 king 0a:a4:99:64:81:29 OK PRIVATE ztuze3hjjx 10.147.20.17/24
zerotier-cli客户端服务器加入网络后,相当于在本地虚拟了一块网卡,网卡地址就是虚拟局域网分配给这台客户端的地址
代码语言:javascript复制(base) xj@xjtest:/tmp$ ip a
47: ztuze3hjjx: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2800 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 0a:a4:99:64:81:29 brd ff:ff:ff:ff:ff:ff
inet 10.147.20.17/24 brd 10.147.20.255 scope global ztuze3hjjx
valid_lft forever preferred_lft forever
inet6 fe80::8a4:99ff:fe64:8129/64 scope link
valid_lft forever preferred_lft forever
4.异地电脑安装客户端
5.测试连通性
如有两台服务器都安装了客户端,并且都加入了上面创建的网络,客户端A地址是10.147.18.122,客户端B的地址是10.147.18.211,则可以在客户端A所在的服务器上ping客户端B,测试两台机器有没有互通。
代码语言:javascript复制(base) xj@xjpc:/tmp$ ping 10.147.20.17
PING 10.147.20.17 (10.147.20.17) 56(84) bytes of data.
64 bytes from 10.147.20.17: icmp_seq=1 ttl=64 time=6.34 ms
64 bytes from 10.147.20.17: icmp_seq=2 ttl=64 time=3.01 ms
64 bytes from 10.147.20.17: icmp_seq=3 ttl=64 time=3.69 ms
64 bytes from 10.147.20.17: icmp_seq=4 ttl=64 time=28.1 ms
64 bytes from 10.147.20.17: icmp_seq=5 ttl=64 time=7.48 ms
64 bytes from 10.147.20.17: icmp_seq=6 ttl=64 time=3.44 ms