情景题要
因为团队有远程办公的需求,所以为了方便远程开发联调,需要部署一套虚拟局域网的方案。
排除Frp方案后,目前市面上有两种主要的方案
1.公网服务器中转流量的VPN的方式
2.基于点对点(P2P)的NAT穿透方案
肯定选择第二种,打洞成功后流量不经过中心服务器,对中心服务器的带宽要求没那么严格,且更加稳定。
工具选择
目前市面上主流的P2P NAT穿透VPN主流的有以下几种:
ZeroTier
Tailscale
两者之间的对比文章挺多的,但实际效果还得亲自尝试后才知道。
一开始我也是用的ZeroTier,出于中心服务器的网络延迟问题考虑,使用自建planet的方式
但在团队日常的开发使用过程中,发现有网络不通的问题,绝对更换成Tailscale的方案,自建中心服务器有开源的Headscale。
Headscale有官方的安装指南,按照流程安装也挺方便的。
Headscale安装
安装服务器的操作系统:Ubuntu20.04 有docker安装的教程,但官方说“未经开发人员验证”,所以并未采用docker方案。
下载安装包
在官方Github Release页下载安装包,注意系统的架构,并且是.deb后缀的包。
安装 Headscale:
sudo apt install ./headscale.deb
启用 Headscale 服务,这将在启动时启动 Headscale:
sudo systemctl enable headscale
配置 Headscale:
nano /etc/headscale/config.yaml
修改server_url,设置为自己的服务器的ip。
如果是通过反向代理访问的,则填外部连接的地址。
如果有域名可填域名,上TLS加密的话把http改为https,我没上域名和TLS。
本来打算修改组网内的机器的ip范围,但好像新版不支持更改,不是非要修改所以就不管了
derp服务器感觉没有必要,而且需要https,所以没去部署。
自定义dns也没设置,在配置文件下面可以设
Headscale还有灵活的ACL用户通讯策略,有需求的可以看看,目前我用不到所以没设置
启动 Headscale:
sudo systemctl start headscale
检查 Headscale 是否按预期运行:
systemctl status headscale
Headscale添加用户
Headscale里的用户可以理解为一个网段,每个网段就是一个虚拟局域网。
我为了方便后面的设备进入这个网段中,所以采用预身份验证密钥的方式
创建用户
headscale users create myfirstuser
使用命令行生成密钥:
headscale --user myfirstuser preauthkeys create --reusable --expiration 24h
--expiration
为密钥有效期,如果要以天数为单位,后面带d
这将返回一个预先经过身份验证的密钥,对应后续客户端设备接入时的<YOUR_AUTH_KEY>
Tailscale客户端接入虚拟局域网中
Tailscale客户端下载
安装好后,Windows设备用PowerShell,Linux设备用sudo命令执行
tailscale up --login-server <YOUR_HEADSCALE_URL> --authkey <YOUR_AUTH_KEY>
<YOUR_HEADSCALE_URL>对应Headscale配置中的server_url Windows下可在任务栏中查看自己的IP,Linux通过ifconfig查看