最近用上了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
- 利用宝塔申请SSL证书
- 配置 tailscale ACL
▌一、利用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
注:
- 利用宝塔的nginx反向代理
端口(上面的例子是12345端口) DERP_VERIFY_CLIENTS=true
默认是false
的。这是设置了验证,防止白票;如果这里设置了true
,那么我们需要在 DERP 服务器上安装 Tailscale的客户端并启动 tailscaled 进程(跟在其他vps安装客户端是一样的步骤), ~所以将与守护进程通信用的 .sock 文件传进去~- 这里外挂SSL证书,通过宝塔或者其他渠道生成证书后放置在
/root/derp/<域名>
这个路径中,主要是以域名.crt
和域名.key
结尾。
▌遇到的坑
-
我看过很多的教程都是通过docker外挂证书,然后用caddy做反向代理。这不是不行,但像我这种用宝塔申请Let’s Encrypt 的 SSL 证书的人来说,如果选择外挂的话,每次都要手动将证书改名字并复制粘贴到指定的文件夹中,这是不科学的。
例如这里使用的方法:
出处: tailscale部署私有中继服务器-docker部署+自定义端口 - 芒果的博客 -
因为 derper 依赖 HTTP、HTTPS 和 STUN 协议,所以需要配置防火墙(阿里云、宝塔等)或安全组,开放 80/tcp,443/tcp,和 3478/udp 端口。
-
上面的
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,
}],
}},
},
}
查看成功与否:
-
Save保存成功后在 Machines 中随便点进一台机器,看 下面Relays 处有没有显示自定义添加的 DERP 服务器。
-
在任意安装了tailscale的终端输入
tailscale netcheck
或者tailscale status
看看是否成功
参考视频:
参考文章:
- https://www.dongvps.com/2022-09-09/搭建derper服务给tailscale-headscale提高稳定性/
- https://www.boris1993.com/self-hosting-tailscale-derp.html
- https://blog.zilch40.wang/post/self-host-tailscale-derp/
- https://p00q.cn/?p=738 【最后是参考这个教程成功的】
科普文章: