Ubuntu部署headscale+headplane+自建derp

Cold_Windy 发布于 5 小时前 4 次阅读


之前的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
        }
      ]
    }
  }
}
此作者没有提供个人介绍。
最后更新于 2026-06-21