headscale开源服务器搭建

2022年1月5日更新

  1. GitHub仓库的文档已更新,可正常运行。
  2. 配置文件里本地ssl证书设置好了后不起效果

前言

headscale 是一款今年 2021 年出现的一款 Tailscale 控制服务器的开源实现。也是唯一的一款。望能发展壮大。

环境

  1. Ubuntu 18.04.3(理论上正常支持systemctl的Linux发行版本都能搭建)
  2. 端口8080
  3. 版本为v0.11
    使用版本

注意事项

官方的当前时间也是本文章撰写的时间。最新版本的配置文件不兼容版本号为v0.12.1

搭建过程

下载二进制文件与源代码
headscale_0.11.0_linux_amd64
Source code (zip)
文件
上传headscale_0.11.0_linux_amd64文件到/usr/local/bin并重命名为headscale并赋予执行权限

chmod 755 /usr/local/bin/headscale

登录服务器创建目录及文件

mkdir /etc/headscale
cd /etc/headscale
touch db.sqlite
touch config.yaml
touch derp.yaml

注意在0.12版本已不需要生成密钥会自动生成,或许需要安装wireguard我们是0.11版本所以需要手动生成

apt-get update
apt-get install wireguard
wg genkey > private.key

最后目录结构如下

root@10-255-1-181:/etc/headscale# tree
.
├── config.yaml
├── db.sqlite
├── derp.yaml
└── private.key

0 directories, 4 files
root@10-255-1-181:/etc/headscale#

填写config.yaml内容,内容来源于解压的v0.11.0.zip压缩包config-example.yaml内容
config-example
填写derp.yaml内容内容来源于解压的v0.11.0.zip压缩包derp-example.yaml内容
derp-example

撰写headscale.service

nano  /etc/systemd/system/headscale.service

[Unit] Description=headscale After=network.target

[Service] WorkingDirectory=/etc/headscale ExecStart=/usr/local/bin/headscale serve

Disable debug mode

Environment=GIN_MODE=release

[Install] WantedBy=multi-user.target


重载`service`与设置开机启动

systemctl daemon-reload systemctl enable headscale systemctl start headscale


![状态](https://gao4.top/wp-content/uploads/2021/12/1196557302.png "状态")  
[最后附上我的配置文件以供参考](https://gao4.top/wp-content/uploads/2021/12/3689285750.zip)

### 功能

首先看一下帮助文件  
![帮助](https://gao4.top/wp-content/uploads/2021/12/2274152524.png "帮助")

### 组网互联功能

控制端命令行下创建命名空间`myfirstnamespace`可以理解用户?

headscale namespaces create myfirstnamespace


客户端执行  
YOUR\_HEADSCALE\_URL为服务器链接

tailscale up –login-server YOUR_HEADSCALE_URL ##例子tailscale up –login-server http://headscale.gao4.top:8080


还回服务端命令行执行下面命令,意思是加入一个myfirstnamespace命名空间,YOURMACHINEKEY为上面命令还回的密钥

headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY


子网路由
----

当前时间段关于headscale中文教程谷歌几乎搜索不到

[https://leffler.tech/2021/10/22/headscale-notes/](https://leffler.tech/2021/10/22/headscale-notes/)  
可以参考这个英文教材  
Linux 下设置Ipv4与ipv6路由转发

echo ’net.ipv4.ip_forward = 1’ | tee /etc/sysctl.d/ipforwarding.conf echo ’net.ipv6.conf.all.forwarding = 1’ | tee -a /etc/sysctl.d/ipforwarding.conf sysctl -p /etc/sysctl.d/ipforwarding.conf


客户端通告网段

tailscale up –advertise-routes=192.168.0.0/24 –login-server=https://headscale.domain.com


查看路由开启可以看到结果是关闭的

headscale routes list –namespace $NAMESPACE $NODE_NAM


This will return someting like this

Route | Enabled 192.168.0.0/24 | false


开启路由

headscale routes enable –namespace $NAMESPACE $NODE_NAME 192.168.0.0/24


查看结果

headscale routes list –namespace $NAMESPACE $NODE_NAME


This will return someting like this

Route | Enabled 192.168.0.0/24 | true


其他节点查看路由结果

tailscale up –accept-routes –login-server=https://headscale.domain.com


参考
--

[\# **How to set up or migrate Headscale**](https://blog.unixfy.net/how-to-set-up-or-migrate-headscale/)  
[\# **Running headscale**](https://github.com/juanfont/headscale/blob/main/docs/Running.md)