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 在无验证的情况下,会默认转发走所有需要转发的流量而不用校验等操作。
简单安装教程
- 先使用一键脚本部署:
curl -fsSL https://tailscale.com/install.sh | sh
- 进行登录操作:
tailscale login
- 此时控制台就会弹出登录 URL,用你的浏览器访问这个 URL 按操作指引就可以完成安装。
4. 启动 Docker 镜像
原作者
这里我们使用 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
- 进入 ACL 编辑页面:Tailscale
- 加入新配置文件
"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, // 因为是自签名证书,所以客户端不做校验
},
],
},
},
},
- 大功告成!
6. 测试是否成功
使用网络连接测试
- 找到一个在用 tailscale 的客户端
- 进入终端
- 输入
tailscale netcheck
- 检验是否有下图回应
使用 ping 测试连通性
- 找到一个在用 tailscale 的客户端
- 进入终端
- 输入
tailscale ping 你的另一个主机地址
- 检验是否联通 (例如出现
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.