序
最初打算用公网服务器+Frp来实现内网穿透,这是稳定的方案,但使用下来会有几个问题。
- mstsc走公网ip+端口号的方式,在我理解里是三根水管相连,数据要通过云服务器上传,不只是端口映射,木桶效应在于云服务器的带宽限制(2~3M过于卡顿).
- Frp会一直扫公网ip的端口号,尽管可以添加SSL,但是远程桌面走的是tcp服务,stcp不能成功打开udp的远程桌面,也可能是我没配置正确,暂时还在寻找原因.
- 宿舍用moonlight串流工位电脑,用zerotier会比较方便和管理.
之前不喜欢zerotier的原因是因为planet的服务器在国外,用户多的时候会打洞失败,而且延迟巨高!遇到过好几次了,但是现在我有了国内的云服务器,那就可以类似frp的方式做个端口映射,就变成"两根水管相连",这样的话就是木桶效应是工位网络的上行带宽。
服务器配置Zerotier+Moon
安装zerotier
1
2
3
4
5
6
7
8
9
10
11
12
|
# Linux 下载安装
curl -s https://install.zerotier.com/ | sudo bash
# 验证安装情况
zerotier-cli info
# 启动并设置开机自启动
systemctl start zerotier-one.service
systemctl enable zerotier-one.service
# 加入到个人的虚拟局域网
zerotier-cli join Network-ID
|
安装成功后显示的信息:200 info 39a50xxxxx 1.14.2 ONLINE,其中39a50xxxxx为该设备的zerotier-id,1.14.2是zerotier的版本号。
配置moon
1
2
3
4
5
|
# 进入配置目录
cd /var/lib/zerotier-one
# 生成初始配置。读取 identity.public 中的公钥信息,生成初始的 moon 节点配置的 JSON 文件:
zerotier-idtool initmoon identity.public > moon.json
|
moon.json包含了设备的id信息等等,同时需要额外配置ip地址和节点信息,在stableEndpoints一栏添加公网ip和端口号(默认是9993),注意格式问题Ipv4 Addr/9993以及在云服务器放开9993端口(udp协议)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
{
"id": "39a50xxxxx",
"objtype": "world",
"roots": [
{
"identity": "39a50xxxxx:0:90bc7bf3e1d39a2df373f3fcfc5fc103c6b333226f0949d47906b1c613ff6441850ad3217184277b5b65e381b59289d17561978393fd77ee5ff9d36c37xxxxx",
"stableEndpoints": ["Ipv4 Addr/9993"]
}
],
"signingKey": "883bbd62ba065db9879c6bad1ba874b567ff8f7d25349e811669270c0dcb7e4e2989e02cc2ebc6681da2f5b9b7037c3c66a68eb5b6843d5067e4db3c1dxxxxx",
"signingKey_SECRET": "4a72efbf7da50602ba01e413588badb9294a64f27bdc600c297f2e591d7b437ac856cfa4ded3e5478fb914054df5d96ef2ed4ce667e5603669f4c7799e1xxxxx",
"updatesMustBeSignedBy": "883bbd62ba065db9879c6bad1ba874b567ff8f7d25349e811669270c0dcb7e4e2989e02cc2ebc6681da2f5b9b7037c3c66a68eb5b6843d5067e4db3c1ddxxxxx",
"worldType": "moon"
}
|
配置完毕,保存并退出,最后基于moon.json文件生成最终的moon配置文件:
1
2
3
4
5
6
7
8
9
10
11
|
# 新建文件夹,方便管理
mkdir moons.d
# 生成最终配置文件。基于 moon.json 配置文件,生成最终的 moon 配置文件(通常命名为 000000xxxx.moon):
zerotier-idtool genmoon moon.json
# 移动moon配置文件
mv 000000xxxx.moon moons.d/
# 重启服务
systemctl restart zerotier-one
|
最终会生成带zerotier-id的moon配置文件,文件名就是moon-id,在老版本是16位的,新版本(1.12.2ver后)都是10位的,即不含前面的6个数字0;
000000xxxx.moon是个二进制文件,不可读,而且带加密签名,将这个文件下载到服务端电脑上。
客户端添加moon
以我的PC为例,Christina - win1123H2 - Zerotier 1.14.2 & moon的配置文件
进入zerotier的配置路径,默认是C:\ProgramData\ZeroTier\One,新建一个moons.d文件夹并将000000xxxx.moon文件放置其中(需要管理员权限),在services.msc中重启zerotier服务。
以管理员身份启动powershell:
1
2
3
4
|
cd C:\ProgramData\ZeroTier\One
# 检查路由
zerotier-cli listpeers
|
listpeers可以看到虚拟局域网下的各个节点信息和连接情况:
1
2
3
4
5
6
7
8
|
200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 39a50xxxxx 1.95.xxxxxx/9993;2904;2808 96 1.14.2 MOON
200 listpeers 778cdxxxxx - -1 - PLANET
200 listpeers bbd67xxxxx 192.168.5.8/22591;2906;2896 9 1.14.0 LEAF
200 listpeers cafe0xxxxx - -1 - PLANET
200 listpeers cafe8xxxxx - -1 - PLANET
200 listpeers cafefxxxxx - -1 - PLANET
200 listpeers d2f9cxxxxxb 192.168.5.5/9993;8190;8184 5 1.14.2 LEAF
|
其中,<ztaddr>代表zerotier-id,<path>代表路由,<latency>代表延迟,<role>代表节点的身份信息
- PLANET就是zerotier官方的中转节点,-1基本上就是官方的节点挂了….
- MOON是自建的zerotier的节点,延迟96ms
- LEAF是虚拟局域网的各个设备节点
一些额外的指令:
1
2
3
4
5
|
# 加入moon节点
zerotier-cli orbit <world ID> <seed>
# 取消加入moon节点
zerotier-cli deorbit <moon-id>
|
这样基本就配置成功了,走虚拟路由也方便异地串流;
Done
2025.02.27 17:39