本文未使用headscale来管理用户,此教程建立在本地软路由环境下。

由于tailscale服务器都在海外,如果直接使用它的服务器进行异地组网,速度异常缓慢,因此在软路由下搭建derper服务器替换官方的服务器来达到提升速度的目的,管理用户依旧使用tailscale进行用户管理。

搭建过程

1.使用 Cloudflare API 申请 Let’s Encrypt 证书

如果域名托管在 Cloudflare ,可以用 Cloudflare 的 DNS API 验证:

sudo apt install certbot python3-certbot-dns-cloudflare -y

然后,在 /root/.cloudflare.ini 文件中填入:

dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN #cloudflare后台申请的API TOKEN

CleanShot 2025-03-21 at 08.50.57@2x.png

CleanShot 2025-03-21 at 08.52.16@2x.png

CleanShot 2025-03-21 at 08.53.07@2x.png

申请证书:

sudo certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.cloudflare.ini \
  -d 域名

成功后,证书会存放在:

/etc/letsencrypt/live/域名/fullchain.pem
/etc/letsencrypt/live/域名/privkey.pem

如果提示 File “/usr/bin/certbot”, line 33, in 错误,这执行命令:

pip install --upgrade pyopenssl cryptography certbot certbot-dns-cloudflare

再次申请:

certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.cloudflare.ini \
  -d 域名

2.docker拉取derper

services:
  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    network_mode: host
    ports:
      - "3478:3478/udp"
      - "23479:23479"
    volumes:
      - /etc/letsencrypt/live/域名/fullchain.pem:/app/certs/域名.crt
      - /etc/letsencrypt/live/域名/privkey.pem:/app/certs/域名.key
    environment:
      - DERP_DOMAIN=域名
      - DERP_ADDR=:23479
      - DERP_CERT_MODE=manual
      - DERP_CERT_FILE=/app/certs/域名.crt
      - DERP_KEY_FILE=/app/certs/域名.key
      - DERP_VERIFY_CLIENTS=true #防止白嫖
      - DERP_TAILSCALE_DOMAIN=your-tailscale-network-name  # 只允许你的 Tailscale 网络设备连接 

登陆tailscale后台查看your-tailscale-network-name:

CleanShot 2025-03-21 at 08.25.41@2x.png

3.映射端口

openwrt下映射3478和23479端口

4.修改tailscale后台的ACL

打开https://login.tailscale.com/ 登陆你的账户,修改如下内容:

CleanShot 2025-03-20 at 21.04.39@2x.png

// Example/default ACLs for unrestricted connections.
{
	// Declare static groups of users beyond those in the identity service.
	"groups": {
		"group:example": ["[email protected]", "[email protected]"],
	},
	// Declare convenient hostname aliases to use in place of IP addresses.
	"hosts": {
		"example-host-1": "100.100.100.100",
	},
	"acls": [
		// Match absolutely everything. Comment out this section if you want
		// to define specific ACL restrictions.
		{"Action": "accept", "Users": ["*"], "Ports": ["*:*"]},
	],
	// derper 配置主要是下面这段
	"derpMap": {
		"OmitDefaultRegions": true, // 是否只连接自建 derper 节点
		"Regions": {
			"901": {
				"RegionID":   901, // 整数,自定义
				"RegionCode": "sd", // 字符串,代表地区
				"RegionName": "Shandong", // 字符串,代表地区
				"Nodes": [
					{
						"Name":     "901a", // 字符串,自定义
						"RegionID": 901, // 整数,上面的 RegionID
						"HostName": "域名", // 字符串,域名
						"STUNPort": 3478, // 整数,stun 端口
						"DERPPort": 23479, // 整数,自定义的 derper 端口
					},
				],
			},
		},
	},
}

5.docker拉取tailscale

可以和derper拉取命令放在一起

主要用于数据互通来让derper读区你tailscale网络下的设备数据,从而防止derper服务器被白嫖,docker-compose命令如下:

services:
  tailscale:
    image: tailscale/tailscale:latest
    container_name: tailscale
    restart: always
    network_mode: host
    privileged: true
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    devices:
      - "/dev/net/tun:/dev/net/tun"
    volumes:
      - /root/tailscale:/var/lib/tailscale  # 存储 Tailscale 数据
      - /var/run/tailscale:/var/run/tailscale  # 共享 tailscaled.sock
    environment:
      - TS_AUTHKEY=你的AUTHKEY
    command: >
      /bin/sh -c "
      tailscaled --tun=userspace-networking --socks5-server=localhost:1055 &
      sleep 5;
      tailscale up --authkey=$TS_AUTHKEY --hostname=my-tailscale;
      tail -f /dev/null"

登陆tailscale后台获取TS_AUTHKEY:

CleanShot 2025-03-21 at 08.30.35@2x.png

debian宿主机执行如下命令进行授权:

docker exec -it tailscale /bin/sh
tailscale up --reset \
  --auth-key=你的TS_AUTHKEY

然后在tailscale后台进行授权。

6.使用

各平台下载tailscale,登陆自己的账号即可使用。

文章中域名改成你自己的域名

开通服务端的子网功能

对应docker执行如下命令(更换成自己的子网段):

docker exec -it tailscale tailscale up --advertise-routes=192.168.2.0/24 --reset

在ACL中添加如下内容:

	"autoApprovers": {
		"routes": {
			"192.168.2.0/24": ["[email protected]"],
		},

CleanShot 2025-03-21 at 10.39.03@2x.png

然后找到对应的设备开启子网:

CleanShot 2025-03-21 at 10.41.08@2x.png

💡Tips:

  1. 如果tailscale连接速度慢,记得UPnP里面调整一下速度。

CleanShot 2025-03-23 at 18.33.23@2x.png

  1. openclash开启fake-ip模式会造成tailscale无法连接derper服务器进行验证,fake-ip-filter添加你的域名即可