Headscale的部署方法和使用教程
用于解决内网穿透的各项缺点,有云服务器的可以来看看。
问题点
由于家里的宽带不支持公网IP,因此为了能访问家里的网络使用了frp内网穿透的功能,但是这会带来一个问题,使用内网穿透的话,需要对每一个接口进行一个绑定,随着外网访问的服务越来越多,势必要开启多个接口,这就管理端口会麻烦,而且每次添加都要启停服务。因此最佳的解决方法还是通过VPN的方式来组建一个大内网。
tailscale是什么
首先要介绍一下tailscale,它是基于WireGuard的虚拟组网工具,和Netmaker类似,最大的区别在于Tailscale是在用户态实现了WireGuard协议,而Netmaker直接使用了内核态的WireGuard。所以Tailscale 相比于内核态WireGuard 性能会有所损失,但与OpenVPN之流相比还是能甩好几十条街的,Tailscale虽然在性能上做了些许取舍,但在功能和易用性上绝对是完爆其他工具:
- 开箱即用
- 无需配置防火墙
- 没有额外的配置
- 高安全性/私密性
- 自动密钥轮换
- 点对点连接
- 支持用户审查端到端的访问记录
- 在原有的ICE、STUN等UDP协议外,实现了DERP TCP协议来实现NAT穿透
- 基于公网的控制服务器下发ACL和配置,实现节点动态更新
- 通过第三方(如 Google)SSO服务生成用户和私钥,实现身份认证
简而言之,我们可以将Tailscale看成是更为易用、功能更完善的WireGuard。
但是Tailscale是一款商业产品,个人用户可以免费使用,但是有一些限制,例如:接入设备不能超多20台,子网网段无法自定义,且无法设置多个子网等等。
因此如果我们想拥有更高级的功能,除了付费外还可以更换控制服务器,就是我们接下来讲到的Headscale。
Headscale是什么
Headscale由欧洲航天局的Juan Font使用Go语言开发,在BSD许可下发布,实现了 Tailscale控制服务器的所有主要功能,可以部署在企业内部,没有任何设备数量的限制,且所有的网络流量都由自己控制。
目前 Headscale 还没有可视化界面。
Headscale部署
Headscale的部署推荐直接在云服务器上安装,而且必须要有公网IP的服务器
首先需要到GitHub仓库的Release页面下载最新的二进制文件。
|
|
创建配置目录
|
|
创建目录用来存储数据与证书
|
|
创建空的SQLite数据库文件
|
|
创建Headscale配置文件
|
|
- 修改配置文件,将
server_url
改为公网 IP 或域名。如果是国内服务器,域名必须要备案。 - 如果暂时用不到 DNS 功能,可以先将
magic_dns
设为 false。 server_url
设置为http://<PUBLIC_IP>
,将<PUBLIC_IP>
替换为公网 IP 或者域名。listen_addr
可以指定服务运行的端口,可以设定为0.0.0.0:8080
,后续可以使用nginx做反代- 可自定义私有网段,也可同时开启 IPv4 和 IPv6:
|
|
创建SystemD service配置文件
|
|
|
|
创建headscale用户
|
|
修改/var/lib/headscale
目录的owner
|
|
修改配置文件中的unix_socket
|
|
|
|
加载新的配置文件
|
|
启动Headscale服务并设置开机自启
|
|
查看运行状态
|
|
查看占用端口
|
|
创建一个 namespace,以便后续客户端接入。
|
|
Headscale常用命令
查看命名空间
|
|
查看命名空间的租户
|
|
删除命名空间的租户(按照上面的租户来删除)
|
|
删除指定命名空间
|
|
Tailscalek客户端接入
目前除了iOS客户端,其他平台的客户端都有办法自定义Tailscale的控制服务器。
OS | 是否支持Headscale |
---|---|
Linux | Yes |
OpenBSD | Yes |
FreeBSD | Yes |
macOS | Yes |
Windows | Yes 参考 Windows 客户端文档 |
Andrid | 需要自己编译客户端 |
iOS | 暂不支持 |
MacOS
macOS 有 3 种安装方法:
这三种安装包的核心数据包处理代码是相同的,唯一的区别在于在于打包方式以及与系统的交互方式。
应用商店里的应用运行在一个 应用沙箱中,与系统的其他部分隔离。在沙箱内,应用可以是一个 网络扩展,以实现 VPN 或者类 VPN 的功能。网络扩展实现的功能对应用商店之外的应用是无法生效的。
从 macOS 从 10.15 开始新增了 系统扩展,说白了就是运行在用户态的内核扩展,它相比于传统的网络扩展增强了很多功能,比如内容过滤、透明代理、DNS 代理等。Tailscale 独立于应用商店的安装包使用的就是系统扩展,通过 DMG 或者 zip 压缩包进行分发。
⚠️注意:不要同时安装应用商店版本和独立分发版本,同时只能装一个。
而命令行工具既没有使用网络扩展也没有使用系统扩展,而是使用的utun 接口,相比于GUI版本缺少了部分功能,比如MagicDNS和Taildrop。
安装完GUI版应用后,只需要在浏览器中打开 URL:http://<HEADSCALE_PUB_IP>:8080/apple
或https://<DOMAIN_NAME>:8080/apple
,便会出现如下的界面。
按照杜仲的操作要么下载macOS profile
来操作,要么直接使用default wtire io.tailscale.ipn.macos ControlURL <DEFAULT>
修改完成后重启Tailscale客户端,在macOS顶部状态栏中找到Tailscale并点击,然后再点击 Log in
然后立马就会跳转到浏览器并打开一个页面。
然后回到Headscale所在的机器执行浏览器中的命令,需要注意的是命令行中需要修改namespace,即可注册成功。
然后在macOS顶部状态栏中找到Tailscale并点击后,即可看到This device
。
回到 Headscale 所在主机,查看注册的节点:
|
|
回到 macOS,测试是否能 ping 通对端节点:
|
|
Windows
Windows Tailscale客户端想要使用Headscale作为控制服务器,只需在浏览器中打开 URL:http://<HEADSCALE_PUB_IP>/windows
,便会出现类似Mac的界面,配置方式有两种,一种是点击Windows registry file
,另外一种是将命令行输入
其他
对于Linux,Android,及其他版本的安装,或打通局域网等功能,可以参考原始文章
总结
本文将主要是针对原始文章做了一定的修改和美化,因为自己在搭建过程中碰到一些不动地方,因此做个记录,如果有详细需求的,可以参考原始文章。