搭建属于自己的Tailscale网络

0x00 前言⌗
之前我写过一篇自建Zerotier Controller
的文章,但是昨天发现它NAT打洞又失败了!我很愤怒,于是卸载了所有节点上的Zerotier,准备换用Tailscale。
我们当然不能向大企业施舍给穷人的免费套餐低头(虽然Tailscale Inc.好像也不算大企业),因此在本篇教程中,我们将会使用第三方开源控制器Headscale
建立自己的Tailscale虚拟局域网(即tailnet
)。
如果你想了解NAT打洞/穿越是如何做到的,请阅读此文章。
0x01 安装headscale控制器⌗
由于Tailscale并不像Zerotier那样,控制器与客户端共用一套代码,也就代表Headscale不能像Zerotier Controller那样兼职作为客户端,不过因此我们也可以放心地将Headscale部署至容器内,实现灵活部署。
同时,由于headscale默认是没有Web UI的,我们会使用第三方Web UI让我们的操作更方便。
0x01.199…9A 假设你有一台Linux服务器:⌗
- 安装
docker-compose
- 使用如下配置:
在container-config
文件夹内建立config.yaml
,写入如下配置:
好吧可能确实有点长这是我从repo里直接拉下来的配置不过我加了点中文注释方便你理解请一定要全部看完如果你发现有什么奇奇怪怪的错误可能是因为我放在这里的配置文件版本老了有字段改变了总之你可以自己去repo看一看!
现在我们可以使用docker-compose up -d
来启动服务器了.
0x01.333…3 如果你居然还没有一台Linux服务器…!⌗
请您选购:轻量应用服务器Lighthouse - 腾讯云
之后返回阅读 0x01.199…9A 章节
0x01.4CC…CD 配置反代,暴露你的Headscale服务器!⌗
当然,我们会选择最潮最炫酷最简洁的Caddy
帮助我们完成此项工作。如果你还是顽固不化的nginx
老用户,相信你已经有独立完成配置的能力了!
我们使用如下Caddyfile启动服务器:
但是不要急,Web UI需要Headscale提供的API Key才能工作,所以让我们先来生成它:
- 在项目目录,运行
这会生成一个720天有效期的API Key,应该够你用了。
之后我们打开https://hs.xxx.xx/web,在Settings栏输入https://xxx.xx,在APIKey栏输入刚刚生成的key并保存,现在你就已经搭好了!
0x01.666…6 简单讲一下Web UI⌗
在界面里,你可以看到三大Tab:User、Device与Settings,其中User其实对应headscale里的namespace,记得一定要先创建一个。
为了加入设备更加方便,我们还可以在这里生成一个PreAuth key,让申请加入的设备可以直接获得批准。具体操作自己试一下就知道了哈,不懂的话别勾选Ephemeral就可以。
0x02 安装Tailscale客户端⌗
你可以在此处查阅官方安装文档。
如果你是iOS
人,很高兴你可以看到这里,不过你应该关闭这篇文章了,因为Tailscale的iOS客户端目前还不支持自定义服务器>_<
0x02.199…9A 对于Linux客户端:⌗
-
你可以使用一键脚本:
如果一键脚本不巧失败了,那么你可以查阅官网下载页面的
Manually install on
部分。 -
运行如下命令:
你的设备就加入Tailscale网络了!
如果你没有申请PreAuth Key,那也可以,在tailscale up之后它会给你提供一个链接,复制其中key的值,这就是这个设备的Device Key,在Web UI中的Device栏里选择添加设备,并在提示框内输入Device Key,也可以完成添加。
0x02.333…34 对于Windows客户端:⌗
- 首先下载安装包,这就不用说了;
在运行后,右键Tailscale在任务栏的图标,在Preferences
菜单中勾选Run unattended
; - 打开regedit,导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Tailscale IPN
,新建字符串值,名称为LoginURL
,数据为https://hs.xxx.xx
,之后再次启动Tailscale客户端并登录。
0x02.4CC…C 对于Android客户端:⌗
- 首先下载安装包,在哪下载随你便,不过至少得是
1.30
及之后的版本,再老的添加不了第三方服务器; - 进入主界面,点击右上角菜单选项,你可能只能看到一个版本号,不要急,多点几次,就会出现一个
Change Server
的选项,输入你的Headscale服务器URL(https://hs.xxx.xx)并保存。 - 在主界面选择其它方式登录,之后你就可以从提供的链接里获得Device Key并在Web UI中添加设备。
0x03 完成!⌗
现在你已经拥有了自己的tailscale网络,可以享受Tailscale带来的各种优势了!
0x04 更高级一点的东西……⌗
0x04.199…98 配置Subnet Router⌗
也许你有一些设备需要连接到Tailscale网络,但是它们的软硬件不足以运行Tailscale,这怎么办呢?
有了Tailscale,你可以将局域网内的任意设备作为Subnet Router,通过它访问整个局域网内的设备!
具体教程我摸了,你看官方文档自己参悟一下:Subnet routers and traffic relay nodes
0x04.333…34 将任意客户端配置为出口节点⌗
出口节点模式类似于传统的C/S架构VPN,你的所有流量都会被转发到出口节点上,在某些特殊情况下会很有用。
官方文档:Exit Nodes (route all traffic)
0x04.CCC…C 尝试Tailscale客户端的其它好东西⌗
tailscale netcheck
: 查看你的IP地址与到各大公共DERP服务器之间的延迟;tailscale status
: 查看各客户端的连接状态,是直连还是中继一目了然;tailscale nc/ssh
: 顾名思义;tailscale file
: 即Taildrop
功能,在要发送文件的客户端上运行tailscale file cp <path> <host-ip>:
,在要接受文件的客户端上运行tailscale file get
,就可以方便地传输文件!
0x05 一些可能会遇到的小问题…⌗
0x05.199…98 在阿里云上使用⌗
Q: 我在阿里云服务器上用了Tailscale,结果用不了
100.100.2.136
这个内网DNS,导致我连不上内网软件源了,怎么办?
A: 阅读文章:一次Tailscale网络问题的调试过程