内网穿透—ZeroTier One

介绍

一直以来,我只知道日本某大学开发的某款软件可以在没有TUN/TAP驱动的容器中运行,而且效率还相当一般,直到我后来发现了ZeroTier,这玩意有常规的TUN/TAP模式,也有一个特殊的Network Containers 模式(目前已经改名为ZeroTier SDK——>然后又变成libzt了 ),通过实现一个轻量级的应用层 TCP/IP API 来 hook 现有应用程序的 Socket API,这样可以使现有的程序也能使用 ZeroTier 技术连接其它主机,也是挺牛逼的,不过不清楚是否有兼容性问题,个人感觉效率应该会比某软件的SecureNAT要高不少。

和其它P2P VPN不同的是这个是有个后台来管理维护你的私人网络的,而它的加入网络是通过一串唯一的ID来实现的,它还有Peer和Controller等一些概念,个人根据其在GitHub上开源的内容来看,它的Controller是个API控制端,Peers负责构建它的整个网络底层架构,这里面还有Planet和Leaf两种类型的节点,当Join命令发出时,你的客户端会接入这个网络,并在网络中注册唯一ID,然后根据你Join所选择的ID从Controller拉取网络配置。

安装配置

这个主要得看你安装的环境,在正常的支持TUN/TAP的环境下,一切都很简单,官方提供了一键,具体请查看官方网站——>传送门

curl -s 'https://pgp.mit.edu/pks/lookup?op=get&search=0x1657198823E52A61' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi

自动识别是Debian系还是RedHat系,全自动,美滋滋。对于Mac和Windows来说,提供了安装包,手机客户端也都有,甚至还有各种NAS平台的插件包,也是非常方便

之后先在官方管理后台——>传送门

注册账号,然后创建一个Network并为其配置基本的属性,比如分配的IP地址段之类的

左上角的Network ID就是你的网络ID了,在配置完后,在你安装了客户端的机器上运行如下命令

/var/lib/zerotier-one/zerotier-cli join 网络ID

然后返回成功就说明OK了,往下翻上面那个页面,不一会儿下方会出现你的客户端,勾选前方的auth就能允许加入Network,然后你在同一个网络中的各个客户端就能用分配的内网IP通信了

而对于无TUN/TAP支持的环境来说,就可能比较麻烦了,我用的是别人备份的旧版本

git clone https://notabug.org/bignose/zerotier-one.git
make netcon
 
mkdir /var/lib/zerotier-one
cp -ra zerotier-* /var/lib/zerotier-one
cp libzerotierintercept.so netcon/liblwip.so /var/lib/zerotier-one
 
/var/lib/zerotier-one/zerotier-netcon-service -d
/var/lib/zerotier-one/zerotier-cli join 网络ID
ZT_NC_NETWORK=/var/lib/zerotier-one/nc_网络ID LD_PRELOAD=/var/lib/zerotier-one/libzerotierintercept.so /bin/bash