Memo

结合 Docker Compose 和 Traefik 搭建 Tailscale DERP server

结合 Docker Compose 和 Traefik 搭建 Tailscale DERP server 知识点 折腾了半天,大概搞清楚了几件需要认识到的事: 1. DERP server 是通过 HTTP upgrade protocol 来实现通信的; 2. 服务运行成功后,可以使用 HTTP(S) 访问对应的端口来初步验证服务是否可达,它会返回一个 HTML 页面; 3. DERP...

结合 Docker Compose 和 Traefik 搭建 Tailscale DERP server

知识点

折腾了半天,大概搞清楚了几件需要认识到的事:

  1. DERP server 是通过 HTTP upgrade protocol 来实现通信的;
  2. 服务运行成功后,可以使用 HTTP(S) 访问对应的端口来初步验证服务是否可达,它会返回一个 HTML 页面;
  3. DERP server 可以只启用 HTTP 服务器来提供服务,这样就能使用反向代理实现 TLS,并使用 HTTP 反向代理到 DERP server。

部署方案

现在部署这个服务就比较有把握了吧!参考下面的配置文件来部署,需要部署到有公网 IP 的主机上,记得在防火墙放行 443/tcp3478/udp 端口。

Docker Compose 配置文件:docker-compose.yml

关键点

  1. 通过 DERP_ADDR=:80 环境变量,可以让 DERP server 使用 HTTP 提供服务。(当然,你也可以选择手动管理证书或者由容器内提供的自动化方案从 Let'sEncrypt 颁发。)
  2. 使用 Traefik 进行 TLS termination 并反向代理到 DERP 容器 80 端口。证书由 Traefik 进行自动申请和续签。
  3. 运行 Tailscale 容器实现宿主机接入 tailnet 和 DERP server 的客户端验证
  4. 需要为 tailscale 服务设置 network_mode: host,不然无法在其他机器上访问当前机器的端口;
  5. 在环境变量 TS_EXTRA_ARGS上增加 --accept-routes 参数,实现访问 tailnet 中其他机器的局域网设备;
  6. volumes 里不能直接绑定 tailscaled.sock 文件,而应该是其目录,这个文件用来给 DERP server 做客户端验证用的。

配置完成后启动 docker compose,然后参考官方文档将刚刚部署的 DERP server 添加 ACL 规则中。