环境

  • Debian 12.x
  • Docker 27.x

部署

  • 首先需要前往 Keys - Tailscale 创建一个授权密钥
  • 新建一个 docker-compose.yml 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
network_mode: host
restart: unless-stopped
volumes:
- /dev/net/tun:/dev/net/tun
- tailscale-sock:/var/run/tailscale
- tailscale-state:/var/lib/tailscale
cap_add:
- net_admin
- sys_module
environment:
- TS_AUTHKEY=${TS_AUTHKEY}
- TS_HOSTNAME=${TS_HOSTNAME}
- TS_NO_LOGS_NO_SUPPORT=true
- TS_STATE_DIR=/var/lib/tailscale # 存储 tailscaled 状态
- TS_SOCKET=/var/run/tailscale/tailscaled.sock # Unix socket

derper:
image: fredliang/derper
container_name: derper
restart: unless-stopped
ports:
- ${DERP_PORT}:443
- ${STUN_PORT}:3478/udp
environment:
- DERP_DOMAIN=${DERP_DOMAIN}
- DERP_CERT_MODE=manual
- DERP_CERT_DIR=/app/certs
- DERP_VERIFY_CLIENTS=true # 验证客户端,防止其他人使用
- DERP_HTTP_PORT=-1
volumes:
- tailscale-sock:/var/run/tailscale
- ${CRT_DIR}:/app/certs/${DERP_DOMAIN}.crt
- ${KEY_DIR}:/app/certs/${DERP_DOMAIN}.key

volumes:
tailscale-sock:
tailscale-state:
1
2
3
4
5
6
7
TS_AUTHKEY= # 填你在上面步骤获得的 KEY
TS_HOSTNAME= # 填名字,方便辨认
DERP_PORT= # DERP的端口
STUN_PORT= # STUN的端口
DERP_DOMAIN= # 注意如果你是国内的服务器,使用的域名需要在**所在服务商**备案
CRT_DIR= # 证书crt路径
KEY_DIR= # 证书key路径
  • 最后 docker compose up -d 即可启动~

如果你想通过IP部署,可以参考这篇 Tailscale DERP Docker版教程(国内 无需域名 IP+Port) - 开发调优 - LINUX DO

ACL配置

暂时懒得写,参考其他人的吧 tailscale自建derp提高打洞效率与中继稳定性 - 正汰的学习笔记

附注

  • state 和 sock 没有映射到主机中(因为觉得没必要),而是直接用了 docker volume,并且没有直接映射 .sock。这是因为同时启动时会被默认创建为目录,因此映射了上一级的目录。
  • 这个部署案例默认是采用了手动维护证书的更新,个人感觉现在的证书自动化工具已经非常好用了,这里推荐一个目前在用的 https://github.com/usual2970/certimate

推荐阅读