zerotier 实现内网穿透(web 访问)

zerotier 是一款通过虚拟网卡将多台设备组成虚拟局域网从而达成内网穿透的软件。搭建内网穿透的文章网上很多,比如这篇:zerotier自建moon教程 – 方舟基地 (wnark.com)。基本跟着操作就可以搭建完成。

前提

自建 moon 节点需要公网 ip,如果没有,需要租一台 vps。最好是外网的,大陆需要备案的。

创建账号和局域网

到 zerotier 网站:https://my.zerotier.com/ 注册一下,然后创建一个局域网。创建后的 network id 就是之后设备需要加入的局域网 id。

服务端安装配置

// 安装 zerotier
curl -s https://install.zerotier.com | sudo bash
// 开机启动
systemctl enable zerotier-one
// 加入局域网
zerotier-cli join <network id>
// 生成 moon.json 模板
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public > moon.json 
// 修改 moon.json
vim ./moon.json
// 下面这一行里的 ip 改成 vps 的 ip
"stableEndpoints": [ "8.8.8.8/9993" ]
// 生成签名文件——000000xxxx.moon 
zerotier-idtool genmoon moon.json
// 将 moon 节点加入网络
mkdir ./moons.d
cp ./000000xxxx.moon ./moons.d/

重启服务器之后就好了。

等等,还需要到云服务商的服务器管理后台配置防火墙,打开 9993 端口。我是 tcp 和 udp 都打开了。

客户端安装配置

windows

到这里 Download – ZeroTier 下载 windows 的安装包。安装好之后运行,任务栏右下角找到 zerotier 图标,右键-> join new network。

在出现的这个弹窗里输入 16 位 network id。

zerotier 网页后台勾选授权。

本地起一个服务。比如我用 anywhere 启动了一个页面到 8000 端口。服务器上 nginx 配置一个域名转发到本地局域网 ip:8000。重启 nginx,访问配置的域名。不出意外就可以看到本地启动的页面了。

威联通nas

虽然威联通 nas 底层是 linux,但魔改过了(也可能是因为我的 nas 是 arm 架构),无法直接通过命令行安装 zerotier。

首先,到 app center 安装 qvpn,zerotier 会用到这个。

然后到刚才下载 windows 安装包的页面下载 qnap 对应的包。

现在好之后,app center 里右上角打开设置。勾选“允许没有数字签名安装”。

之后就可以安装下载好的包了。

安装好之后就可以通过命令行执行 zerotier 命令了。

// 加入 moon 节点。这里的 xxxxx 是 moon 节点的十位地址。可以在网页后台看到 address 字段。
zerotier-cli orbit xxxxx xxxxx

zerotier-cli 命令参考:

zerotier-cli info	             #查看当前zerotier信息
zerotier-cli listpeers	             #列出所有的peers
zerotier-cli listnetworks	     #列出加入的所有的网络
zerotier-cli join <network>	     #加入某个网络
zerotier-cli leave <network>	     #离开某个网络
zerotier-cli listmoons	             #列出加入的Moon节点
zerotier-cli orbit <world ID> <seed> #加入某个Moon节点
zerotier-cli deorbit <world ID>      #离开某个Moon节点

在执行加入 moon 节点的命令后,刷新网页后台并没有看到 nas 设备。没办法,我又执行了 join 命令。

zerotier-cli join <network id>

根据参考文档的说明,如果 zerotier-cli listmoons 里有服务器 ip,并且后面有 moon 字样,就算加入 moon 节点了。我试了下,有。

同样,nginx 配置一个域名绑定 nas 的局域网地址和端口(威联通 https 是 5001)。浏览器打开访问域名,可以,但就是慢。也许是因为服务器本身就是大陆之外的,绕路太多。

总结

zerotier 一路配置下来挺顺利的,这令我感到意外(感动)。至于内网穿透要用来做什么,我也不知道。一天就 24 小时,也没多少时间耍 nas,耍迷你主机,更没多少时间(需求)耍内网穿透。纯粹折腾。

看着 20g 内存的迷你主机,我陷入沉思——用来干嘛呢?