内网穿透(4/4) - Zerotier One
上一篇提到了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试试看能不能连同吧