阿猫的博客

阿猫的博客

Tailscale DERP Server 简明部署教程(纯 IP 方式)

44
2025-07-03

前言

本篇通过最简单的方式部署一个 Tailscale DERP Server,不需要域名、备案、反代、证书。本教程面向已经有一定 Tailscale 使用经验的用户,不讲解一些原理及基础操作,跟着教程复制粘贴操作即可。

部署 DERP Server

用 docker compose 运行以下即可。

version: '3.8'
services:
  derper:
    image: ghcr.io/yangchuansheng/ip_derper
    container_name: derper
    restart: always
    environment:
      - DERP_ADDR=:13477
      - DERP_VERIFY_CLIENTS=true
    ports:
      - "13477:13477"
      - "13478:3478/udp"
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock  # tailscale 客户端进程,用于验证客户端身份

如果你选择不启用客户端验证,把 DERP_VERIFY_CLIENTS 设为 false,并删掉 volumes 的挂载即可。但是这样会导致服务可能会被白嫖,建议还是启用。

如果你的服务器没有安装并且登录 tailscale,执行下面两条命令,按提示操作即可。

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

最后,如果你的服务器有防火墙,需要放通 TCP 13477 和 UDP 13478 端口。

配置 ACL

在 Access controls 中,编辑以下内容,然后点击保存。

...
"derpMap": {
		"OmitDefaultRegions": false,
		"Regions": {"900": {
			"RegionID":   900,
			"RegionCode": "gz", // 按需要填
			"RegionName": "Guangzhou", // 按需要填
			"Nodes": [{
				"Name":      "myderper", // 按需要填
				"RegionID":  900,
				"HostName":  "IP/HOST", // 改成自己的 IP/域名
				"DERPPort":  13477,
				"STUNPort":  13478,
				"CanPort80": false,
				"InsecureForTests": true // 去掉域名证书检测
			}],
		}},
	}
...

保存后,最后客户端断开再重新连接一下,以便收到新的配置下发。

调试和验证

有几个命令可以在过程中帮助你调试。

netcheck 命令可以查看具体的 DERP 节点连接状态,以及本机的 NAT 状态等,具体含义解析可以看这里

> tailscale netcheck

Report:
        * Time: 2025-07-03T07:42:24.617968Z
        * UDP: true
        * IPv4: yes, [REDACTED]
        * IPv6: no, but OS has support
        * MappingVariesByDestIP: true
        * PortMapping:
        * CaptivePortal: false
        * Nearest DERP: Guangzhou
        * DERP latency:
                -  gz: 25.1ms  (Guangzhou)
                - sfo: 174.8ms (San Francisco)
                - lax: 176.8ms (Los Angeles)
                - sea: 199ms   (Seattle)
                - hel: 219.2ms (Helsinki)

status 命令可以查看网络中的机器连接状态,以及连接方式等。如下分别是通过 DERP 连接和直连的情况,relay 为通过 DERP 连接,direct 为直连。

> tailscale status

[REDACTED]   macmini              LeslieLeung@ macOS   active; relay "gz", tx 1546756 rx 47066984
[REDACTED]   macmini              LeslieLeung@ macOS   active; direct [REDACTED]

ping 命令可以通过 tailscale 网络执行 ping。如下则说明通过了自建的 DERP 节点连接。

> tailscale ping [ip/machine]

pong from macmini ([REDACTED]) via DERP(gz) in 81ms

References

Tailscale 基础教程:部署私有 DERP 中继服务器 · 云原生实验室
GitHub - yangchuansheng/ip_derper: 无需域名的 derper