1. Tailscale 与 DERP 简介

Tailscale 是什么?

Tailscale 是一个基于 Wireguard 的带有多种网络工具的 P2P 组网工具。得益于其 P2P 的特性,Tailscale 还可以进行内网穿透,打破 NAT 的限制直达另一台主机。

DERP 是什么?

DERP 是一个 Tailscale 自行开发的中继服务。当所处网络环境难以穿透(如校园网、移动大内网、4G、5G 等)时,所有流量都会经由 DERP 中转至目标地址。

 

在默认情况下,Tailscale 官方已经提供了环大陆的官方 DERP 服务(见下方图 1),但是由于中国大陆的网络连通性等问题,官方并未提供大陆的 DERP 节点。为了确保大陆的打通成功率,我们需要自建一个 DERP 服务,来帮助我们 “打洞”。

图 1 官方提供的各个地区的 DERP 服务器

 

2. 安装 Docker 与 Docker compose

这段请自行参考 Docker 官方网站与其他作者写的部署教程,毕竟每个发行版都不尽相同。

官方部署教程:Install | Docker Docs

 

3. 在 DERP 节点服务中部署 Tailscale 客户端(重要)

原理

由于我们不使用域名进行部署,我们无法使用域名的 --verify-clients 参数进行客户端验证,很容易被别人随便扫扫就扫走,他们就可以使用我们的宝贵国内流量进行一个白嫖。DERP 在无验证的情况下,会默认转发走所有需要转发的流量而不用校验等操作。

简单安装教程

官方教程:Install Tailscale · Tailscale Docs

  1. 先使用一键脚本部署:curl -fsSL https://tailscale.com/install.sh | sh
  2. 进行登录操作:tailscale login
  3. 此时控制台就会弹出登录 URL,用你的浏览器访问这个 URL 按操作指引就可以完成安装。

 

4. 启动 Docker 镜像

原作者

这里我们使用 自建免备案防偷 Tailscale 国内中继(DERP)教程 经验教程 第5张GitHub - yangchuansheng/ip_derper: 无需域名的 derper 大佬已经做好的 Docker image

Docker compose 文件编写

services:
  derper:
    image: ghcr.io/yangchuansheng/ip_derper:latest
    container_name: derper
    restart: always
    ports:
      - "12345:12345" # 这里的12345请改成你自己想要的10000以上的高位端口
      - "3478:3478/udp" # 3478 为stun端口,如果不冲突请勿修改
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # 映射本地 tailscale 客户端验证连接,用来验证是否被偷
    environment:
      - DERP_ADDR=:12345 # 此处需要与上面的同步修改
      - DERP_CERTS=/app/certs
      - DERP_VERIFY_CLIENTS=true # 启动客户端验证,这是防偷的最重要的参数

新建一个文件,命名为:docker-compose.yml

在该文件夹内,docker compose up -d 即可启动该 docker

 

5. 修改 tailscale ACL 配置启用第三方 DERP

  1. 进入 ACL 编辑页面:Tailscale
  2. 加入新配置文件
"derpMap": {
		"OmitDefaultRegions": false, // 可以设置为 true,这样不会下发官方的 derper 节点,测试或者实际使用都可以考虑打开
		"Regions": {
			"900": {
				"RegionID":   900, // tailscale 900-999 是保留给自定义 derper 的
				"RegionCode": "abc1",
				"RegionName": "abcc1",// 这俩随便命名
				"Nodes": [
					{
						"Name":             "fff",
						"RegionID":         900,
						"IPv4":             "1.1.1.1", // 你的VPS 公网IP地址
						"DERPPort":         12345, //上面 12345 你自定义的端口
						"InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验
					},
				],
			},
			"901": {
				"RegionID":   901, // 加入新 derp 的时候记得修改
				"RegionCode": "abc2",
				"RegionName": "abcc2",
				"Nodes": [
					{
						"Name":             "kkk",
						"RegionID":         902,
						"IPv4":             "8.8.8.8", // 你的VPS 公网IP地址
						"DERPPort":         4000, //上面 12345 你自定义的端口
						"InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验
					},
				],
			},
		},
	},
  1. 大功告成!

6. 测试是否成功

使用网络连接测试

  1. 找到一个在用 tailscale 的客户端
  2. 进入终端
  3. 输入 tailscale netcheck
  4. 检验是否有下图回应

自建免备案防偷 Tailscale 国内中继(DERP)教程 经验教程 第5张

使用 ping 测试连通性

  1. 找到一个在用 tailscale 的客户端
  2. 进入终端
  3. 输入 tailscale ping 你的另一个主机地址
  4. 检验是否联通 (例如出现 via DER (xxx)) 即为成功

 

参考文章:

Tailscale 基础教程:部署私有 DERP 中继服务器 · 云原生实验室

本文给大家介绍了 STUN 对于辅助 NAT 穿透的意义,科普了几种常见的中继协议,包含 Tailscale 自研的 DERP 协议。最后手把手教大家如何自建私有的 DERP 服务器,并让 Tailscale 使用我们自建的 DERP 服务器。

Tailscale 组网 - 自建 DERP | 默

Tailscale 自建 DERP 资料来源: <> 更新 12022.12.11 初始

GitHub - yangchuansheng/ip_derper: 无需域名的 derper

无需域名的 derper. Contribute to yangchuansheng/ip_derper development by creating an account on GitHub.

Custom DERP Servers · Tailscale Docs

Learn about custom DERP servers, their limitations, and how to set them up.

 

参与评论