官方文档
https://github.com/juanfont/headscale/blob/main/docs/running-headscale-linux.md
1. 下载编译好的二进制程序
wget --output-document=/usr/local/bin/headscale \ https://github.com/juanfont/headscale/releases/download/v0.17.0-beta4/headscale_0.17.0-beta4_linux_amd64 https://github.com/juanfont/headscale/releases/download/v0.17.0-beta5/headscale_0.17.0-beta5_linux_amd64
根据实际情况,修改下载地址
下载地址 可以在 https://github.com/juanfont/headscale/releases 查看
2. 加上可执行属性
chmod +x /usr/local/bin/headscale
3. 创建必要的目录来 存储配置文件和数据库, 创建一个headscale用户(创建用户可以选做)
# Directory for configuration mkdir -p /etc/headscale # Directory for Database, and other variable data (like certificates) mkdir -p /var/lib/headscale # or if you create a headscale user: useradd \ --create-home \ --home-dir /var/lib/headscale/ \ --system \ --user-group \ --shell /usr/bin/nologin \ headscale
4. 生成空的数据库文件
touch /var/lib/headscale/db.sqlite
5. 下载配置文件,放到合适的目录
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml
6. 修改配置文件
server_url: https://headscale.softs.im listen_addr: 127.0.0.1:8080 grpc_listen_addr: 0.0.0.0:50443 grpc_allow_insecure: true 这个应该保持为false private_key_path: /var/lib/headscale/private.key private_key_path: /var/lib/headscale/noise_private.key db_path: /var/lib/headscale/db.sqlite unix_socket: /var/run/headscale.sock randomize_client_port: true 随机端口 这个设置建议打开,否则同一个内网中多个终端会有问题
其实没有怎么修改, 主要是修改了 server_url, 几个文件型的路径,都按照注释里给的建议,进行修改的
因为服务器还跑了其他网站,也要占用443端口, 所以 我用caddy进行反向代理, listen_addr地址设置为 127.0.0.1:8080
7. 临时让 服务跑在tmux里,方便调试
# headscale serve
8. 切到tmux另外的标签,以普通用户运行
$ curl http://127.0.0.1:9090/metrics
应该可以看到正常运行
9. 创建namespace, 也就是创建一个网络, 等下其他节点都加入进来
headscale namespaces create softeam 查看命令空间
10. 注册一个客户端
1) 在客户端机器上执行
tailscale up --login-server YOUR_HEADSCALE_URL
2) 在 headscale服务器上确认
headscale --namespace myfirstnamespace nodes register --key nodekey:the_key
也可以用预授权的方法
服务器上执行
headscale --namespace myfirstnamespace preauthkeys create --reusable --expiration 24h
客户端上执行
tailscale up --login-server YOUR_HEADSCALE_URL --authkey YOUR_AUTH_KEY
11. 改用systemd的方式 而不是tmux的方式,执行在后台
创建一个 /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
12. 将当前用户添加到 headscale 组
usermod -a -G headscale current_user
或者将之后的所有命令都切换到 headscale分生执行
su - headscale
13. 将 /etc/headscale/config.yaml 配置中的
unix_socket: /var/run/headscale/headscale.sock
14. 启动 并验证
systemctl daemon-reload systemctl enable --now headscale systemctl status headscale curl http://127.0.0.1:9090/metrics
15 . 其他命令
查看网络/空间 headscale namespaces list 查看所有节点 headscale nodes list 删除 ID为1 的节点机器 headscale nodes delete -i 1 查看日志 journalctl -xefu headscale