5

全球大内网与Zerotier

 2 years ago
source link: https://blog.eastonman.com/blog/2021/12/zerotier/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

前段时间把笔记本换成了MacBook Pro(真香),为了数据安全,自然是需要把Time Machine利用起来。而Time Machine只能备份到本地的硬盘或者AFP或者SMB或者Time Capsule。显然我没有多余的硬盘,也没有rich到来一个Time Capsule,但是我手头上恰好有一个2T HDD的大盘鸡(远在天边),所以想把Time Machine的备份放到这个大盘鸡里。

那么现在问题来了,SMB这个玩意儿的安全问题相信大家也都有所耳闻,我实在是不想把它暴露在公网上,这就需要一个VPN。正好我前几天黑五搞了一些BGP Player友好的鸡,甚至还有公网的ASN号,因此就想干脆组一个全球大内网吧。

为什么选择Zerotier

其实我一开始的想法是Wireguard,因为这玩意儿大家都在吹,也在内核主线里,可以说相当的轻量,也很flexible。但是Wireguard的问题在于它是点对点的,也就是如果没有一个管理的途径的话,每条边都需要手动操作一次,非常麻烦。有的大佬用ansible解决,然而我并不会这么复杂的ansible

我总结了一下我对于全球大内网最主要的需求:

  • 无中心节点,或者说流量不能由中心节点转发
  • 轻量高效(OpenVPN什么的就免了),因为有的节点之间可以跑到千兆,如果不够轻量的话会有CPU瓶颈。
  • 配置简易,超过Wireguard的就免了
  • 确保安全,必须加密传输,稍弱一些如aes128的也可以,但是不能接受明文传输,所以VXLAN和GRE等也不满足了。

除此之外还有一些加分项:

  • multipath,我们的VPS服务商提供的网络接入质量不尽相同,如果有一种方式可以让两个线路较差的VPS通过一个线路较好的VPS进行转发其实可以得到更好的质量。不过目前除了iBGP+自定义cost似乎没有别的方式可以达到这样的效果。
  • 中心化的路由配置,这一项Zerotier恰好可以满足,如果我们需要桥接别的“真正的”内网,这个功能还是很实用的。
  • 跨平台客户端,虽然目前的方案并不需要这个功能,但是如果我们以后希望将大内网进一步扩大,可能会需要这个功能。

自建VS官方

有这么多鸡不自建也是浪费

zerotier有network controller,planet,moon等很多概念/角色,我也没搞懂,有懂的可以指点一下。自建network controller的好处在于可以避免官方的同一个网络50个客户端限制。自建moon的好处在于对称nat的情况下可以有较好的转发质量。

由于我们不需要考虑nat,所以就只自建network controller。

自建方案选型

由于好看是第一生产力手动添加网络和批准加入十分繁琐,所以需要一个GUI在网络控制器上,而不是按照官方的API使用curl来管理网络。

ztncui(Github官网)是一个基于zerotier-one API的前端,提供类似于官方my.zerotier.com的管理操作,可以添加网络,管理网络和路由等。

其他服务器自然是使用正常的zerotier-one作为节点加入。zerotier还提供有各个嵌入式平台和路由器平台的支持,可以说十分的跨平台了。

还有一点,这次我希望安装的服务器是一台buyvm/frantech的512MB内存的服务器,计划之后还要在上面跑bird,如果要收全表的话,512MB的内存可谓是捉襟见肘,所以首先排除使用docker的安装方式,尽量使用overhead比较小的安装。

Zerotier

zerotier在我使用的Debian系发行版上只需要一行命令,注意需要gpg已安装,未安装的话会提示需要安装。

curl -s https://install.zerotier.com | sudo bash
curl -s https://install.zerotier.com | sudo bash

如果你是安全nerd,也可以使用gpg验证脚本以后再执行,仍然是一行。

curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi

安装完成以后zerotier的源就会被加入apt中,以后只需要使用apt来管理和升级即可。

Ztncui

根据其官网的说明,是采用deb打包的方式安装,需要首先下载deb的安装包,然后再安装。

注意!此处具有实效性,建议按照官网安装最新的包!

curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.7.1_amd64.deb
sudo apt-get install ./ztncui_0.7.1_amd64.deb
curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.7.1_amd64.deb
sudo apt-get install ./ztncui_0.7.1_amd64.deb

由于ztncui是使用nodejs开发的,因此还需设置一下production mode

sudo sh -c "echo 'NODE_ENV=production' >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo 'NODE_ENV=production' >> /opt/key-networks/ztncui/.env"

ztncui默认监听127.0.0.1:3000,可以使用以下命令转发到本地访问

ssh -f [email protected] -L 3333:localhost:3000 -N
ssh -f [email protected] -L 3333:localhost:3000 -N

也可以使用以下命令打开一个https端口,没有配置的话使用的是self-signed证书,如果需要配置证书的话可以参考官方教程

sudo sh -c "echo 'HTTPS_PORT=3443' > /opt/key-networks/ztncui/.env"
sudo sh -c "echo 'HTTPS_PORT=3443' > /opt/key-networks/ztncui/.env"

最后重启ztncui是配置生效。

sudo systemctl restart ztncui
sudo systemctl restart ztncui

这部分的配置其实比较简单,按照提示来就可以了,此处放一些截图供调研方案和选型的读者参考。

创建网络
创建后结果
Screen-Shot-2021-12-06-at-11.21.45-AM.png
Easy setup中添加cidr

辣鸡nodejs果然占内存 安装完成以后大概内存占用是111MB,ztncui自己占了60MB,相对来说还可以接受。

Screen-Shot-2021-12-06-at-10.35.04-AM.png
mtr

可以看到,一天的丢包率只有0.1%,我认为是可以接受的。

Screen-Shot-2021-12-06-at-10.36.31-AM.png
iperf3

我的两台vps之间也能跑到比较高的速率。

浏览量: 37

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK