环境准备

  • 一台公网服务器 Debian 11
  • 一个备案域名,域名解析到公网服务器
  • docker、docker-compose
  • 防火墙放行8443、3478/udp

安装Tailscale客户端

1
curl -fsSL https://tailscale.com/install.sh | sh

连接Headscale服务器

1
2
3
4
5
6
7
# 登录headscale服务器
sudo tailscale up --login-server https://{设置的域名}
# 执行后会出现验证网址,点击打开复制命令,例如:
# headscale nodes register --user USERNAME --key mkey:{生成的key}

# headscale控制服务器上运行注册命令:
docker-compose exec headscale headscale nodes register --user mydevops --key mkey:{生成的key}

申请SSL证书

参考文章ACME 自动申请、续期 SSL 证书申请证书,申请的证书保存在路径:/home/ssl

部署Derp服务器

1
2
3
4
5
6
7
8
9
# 创建目录
mkdir -p ~/derp
cd ~/derp

# 配置docker.compose.yaml
vim docker-compose.yaml

# 启动容器
docker-compose up -d

docker-compose.yaml内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3'

services:
derper:
container_name: derper
image: ghcr.io/yangchuansheng/derper
restart: always
ports:
- 8443:8443
- 3478:3478/udp
environment:
- DERP_DOMAIN={derp域名}
- DERP_CERT_MODE=manual
- DERP_ADDR=:8443
- DERP_VERIFY_CLIENTS=true
volumes:
- /home/ssl/:/app/certs
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock

配置Headscale服务器

1
2
3
4
5
6
7
8
9
# 进入目录
cd /home/headscale

# 配置derp
vim config/derp.yaml
vim config/config.yaml

# 重启容器
docker restart headscale

config/derp.yaml内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
regions:
901:
regionid: 901
regioncode: xxxx
regionname: xxxx
nodes:
- name: 901a
regionid: 901
hostname: {derp域名}
stunport: 3478
stunonly: false
derpport: 8443

config/config.yaml内容如下:

1
2
3
4
5
6
7
8
...
derp:
urls:
paths:
- /etc/headscale/derp.yaml
auto_update_enabled: true
update_frequency: 24h
...

参考资料