内网访问:使用Zerotier进行打洞
本文最后更新于 203 天前,其中的信息可能已经有所发展或是发生改变。

家里没有公网ipv4,只有ipv6,而许多公共场所的网络都是没有开启ipv6,无法直接访问内网服务。

之前一直使用FRP做内网穿透,将内网服务暴露到外网上,但是简单的tcp转发访问速度依靠公网服务器的带宽,我的腾讯云是8M的小水管,有点不太够用,同时每一个服务都要重新设置一遍FRP比较麻烦。尝试过使用FRP的P2P模式,但是打洞一直没成功,可能操作上有问题,也有可能是本地的NAT过于复杂,就放弃了。

于是,我转向了许多人都推荐过的内网穿透神器--Zerotier。ZeroTier 是一款网络层面的穿透工具,可以轻松搭建自己的虚拟网络,将不同局域网的电脑分配到同一网段下,并提供相应的虚拟网络 IP 地址,使得各个设备间可以通过虚拟地址来访问彼此。在 ZeroTier 网络体系中,根服务器被称为星球(planet),每一台联网设备被称为叶子(leaf),两台星球之间是通过星球节点握手建立隧道连接的。

ZeroTier 作为一家总部位于加州的美国公司,并没有在中国设有根服务器,因此在两台设备连接时受制于星球节点的连接质量,可能会产生高延迟。如果需要降低握手时的网络延迟、提高联网稳定性和安全性,可以按照官方指引来搭建月亮(moon)节点,让设备相互连接时通过自己搭建的月亮节点来握手建立隧道。

开始

Zerotier支持各种设备,包括windows,linux,安卓,docker等,可以使不同操作系统的用户轻松的建立网络,并进行互相访问和分享资源。

首先在官网进行注册,创建一个自己的虚拟网络。

image-20231221231145923

创建网络

点击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

群晖

群晖建议使用第三方套件来进行安装,我这里推荐矿神源。

image-20231221233112205

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

image-20231221234522403

Windows

windows安装最简单了,直接官网下载安装包自行安装即可。

安装好后,点击Join Zerotier Network,输入加入的Network ID即可。

image-20231221233438482

授权

每一次添加了客户端后,在控制面板上会显示新设备加入,zerotier不会自动授权,需要手动勾选,对这个设备授权。

可以自动分配 IP也可以手动进行调整,显示 zerotier 客户端的版本号和物理地址。

image-20231221233701476

免费版最多一个网络可以有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。无需过多考虑细节,两个参数相同即可。

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇