Tailscale:宝塔自建Derp服务器

最近用上了Tailscale用于组网,虽然Tailscale 官方在世界各地部署了很多 DERP 服务器进行中继但不包含中国大陆,虽然问题不是很大,很多情况下都是直连的。但共用服务器就造成了延迟高等问题。 刚好闲置了一台HK的VPS,干脆就自己搭建了一台DERP。

无域名ip_derper(20230322更新)

参考过不同的教程,最终还是利用了无域名的形式实现了。 之前以为部署成功,但一出现relay的时候,就ping不通。

搭建ip_derper

以下是docker-compose.yml的内容,填写好后直接运行docker compose up -d

version: '3.3'
services:
  yangchuansheng:
    restart: always
    network_mode: host
    container_name: derper
    environment:
      - DERP_HTTP_PORT=2180
      - 'DERP_ADDR=:<port>'
      - DERP_VERIFY_CLENTS=true
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
    image: ghcr.io/yangchuansheng/ip_derper

上面与原教程的有点不同,上面设置了DERP_VERIFY_CLIENTS=true 默认是false的。这是设置了验证,防止白票,所以下面添加了volumes/var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock,将与守护进程通信用的 .sock 文件传进去~ 如果没有设置,下面volumes的部分可以删除。

配置 tailscale ACL

"derpMap": {
		"Regions": {"900": {
			"RegionID":   900,
			"RegionCode": "hk",
			"Nodes": [{
				"Name":             "1",
				"RegionID":         900,
				"HostName":         "ip地址",
				"IPv4":             "ip地址",
				"DERPPort":         上面的<port>,
				"InsecureForTests": true,
			}],
		}},
	},

目前基本没有问题,relay都可以ping通,而且不通ssl证书。

下面的内容基本可以忽略了

带域名derper

一、利用docker在vps上部署derper

确保vps上docker运行正常并运行如下命令

docker run --restart always \
--name derper -p 12345:12345 -p 3478:3478/udp \
-v /root/derp/<域名>/:/app/certs \
-e DERP_CERT_MODE=manual \
-e DERP_ADDR=:12345 \
-e DERP_DOMAIN=<域名> \
-d ghcr.io/yangchuansheng/derper:latest

注:

  1. 利用宝塔的nginx反向代理端口(上面的例子是12345端口)
  2. DERP_VERIFY_CLIENTS=true 默认是false的。这是设置了验证,防止白票;如果这里设置了true,那么我们需要在 DERP 服务器上安装 Tailscale的客户端并启动 tailscaled 进程(跟在其他vps安装客户端是一样的步骤), ~所以将与守护进程通信用的 .sock 文件传进去~
  3. 这里外挂SSL证书,通过宝塔或者其他渠道生成证书后放置在/root/derp/<域名>这个路径中,主要是以域名.crt域名.key结尾。

遇到的坑

  1. 我看过很多的教程都是通过docker外挂证书,然后用caddy做反向代理。这不是不行,但像我这种用宝塔申请Let’s Encrypt 的 SSL 证书的人来说,如果选择外挂的话,每次都要手动将证书改名字并复制粘贴到指定的文件夹中,这是不科学的。
    例如这里使用的方法:

    出处: tailscale部署私有中继服务器-docker部署+自定义端口 - 芒果的博客

  2. 因为 derper 依赖 HTTP、HTTPS 和 STUN 协议,所以需要配置防火墙(阿里云、宝塔等)或安全组,开放 80/tcp,443/tcp,和 3478/udp 端口。

  3. 上面的DERP_VERIFY_CLIENTS设置了true就记得在 DERP 服务器上安装 Tailscale的客户端

二、利用宝塔申请SSL证书

创建网站

申请SSL

反向代理

三、配置 tailscale ACL

打开tailscale控制台,打开access controls

// 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",
	},

	// Access control lists.
	"acls": [
		// Match absolutely everything.
		// Comment this section out if you want to define specific restrictions.
		{"action": "accept", "users": ["*"], "ports": ["*:*"]},
	],
	"ssh": [
		// Allow all users to SSH into their own devices in check mode.
		// Comment this section out if you want to define specific restrictions.
		{
			"action": "check",
			"src":    ["autogroup:members"],
			"dst":    ["autogroup:self"],
			"users":  ["autogroup:nonroot", "root"],
		},
	],
	"derpMap": {
		"OmitDefaultRegions": true, // 是否只连接自建 derper 节点
		"Regions": {"900": {
			"RegionID":   900,
			"RegionCode": "hk",
			"RegionName": "hongkong", // 字符串,代表地区
			"Nodes": [{
				"Name":     "【你的域名example.com】",
				"RegionID": 900,
				"HostName": "【你的域名example.com】",
				"DERPPort": 12345,
			}],
		}},
	},
}

查看成功与否:

  1. Save保存成功后在 Machines 中随便点进一台机器,看 下面Relays 处有没有显示自定义添加的 DERP 服务器。

  2. 在任意安装了tailscale的终端输入tailscale netcheck或者tailscale status 看看是否成功

参考视频:

参考文章:

科普文章:

阅读量: | 柯西君_BingWong | 2023-02-12