Tailscale是一种基于WireGuard的虚拟组网工具,可以轻松管理对私有资源的访问,快速通过SSH连接到网络上的设备,并在任何地方安全地工作。Tailscale能够实现将多地主机,都聚合在一个虚拟的局域网中,让这些设备之间能够相互访问。
相较于WireGuard,Tailscale在其基础上提供了更加友好的用户体验,包括虚拟路由,虚拟子网等。可以通过Tailscale的网页管理界面,轻松地管理虚拟局域网中的设备,以及对设备的访问权限进行管理,使得整体功能更加易用完善。(WireGuard相关的内容可参考 基于WireGuard实现内网穿透)
可以在Tailsacle官网上注册账号,然后下载对应平台的客户端,安装后登录即可使用。不同平台的配置可以参考官网给出的文档。
Tailscale的个人用户在接入设备不超过20台的情况下可以免费使用(存在有一些限制,比如子网网段无法自定义,无法设置多个子网,只能配置一个虚拟路由)。对于大部份用户来说,Tailscale免费版已经足够日常使用了,相比于Zerotier,Tailscale更容易添加虚拟路由,任何一个节点就都可以被设置为路由,从而让所在内网被其他节点访问到。
Tailscale的免费版可以满足大部分用户的需求,已经足够日常使用了,但是免费用户仍然存在一些限制,为了解除这些限制,有开源项目重新把Tailscale实现了一遍,项目名称叫Headscale。自建开源版Tailscale,也就是Headscale,好处是突破Tailscale免费版的限制,自定义子网网段,设置多个子网与命名空间等,而且无论是打洞还是使用服务器直接中转连接,都可以直接使用自建的服务器来进行,速度也会更快。
可以在Headscale获取源码与说明
bashwget --output-document=/usr/local/bin/headscale headscale_release版本路径
#设置执行权限
chmod +x /usr/local/bin/headscale
创建配置
bash#创建配置目录
mkdir -p 指定目录/headscale
#创建数据库文件
touch 指定目录/headscale/db.sqlite
#创建配置文件:
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O 指定目录/headscale/config.yaml
配置文件需要修改的内容:
创建headscale.service:vim /etc/systemd/system/headscale.service
bash[Unit]
Description=headscale
After=syslog.target
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/headscale serve
Restart=always
RestartSec=5
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/headscale /var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=headscale
[Install]
WantedBy=multi-user.target
启动Headscale并创建namespace
bashsystemctl daemon-reload
#启动服务,设置开机自启:
systemctl enable --now headscale
#查看运行状态:
systemctl status headscale
#创建namespace:
headscale namespaces create default
#查看namespace
headscale namespaces list
注意,Headscale并没有重新去实现Tailscale的客户端,所以仍然使用Tailscale的原生客户端修改配置后进行连接,理所应当,IOS端不支持,Android端需要重新编译过的客户端。
打开server_url/windows,server_url替换成Headscale的配置,可以下载一个注册表修改工具,执行后安装Tailscale Windows客户端,登陆的时候就会去搭建Headscale的服务器进行认证,认证成功即可加入网络。
下载Tailscale Linux客户端,并启动。
bash#启动服务,server_url替换成Headscale的配置,advertise-routes替换成内网网段(需要打开转发)
tailscale up --login-server=server_url --accept-routes=true --accept-dns=false --advertise-routes=192.168.1.0/24
执行完后,终端会出现一行网址,打开网址后,会出现一行指令,需要将指令复制到Headscale服务器执行
bash#需要将namespace替换为服务器创建的,uuid为网址上出现的uid
headscale -n namespace nodes register --key uuid
#查看加入的节点:
headscale nodes list
#允许网段
headscale routes enable -i 1 -r "192.168.1.0/24"
需要修改Android客户端的源码,提供指定服务器地址的功能,然后重新生成release版本安装。(嫌麻烦的话可以在网上找已经重新编译好的版本)
Headscale-ui:可以在Headscale-ui处下载可视化界面,通过docker部署,可以通过浏览器可视化访问Headscale的管理界面。
route:添加advertise-routes并打开转发,可以通过网关接入Headscale,使得局域网内的所有设备都可以通过Headscale访问到。
exit-node:使用tailscale up --advertise-exit-node可以指定一个服务器为exit-node节点,使得流量通过该节点进行中转。
derp:中转服务器,节点与节点进行连接时,会首先通过derp服务进行中转连接。
搭建开源版Tailscale——Headscale