headscale的部署方法和使用教程
- 1. headscale文件下载
- 2. 上传并赋予文件权限
- 3. 创建以及修改相关配置文件
- 3.1 创建配置目录:
- 3.2 创建目录用来存储数据与证书:
- 3.3 创建空的 SQLite 数据库文件:
- 3.4 创建 Headscale 配置文件:
- 3.5 创建 SystemD service 配置文件:
- 3.6 创建 headscale 用户
- 3.7 修改 /var/lib/headscale 目录的 owner
- 3.8 修改配置文件中的 unix_socket
- 4 启动及运行
- 4.1 Reload SystemD 以加载新的配置文件:
- 4.2 启动 Headscale 服务并设置开机自启:
- 4.3 查看运行状态:
- 4.4 查看占用端口:
- 4.5 查看命名空间:
- 5 客户端接入
- 5.1 Linux 平台的接入
1. headscale文件下载
# 下载地址 尽量选择新版本下载
https://github.com/juanfont/headscale/tags
linux机器下载上图选中文件
2. 上传并赋予文件权限
上传 headscale_xxxx_linux_amd64 文件到服务器/usr/local/bin目录下并重命名为headscale
并赋予文件权限
chmod +x /usr/local/bin/headscale
#或者
chmod 755 /usr/local/bin/headscale
3. 创建以及修改相关配置文件
3.1 创建配置目录:
mkdir -p /etc/headscale
3.2 创建目录用来存储数据与证书:
mkdir -p /var/lib/headscale
3.3 创建空的 SQLite 数据库文件:
touch /var/lib/headscale/db.sqlite
3.4 创建 Headscale 配置文件:
# 下载官方的配置文件
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml
-
修改配置文件,将 server_url 改为公网 IP 或域名。如果是国内服务器,域名必须要备案。我的域名无法备案,所以我就直接用公网 IP 了。
-
- server_url 设置为 http://<PUBLIC_IP>:8080,将 <PUBLIC_IP> 替换为公网 IP 或者域名。
-
如果暂时用不到 DNS 功能,可以先将 magic_dns 设为 false。
-
可自定义私有网段,也可同时开启 IPv4 和 IPv6:
ip_prefixes:
# - fd7a:115c:a1e0::/48
- 10.1.0.0/16
3.5 创建 SystemD service 配置文件:
# /etc/systemd/system/headscale.service
[Unit]
Description=headscale controller
After=syslog.target
After=network.target
[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/local/bin/headscale serve
Restart=always
RestartSec=5
# Optional security enhancements
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
3.6 创建 headscale 用户
useradd headscale -d /home/headscale -m
3.7 修改 /var/lib/headscale 目录的 owner
chown -R headscale:headscale /var/lib/headscale
3.8 修改配置文件中的 unix_socket
进入配置文件
vim /etc/headscale/config.yaml
unix_socket: /var/run/headscale/headscale.sock
4 启动及运行
4.1 Reload SystemD 以加载新的配置文件:
systemctl daemon-reload
4.2 启动 Headscale 服务并设置开机自启:
systemctl enable --now headscale
4.3 查看运行状态:
systemctl status headscale
4.4 查看占用端口:
ss -tulnp|grep headscale
Tailscale 中有一个概念叫 tailnet,你可以理解成租户,租户与租户之间是相互隔离的,具体看参考 Tailscale 的官方文档: What is a tailnet。Headscale 也有类似的实现叫 namespace,即命名空间。我们需要先创建一个 namespace,以便后续客户端接入,例如:
headscale namespaces create default
4.5 查看命名空间:
headscale namespaces list
ID | Name | Created
1 | default | 2022-03-09 06:12:06
5 客户端接入
目前除了 iOS 客户端,其他平台的客户端都有办法自定义 Tailscale 的控制服务器。
OS | 是否支持 Headscale |
---|---|
Linux | Yes |
OpenBSD | Yes |
FreeBSD | Yes |
macOS | Yes |
Windows | Yes 参考 Windows 客户端文档 |
Android | 需要自己编译客户端 |
iOS | 暂不支持 |