家里没有公网ipv4,只有ipv6,而许多公共场所的网络都是没有开启ipv6,无法直接访问内网服务。
之前一直使用FRP做内网穿透,将内网服务暴露到外网上,但是简单的tcp转发访问速度依靠公网服务器的带宽,我的腾讯云是8M的小水管,有点不太够用,同时每一个服务都要重新设置一遍FRP比较麻烦。尝试过使用FRP的P2P模式,但是打洞一直没成功,可能操作上有问题,也有可能是本地的NAT过于复杂,就放弃了。
于是,我转向了许多人都推荐过的内网穿透神器--Zerotier。ZeroTier 是一款网络层面的穿透工具,可以轻松搭建自己的虚拟网络,将不同局域网的电脑分配到同一网段下,并提供相应的虚拟网络 IP 地址,使得各个设备间可以通过虚拟地址来访问彼此。在 ZeroTier 网络体系中,根服务器被称为星球(planet),每一台联网设备被称为叶子(leaf),两台星球之间是通过星球节点握手建立隧道连接的。
ZeroTier 作为一家总部位于加州的美国公司,并没有在中国设有根服务器,因此在两台设备连接时受制于星球节点的连接质量,可能会产生高延迟。如果需要降低握手时的网络延迟、提高联网稳定性和安全性,可以按照官方指引来搭建月亮(moon)节点,让设备相互连接时通过自己搭建的月亮节点来握手建立隧道。
开始
Zerotier支持各种设备,包括windows,linux,安卓,docker等,可以使不同操作系统的用户轻松的建立网络,并进行互相访问和分享资源。
首先在官网进行注册,创建一个自己的虚拟网络。
创建网络
点击Create A Network,直接创建网络,只需一次点击,网络就创建好了。
记住这个 Network ID,加入虚拟局域网需要用到。
Linux
根据官网给的说明,直接运行脚本即可。
curl -s https://install.zerotier.com | sudo bash
如果你安装了 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
脚本会自动将 Zerotier 的源添加到 apt/yum 里并安装。
安装好后,运行命令即可。
sudo zerotier-cli join 你的网络ID
群晖
群晖建议使用第三方套件来进行安装,我这里推荐矿神源。
DSM7.0特殊操作:ssh或者任务计划root执行以下代码,必须要操作的!!!安装后只需要执行一次
sudo sed -i 's/package/root/g' /var/packages/zerotier/conf/privilege
完成上述命令后,直接启动套件。
然后在ssh界面使用命令加入虚拟局域网。
xxxxxx是zerotier的Network ID,填你自己的!!!
sudo -i
cd /var/packages/zerotier/target/bin
./zerotier-one -q join xxxxxx
Windows
windows安装最简单了,直接官网下载安装包自行安装即可。
安装好后,点击Join Zerotier Network,输入加入的Network ID即可。
授权
每一次添加了客户端后,在控制面板上会显示新设备加入,zerotier不会自动授权,需要手动勾选,对这个设备授权。
可以自动分配 IP也可以手动进行调整,显示 zerotier 客户端的版本号和物理地址。
免费版最多一个网络可以有25个设备,对于设备不多的人应该是够用了。
完成授权后,只要输入对应的虚拟 IP,就可以访问对应的设备了。这些设备相当于都处于同一个局域网下了。你会发现,速度相当快了。
高级自定义 Moon
为了提高虚拟局域网的速度和可靠性,特别是在网络链接的延迟和不稳定的情况下,ZeroTier允许用户建立自己的moon卫星中转服务器。这种服务器作为Moon,可以搭建一个国内的“卫星”作为中转服务器,作为根节点速度慢,不稳定的一种补充保障。这样,即使根节点的速度慢或不稳定,也可以利用Moon服务器来保证网络的稳定性和流畅性。
在ZeroTier中,任何节点都可以被用作Moon。通常情况下,我们会选择公网IP的节点,例如云服务器。
官方文档可以在以下链接中找到:https://docs.zerotier.com/zerotier/moons
首先,我们需要准备一台云服务器并连接好网络。然后,进入配置文件夹,在Linux上通常是/var/lib/zerotier-one
。接下来,执行以下命令:
zerotier-idtool initmoon identity.public >>moon.json
打开生成的文件,它应该类似于以下内容:
{
"id": "deadbeef00",
"objtype": "world",
"roots": [
{
"identity": "deadbeef00:0:34031483094...",
"stableEndpoints": []
}
],
"signingKey": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"worldType": "moon"
}
在roots/stableEndpoints
数组中填入本机的虚拟IP和端口号,通常端口是9993。如果你的服务器支持IPv6,也可以填入IPv6地址。
确保服务器打开了9993端口!
然后执行以下命令:
zerotier-idtool genmoon moon.json
mkdir moons.d
这将生成一个以000xxxx.moon
命名的文件,将其放入moons.d
文件夹中。这个000xxx
就是该Moon的ID。
在与其连接的客户端上,执行以下命令:
zerotier-cli orbit 000xxx 000xxx
其中,第一个参数是World ID,第二个参数是Moon ID。无需过多考虑细节,两个参数相同即可。
评论