内网穿透(4/4) - Zerotier One

2019 12 8, Sun

上一篇提到了zerotier,是一个比较成熟的基于内网穿透的SDN开源方案。

SDN

From Wikipedia: 软件定义网络(英语:software-defined networking,缩写作 SDN)是一种新型网络架构。它利用OpenFlow协议将路由器的控制平面(control plane)从数据平面(data plane)中分离,改以软件方式实现。该架构可使网络管理员在不更动硬件设备的前提下,以中央控制方式用程序重新规划网络,为控制网络流量提供了新方案,也为核心网络和应用创新提供了良好平台。

这都能查得到,就不啰嗦了。大部分SDN都是依靠OpenFlow啊VxLAN什么的,在Docker swarm、k8s里面也都用到了自己的SDN实现。主要是用来从软件层面编排网络,比如说我们平时用腾讯云,虚拟机用的就是SDN定义的虚拟网络。

Zerotier解决的问题和其他的略微不大一样,Zerotier主要是利用P2P和SDN在不同内网中建立虚拟私有网络的方案。

Zerotier的架构

Planet

之前提到了打洞和P2P需要有一台或者多台服务器,用来确认公网ip和端口以及维持状态。zerotier one有一个这样的一个默认、公共的的服务器。叫Planet。除了维持状态以外,Planet还可以用来定义你的虚拟私有网络。

你可以可以搭自己的planet,不过没有太多必要就是了。

Moon

默认的Planet在国外,所以我们如果用默认的,会导致我们即使p2p流量也会绕国外一圈,非常的慢,还会丢包。

zerotier在1.2版本以后加上了moon的定义。就是自定义的维持状态的服务器,这样zerotier就可以看到我们在国内正常的公网IP了。

Leaf

就是我们连接虚拟网络的客户端节点。除了安卓暂时还不支持设置moon服务器以外,没有太多其他问题。

安装使用

注册账号

zerotier one需要注册个账号,管理自己的私有网络和设备

建私有网络

使用zerotier需要你定义一个私有网络,zerotier会给你提供几个预置的子网,随便选一个就行。

记下来私有网络ID

安装

参考官网

简单说

# Linux
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

# Mac
brew cask install zerotier-cli

# Win/choco

choco install zerotier-one

会显示你的设备ID

加入私有网络

sudo zerotier-cli join <network id>

允许设备加入

在网页上找到你的设备,打个对勾就好。

建立moon服务器

为了速度快一些,建个moon服务器。

最快的是通过docker,有人做了现成的。参照紫菜的博客

moon服务器不需要加入私有网络

让你的设备通过moon加速

sudo zerotier-cli orbit <moon id> <moon id>

试试看

设备之间互相通过zerotier下发的IP试试看能不能连同吧