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
知识点
折腾了半天,大概搞清楚了几件需要认识到的事:
- DERP server 是通过 HTTP upgrade protocol 来实现通信的;
- 服务运行成功后,可以使用 HTTP(S) 访问对应的端口来初步验证服务是否可达,它会返回一个 HTML 页面;
- DERP server 可以只启用 HTTP 服务器来提供服务,这样就能使用反向代理实现 TLS,并使用 HTTP 反向代理到 DERP server。
部署方案
现在部署这个服务就比较有把握了吧!参考下面的配置文件来部署,需要部署到有公网 IP 的主机上,记得在防火墙放行 443/tcp 和 3478/udp 端口。
Docker Compose 配置文件:docker-compose.yml
关键点
- 通过
DERP_ADDR=:80环境变量,可以让 DERP server 使用 HTTP 提供服务。(当然,你也可以选择手动管理证书或者由容器内提供的自动化方案从 Let'sEncrypt 颁发。) - 使用 Traefik 进行 TLS termination 并反向代理到 DERP 容器 80 端口。证书由 Traefik 进行自动申请和续签。
- 运行 Tailscale 容器实现宿主机接入 tailnet 和 DERP server 的客户端验证。
- 需要为 tailscale 服务设置
network_mode: host,不然无法在其他机器上访问当前机器的端口; - 在环境变量
TS_EXTRA_ARGS上增加--accept-routes参数,实现访问 tailnet 中其他机器的局域网设备; volumes里不能直接绑定tailscaled.sock文件,而应该是其目录,这个文件用来给 DERP server 做客户端验证用的。
配置完成后启动 docker compose,然后参考官方文档将刚刚部署的 DERP server 添加 ACL 规则中。