和朋友一起协同开发,需要打通双方的局域网互访,所以考虑到vpn的场景。一开始考虑frp+openvpn的实现。frp实现点对点穿透,openvpn负责组网。但是感觉这样配置较为繁琐,双方都需要部署frp和openvpn,体验不是很友好。
探索了多种方案最终选择了Zerotier,一个自带P2P打洞的vpn,同时满足需要。只需要自建一台有公网ip的moon服务器就可以高效实现各个zerotier节点之间的打洞。
https://my.zerotier.com/network
创建一个网络后,记下network ID。后面其他zerotier的客户端需要先加入这个ID才能进入这个vpn网络中。
因为Zerotier官方的根服务器是在国外的,如果不自建Moon服务器,P2P打洞的效率会非常低。这里随便开一台有公网ip的云服务器部署zerotier Moon服务即可。
# 安装 curl -s https://install.zerotier.com | sudo bash # 启动服务 sudo systemctl start zerotier-one sudo systemctl enable zerotier-one # 生成随机的 root 身份令牌 sudo zerotier-idtool generate identity.secret identity.public
配置 controller
# 创建配置目录 sudo mkdir -p /var/lib/zerotier-one/controller.d # 配置身份信息 sudo cp identity.secret /var/lib/zerotier-one/ sudo cp identity.public /var/lib/zerotier-one/ # 启用 controller 功能 echo '{"settings":{"primaryPort":9993},"controller":true}' | sudo tee /var/lib/zerotier-one/local.conf # 重启服务 sudo systemctl restart zerotier-one
创建Moon配置
cd /var/lib/zerotier-one sudo zerotier-idtool initmoon identity.public > moon.json sudo zerotier-idtool genmoon moon.json sudo mkdir moons.d sudo mv *.moon moons.d/ systemctl restart zerotier-one zerotier-cli info
注意:zerotier默认是9993端口,需要在云控制台放行这个端口。
https://www.zerotier.com/download/
以Linux / Macos 命令行为例。先在ZeroTier官网获取该网络的16位网络ID,加入网络。
zerotier-cli join <16位网络ID>
让客户端连接到我们自建的moon服务器。这里使用moon ID两次是正确的。
zerotier-cli orbit <MoonID> <MoonID>
如何判断有没有加入成功?大概等待10s左右执行命令。
zerotier-cli listmoons zerotier-cli listpeers
ifconfig
在单台主机上安装Zerotier只能实现两个远程局域网中的节点互相通信,怎么才能实现两个局域网的所有主机互相访问呢?
Post Views: 2
赞赏微信赞赏
支付宝赞赏