之前的headscale部署教程已经有点落后时代了,headscale也从0.23升级到0.29了,刚好因为美国的服务器出了问题(可恶的RN把我从dc2迁移到dc3,给的ip还稀烂),于是乎准备完全迁移到别的地方去了,这个博客就是记录一下部署过程中踩到的坑。
首先一个就是安装headscale,我这边不推荐docker部署的方式,因为后面要装的headplane在注册机器的时候有问题,所以还是使用deb安装的方式,直接去github下载下来dpkg安装,安装完成之后对config.yaml进行编辑
vim /etc/headscale/config.yaml
server_url: 这里替换成你的外网地址 端口你找个不被封的就行
listen_addr: 0.0.0.0:8080
prefixes:
v4: 100.64.0.0/10
v6: fd7a:115c:a1e0::/48 这里看你个人喜好 我懒得搞了 如果真需要c段我就直接去数据库里修改
derp:
server:
enabled: false 如果你和我一样使用别的服务器做Derp就把这个关上,不过我不清楚内置的好不好用
# List of externally available DERP maps encoded in JSON
urls:
- http://xxxx.xxxx.xx/derp.json 这里替换成你自己的derp.json地址 我是用nginx拉出来的,总之能获取这个就行
nameservers:
global:
- 1.1.1.1
- 8.8.8.8
- 114.114.114.114
- 2606:4700:4700::1111
- 2606:4700:4700::1001 这里dns看你自己
剩余的就没什么变动了
下一步就是部署headplane 这里直接docker拉就好了
mkdir -p /var/lib/headplane
headscale apikeys create -e 9999d #这是你的api_key,保存好了,之后登录也要用
cat << 'EOF' > /etc/headplane/config.yaml
server:
host: "0.0.0.0"
port: 3000
base_url: "http://xxxxxxx:11451" #headplane访问地址,记得和下面docker的外部地址一致
cookie_secret: "xxxxxxxxxxxxxxxxxxxx" #随便瞎写字符串
cookie_secure: false
cookie_max_age: 86400
data_path: "/var/lib/headplane"
headscale:
url: "http://xxxxxxxxx:xxxx" #headscale的地址
config_path: "/etc/headscale/config.yaml"
api_key: "hskey-api-" 你自己申请的apikey
config_strict: false
integration:
agent:
enabled: false
pre_authkey: "" # <--- 填补缺失的字符串
docker:
enabled: false
kubernetes:
enabled: false
pod_name: "" # <--- 填补缺失的字符串
proc:
enabled: false
EOF
docker run -d \
--name headplane \
--restart always \
-p 11451:3000 \
-v /etc/headplane/config.yaml:/etc/headplane/config.yaml \
-v /etc/headscale/config.yaml:/etc/headscale/config.yaml:ro \
-v /var/lib/headplane:/var/lib/headplane \
ghcr.io/tale/headplane:latest
然后直接访问http://ip:端口/admin 登录用你的apikey填入就好了
至于derp我这边是直接go编译的derp源码
wget https://go.dev/dl/go1.26.4.linux-amd64.tar.gz #有go就跳过这一部 另外可能需要挂梯子
sudo tar -C /usr/local -xzf go1.26.4.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
go install tailscale.com/cmd/derper@latest
sudo cp ~/go/bin/derper /usr/local/bin/
mkdir -p /var/lib/derper/certs
创建derp.service
[Unit]
Description=Tailscale DERP Server
After=network.target
Wants=network.target
[Service]
Type=simple
User=root
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/derper \
-hostname derp公网IP \
-certmode manual \
-certdir /var/lib/derper/certs \
-a :xxxx \ #http外部端口
-stun \
-stun-port 3478 \
-verify-clients=false
[Install]
WantedBy=multi-user.target
然后记得systemctl enable derp和start derp
下面是derp的json大概格式,对照改就好
{
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "cn-sh",
"RegionName": "China Shanghai",
"Nodes": [
{
"Name": "900a",
"RegionID": 900,
"HostName": "ip",
"DERPPort": xxxx, #端口
"STUNPort": 3478,
"InsecureForTests": true
}
]
}
}
}
