内网穿透工具之ZeroTier
今天我给大家介绍一款基于软件的内网穿透神器—zerotier,点对点的网络链接速度只取决于自己的网络带宽,可以让你轻松自如地实现远程办公。
官方文档:https://zerotier.atlassian.net/wiki/spaces/SD/overview
github:https://github.com/zerotier/ZeroTierOne
创建网络
首先登录zerotier官网,注册账号,建立网络,下载客户端软件,
点击“注册(Sign Up)”,输入注册信息,或者授权用谷歌账号、微软账号登录,
注册完成后,用新建的账号密码登录,进入网络设置页面,首先创建网络(Create A Network),
访问控制要选择“私人网路(PRIVATE)”,其他保持默认即可,姓名和描述可以根据自己的爱好填写,创建好的网络ID是16位的数字加字母组合,记住,后面的步骤要用到,网络设置页面也不要关闭,后面的步骤也要用。
下载客户端
转到下载页面,选择你合适的客户端应用程序并下载,
https://www.zerotier.com/download/
下载完成后,安装客户端应用程序,安装选项保持默认即可,
安装完成后,程序会自动启动,在windows任务栏的图标是这样的,接下来就开始操作加入你先前搭建好的网络,
会自动配置服务,开机后会自动启动:
默认安装路径
- Linux:
/var/lib/zerotier-one
- FreeBSD / OpenBSD:
/var/db/zerotier-one
- Mac:
/Library/Application Support/ZeroTier/One
- Windows:
C:\Program Files (x86)\ZeroTier\One
加入网络
点击“Join New Networks”,会跳出对话框,在对话框中输入你的16位数的网络ID,点击“Join”,然后回到官网的网络页面,
这时网络页面中会出现一个未加入网络的设备ID信息,ID和你客户端应用程序中显示的ID一致,点击左边的小方框,打上对勾,IP地址会自动生成,你也可以在IP地址下面的长方框里输入自己指定的IP地址,然后点击“加号”添加,再把原来自动生成的IP地址删除即可,为了与其他设备区分,你可以根据自己的喜好填写“short-name”和“description”,
添加网络完成后,网络状态会变成“ONLINE”,同时右边会显示你的公网IP地址,回到客户端应用程序,你会发现,已经加入到网络中,并可以看到你在网络页面中设置的IP地址,到此第一台客户端设置基本完成。
配置第2台客户端
接下来再到你的另一台设备上按照同样的步骤设置,zerotier支持 windows、MacOS、Linux、安卓手机和平板、苹果手机和平板、Openwrt路由器、群晖NAS,设置方法大同小异,你只要下载安装相应的应用程序并按步骤一步步设置即可。
设置完成后,你就可以通过zerotier网络分配的IP地址来访问办公室的电脑设备了,对于一般的网络来说,用微软的远程桌面几乎没有延迟,你还可以通过IP地址来连接公司的打印机,实现远程打印,也可以通过IP地址来访问公司网络上的共享数据。
Linux客户端
https://www.zerotier.com/download/#downloadLinux
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | curl -s https://install.zerotier.com | sudo bash systemctl status zerotier-one zerotier-cli info zerotier-cli join xxxxxx -- 手工启动进程,可以加入/etc/rc.local开机启动 /var/lib/zerotier-one/zerotier-one -d -- 或者 wget http://download.zerotier.com/redhat/el/7/zerotier-one-1.10.2-1.el7.x86_64.rpm yum localinstall -y zerotier-one-1.10.2-1.el7.x86_64.rpm -- 校验是否安装成功 zerotier-cli info |
其它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | [root@lhr ~]# cd /var/lib/zerotier-one/ [root@lhr zerotier-one]# ll total 40 -rw------- 1 zerotier-one zerotier-one 24 Nov 21 12:59 authtoken.secret drwx------ 4 zerotier-one zerotier-one 4096 Nov 21 12:59 controller.d -rw-r--r-- 1 zerotier-one zerotier-one 141 Nov 21 12:59 identity.public -rw------- 1 zerotier-one zerotier-one 270 Nov 21 12:59 identity.secret drwxr-xr-x 2 zerotier-one zerotier-one 4096 Nov 21 12:59 networks.d drwxr-xr-x 2 zerotier-one zerotier-one 4096 Nov 21 14:48 peers.d -rw-r--r-- 1 zerotier-one zerotier-one 570 Nov 21 12:59 planet lrwxrwxrwx 1 zerotier-one zerotier-one 30 Nov 21 12:59 zerotier-cli -> ../../../usr/sbin/zerotier-one lrwxrwxrwx 1 zerotier-one zerotier-one 30 Nov 21 12:59 zerotier-idtool -> ../../../usr/sbin/zerotier-one lrwxrwxrwx 1 zerotier-one zerotier-one 30 Nov 21 12:59 zerotier-one -> ../../../usr/sbin/zerotier-one -rw-r--r-- 1 zerotier-one zerotier-one 3 Nov 22 09:00 zerotier-one.pid -rw-r--r-- 1 zerotier-one zerotier-one 4 Nov 22 09:00 zerotier-one.port -rw-r--r-- 1 zerotier-one zerotier-one 276 Oct 28 04:06 zerotier-one.te [root@lhr zerotier-one]# ps -ef|grep zero zerotie+ 171 1 0 09:00 ? 00:00:00 /usr/sbin/zerotier-one root 1008 954 0 09:05 pts/2 00:00:00 grep --color=auto zero [root@lhr zerotier-one]# ifconfig ztqu3pmtrm: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 2800 inet 192.168.66.100 netmask 255.255.255.0 broadcast 192.168.66.255 inet6 fe80::1cc4:91ff:fe8a:f508 prefixlen 64 scopeid 0x20<link> ether 1e:c4:91:8a:f5:08 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 10 bytes 796 (796.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
手机使用
1、苹果手机直接在应用商店安装
2、安卓手机下载:https://apkpure.com/zerotier-one/com.zerotier.one
命令行配置
除了以上设置方法,通过命令行也可以让你的设备加入zerotier网络,
首先在文件管理器中找到zerotier的安装目录,默认的位置是:C:\Program Files (x86)\ZeroTier\One
,
在linux中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [root@lhrtidb soft]# zerotier-cli -h ZeroTier One version 1.10.2 build 0 (platform 1 arch 2) Copyright (c) 2020 ZeroTier, Inc. Licensed under the ZeroTier BSL 1.1 (see LICENSE.txt) Usage: zerotier-cli [-switches] <command/path> [<args>] Available switches: -h - Display this help -v - Show version -j - Display full raw JSON output -D<path> - ZeroTier home path for parameter auto-detect -p<port> - HTTP port (default: auto) -T<token> - Authentication token (default: auto) Available commands: info - Display status info listpeers - List all peers peers - List all peers (prettier) listnetworks - List all networks join <network ID> - Join a network leave <network ID> - Leave a network set <network ID> <setting> - Set a network setting get <network ID> <setting> - Get a network setting listmoons - List moons (federated root sets) orbit <world ID> <seed> - Join a moon via any member root deorbit <world ID> - Leave a moon dump - Debug settings dump for support Available settings: Settings to use with [get/set] may include property names from the JSON output of "zerotier-cli -j listnetworks". Additionally, (ip, ip4, ip6, ip6plane, and ip6prefix can be used). For instance: zerotier-cli get <network ID> ip6plane will return the 6PLANE address assigned to this node. |
然后搜索“cmd”,打开命令行,在zerotier安装目录下输入命令:
1 2 3 | C:\Program Files (x86)\ZeroTier\One>zerotier-cli join xxxxxxxxxxxxxxxx(你的网络ID),回车 200 join OK |
然后到官网网络设置页面去打对勾确认让他加入网络,完成后,用命令行验证,
1 | C:\Program Files (x86)\ZeroTier\One>zerotier-cli listnetworks,回车 |
会显示你的zerotier网络ID等信息,证明你已经加入到网络中,
1 | C:\Program Files (x86)\ZeroTier\One>zerotier-cli listpeers |
可以看到网络中的其他设备,这里注意的是有些设备是zerotier官方的节点,并不是别人偷偷侵入了你的网络。
其它
需要进一步说明的是,在官网的网络设置页面中有“管理线路(Managed Routes)”选项,这是一个可以让你通过一台设备访问整个局域网的功能,如果你需要访问办公室局域网或者家庭网络中的其他设备(比如打印机和网络中的共享数据),你可以在这里设置,
在“添加路线(Add Routes)的设置中,在“目的地(Destination)”输入要访问的局域网网段和掩码,在“通过(via)“输入你的设备IP地址,比如你要访问的局域网IP网段是192.168.1.1 ~ 192.168.1.255,需要输入,
Destination:192.168.1.0/24 via:192.168.192.4
搭建moon节点,让你的zerotier网络更安全高效
在上边的教程中,我们成功地搭建了zerotier网络,达成了远程办公的目的,你甚至还可以坐在星巴克咖啡厅里,跟生意伙伴商务活动的同时,随时调用公司内部的共享数据资料,这也是科技进步给我们带来的种种便利之一。
Planet
代表星球,是ZeroTier
官方提供的节点;而Moon
自定义的Planet
,主要是为了解决Planet
节点有延迟的情况;Leaf
是客户端,与Moon
和Planet
的区别是节点关系。
在zerotier网络体系中,根服务器(root server)被称为星球(planet),而每一台联网设备都被称为叶子(leaf),两台星球之间是通过星球节点握手建立隧道连接的,而zerotier作为一家总部位于加州的美国公司并没有在中国设有根服务器,因此在两台设备连接时受制于星球节点的连接质量,不免要产生高延迟,因此我们可以按照官方指引来搭建月亮(moon)节点,让设备相互连接时通过我们自己搭建的月亮节点来握手建立隧道,从而降低握手时的网络延迟、也提高联网稳定性和安全性。
首先要说明的是,搭建月亮节点的服务器对硬件要求不高,但是必须有公网IP地址,如果公司的网络环境不具备条件,可以通过购买云计算服务器来实现。现在国内的云计算服务商主要有阿里云、华为云、腾讯云、天翼云等,都可以满足你的需要,这些供应商时常有打到骨折的优惠活动,每年一两百元人民币的成本也不是什么压力,再者说来,这一台云计算服务器还可以同时为你搭建网站或者其他的应用。如果对于搭建moon节点还没有信心,可以到这些云计算供应商的国际站点注册,薅一台免费试用2-3个月的服务器来测试,其实这些云计算的香港节点与大陆站点相比延迟也差不了多少;当然国际大厂也有羊毛可以薅,谷歌云、甲骨文云、亚马逊云、微软云都提供免费试用的云主机,甲骨文云还提供终身免费的选项。
两台联网设备都打开ipv6,测个ping值,在两台设备同城并且是同一个宽带接入商(中国移动)的条件下,ping值6毫秒左右,这个级别的ping值,在感觉上基本与局域网内设备的相互连接没有区别。这是由于zerotier在两个具有公网ipv6设备之间直接建立了隧道连接,不再需要多层NAT地址转换。
需要说明的是,搭建moon节点是为了替代planet节点在联网设备握手时的作用,降低设备之间握手时的延迟,也提高你的zerotier网络的稳定性和安全性,并不能直接降低联网设备相互访问时的ping值。也许有人会质疑,既然有了公网ipv6,直接用ipv6不就可以了吗?在实际应用场景中绝大多数ipv6都是动态的,并且ipv6的地址都很难记住,不适合日常应用的场景,当然你设置了ddns除外。
zerotier的服务器都在海外,因此我们国内用户使用时可能会出现无法连通P2P的情况,这样会导致所有流量都经由zerotier官方服务器中转,延迟和丢包会非常严重
因此我们可以搭建一个moon服务器,moon服务器相当于一个中转服务器,可以保证我们能够顺畅打通P2P,保证低延迟和不丢包
因为moon服务器只起到一个握手的作用,在P2P打通后就没有moon服务器啥事了,因此不用担心moon服务器的延迟和宽带会影响联机体验,但是moon服务器务必位于国内,如果服务器位于海外的话,数据经由GFW出口,可能无法顺利打通P2P.
moon节点搭建过程
安装moon服务器端
云服务器购买以后,选择linux系统,然后用ssh登录,开始安装: