自建 Tailscale 中继服务器


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

如果还没检测到,可以尝试下列操作:

  1. 将 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

手动更新的详细操作

  1. 禁用 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, // 因为是自签名证书,所以客户端不做校验
    //   					},
    //   				],
       			},
       		},
       	},
       }
     
  2. 更新各个端点的客户端版本(要先更新客户端版本)

  3. 更新服务端版本

    docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once derper

  4. 将控制台中的配置项恢复

自用脚本

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

参考资料


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录