Tailscale 的基本安装就不赘述了
本文的目标是快速搭建,如果对原理或者是一些细节有了解需要,去看参考资料。
本文是轮椅式教程,一步步 cv 就行。
本文是使用纯 ip 来搭建中继服务器,使用域名请看别的教程。(没有实践就不写了)
基本安装
现在国内的 docker 镜像源通常无法搜到 yangchuansheng/ip_derper 这个容器,因此我们最好自己搭建 docker 镜像源,细节可参考: 利用 Cloudflare Workers 自建 Docker 镜像
执行下列命令
docker run \
--restart always \
--name derper \
--env DERP_HTTP_PORT=80 \
--env DERP_VERIFY_CLIENTS=true \
--env DERP_ADDR=:33380 \
-p 33380:33380 -p 3478:3478/udp \
yangchuansheng/ip_derper
- DERP_VERIFY_CLIENTS: 是用来防止 derp 被蹭网的
- 手动放行 33380 和 3478/udp
访问 https://yourip:33380/ 显示下列界面则代表配置成功(证书非法无所谓,我们根据 DERP_VERIFY_CLIENTS 来进行保护)
注意是 https
进入Admin console 配置ACL:
{
"derpMap": {
"OmitDefaultRegions": false, // 可以设置为 true,这样不会下发官方的 derper 节点,测试或者实际使用都可以考虑打开
"Regions": {
"900": {
"RegionID": 900, // tailscale 900-999 是保留给自定义 derper 的
"RegionCode": "you region code",
"RegionName": "you region code",
"Nodes": [
{
"Name": "vps-1",
"RegionID": 900,
"IPv4": "xxx.xxx.xxx.xxx", # 你的VPS 公网IP地址
// "DERPPort": 4430,
"InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验
},
],
},
"900": {
"RegionID": 900, // tailscale 900-999 是保留给自定义 derper 的
"RegionCode": "lian",
"RegionName": "custom_derp_vps",
"Nodes": [
{
"Name": "derp",
"RegionID": 900,
"IPv4": "xxx.xxx.xxx.xxx", # 你的VPS 域名,如果是使用 ip 的,也一样填写 ip
"DERPPort": 33380,
"STUNPort": 3478,
"InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验
},
],
},
},
},
}
重启 Tailscale 进程!!!
使用下列命令检查你的网络
tailscale netcheck
如果还没检测到,可以尝试下列操作:
- 将 ACL 中的 “OmitDefaultRegions” 设为 true ,确定可以打通后再改回 false
启动自动更新
这步很重要,Tailscale 为了提高打洞成功率以及 Bug 修复,会比较频繁的更新版本,我们本身也是建议使用最新版本的 Tailscale 的,但是这就产生了一个问题: derper 中的版本没有及时更新,导致更新 Tailscale 后,虽然还能连上中继服务器,但是 ping 不通了。
为此,我们使用 watchtower 来去自动更新 Tailscale
后台更新
docker run -d \
--network host \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
derper
立即更新
因为后台更新会在一个月后正式开始监控,所以如果有需要,可以使用下列命令立即更新。
docker run --name watchtower_derper -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —-cleanup --run-once derper
手动更新的详细操作
禁用 ACL 中的自定义节点:
{ "derpMap": { "OmitDefaultRegions": false, // 可以设置为 true,这样不会下发官方的 derper 节点,测试或者实际使用都可以考虑打开 "Regions": { // "900": { // "RegionID": 900, // tailscale 900-999 是保留给自定义 derper 的 // "RegionCode": "you region code", // "RegionName": "you region code", // "Nodes": [ // { // "Name": "vps-1", // "RegionID": 900, // "IPv4": "xxx.xxx.xxx.xxx", # 你的VPS 公网IP地址 // // "DERPPort": 4430, // "InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验 // }, // ], // }, // "900": { // "RegionID": 900, // tailscale 900-999 是保留给自定义 derper 的 // "RegionCode": "lian", // "RegionName": "custom_derp_vps", // "Nodes": [ // { // "Name": "derp", // "RegionID": 900, // "IPv4": "xxx.xxx.xxx.xxx", # 你的VPS 域名,如果是使用 ip 的,也一样填写 ip // "IPv4": "xxx.xxx.xxx.xxx", # 你的VPS 公网IP地址 // "DERPPort": 33380, // "STUNPort": 3478, // "InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验 // }, // ], }, }, }, }
更新各个端点的客户端版本(要先更新客户端版本)
更新服务端版本
docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once derper
将控制台中的配置项恢复
自用脚本
echo "clean image"
docker rmi yangchuansheng/ip_derper@latest
echo "pull image"
docker pull yangchuansheng/ip_derper@latest
echo "stop watcher"
docker stop watchtower_derper
echo "rm watcher"
docker rm watchtower_derper
echo "start watcher"
docker run --name watchtower_derper -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —-cleanup --run-once derper