〇、前言

最近又小折腾了一下 Tailscale 这个工具,所以想记录一下,日后也好方便再次使用。

一、Tailscale 与 DERP 简介

Tailscale 介绍

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

DERP 介绍

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

二、如何自建 DERP 节点

在网络良好的情况,使用 Tailscale 时通常会在刚开始时小卡一会用来建立 P2P 的直通隧道,建立好后,可以非常方便的进行内网主机间通信。

但在网络不好的情况下,Tailscale 建立 P2P 失败转而使用环大陆中继节点进行流量转发,当然速度很感人;

当然还有另一种情况,Tailscale 建立好了 P2P 隧道(Ipv6),但是主机间访问仍然很慢,这涉及到更多的网络路由选择了。

为了解决复杂网络环境下的访问很慢的问题,我们就可以通过建立 DERP 中继节点来保证内网主机间的通信了。

1. Docker部署节点

创建 Dockerfile 文件,并写入以下内容:

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:

docker compose up -d

启动完成后,开放 Dockerfile 文件中出现的 2 个端口,并访问 https://<your ip>:12345 (注意 HTTPS),得到如下图即为安装成功。

2. 修改 Tailscale 访问控制配置

打开 Tailscale 的配置页面,Access Controls

在配置文件中加入以下内容:

"derpMap": {
		"OmitDefaultRegions": false,//这里改成true就是只用自己的derp互联,建议不改,如果要跨网可以改成true
		"Regions": {
			"942": {
				"RegionID":   942,
				"RegionCode": "SHANGHAI",
				"RegionName": "SHANGHAI",//这里可以改成derp命名,如果你有多个derp比如国内国外各有一个
				"Nodes": [
					{
						"Name":             "selfhostderp",
						"RegionID":         942,
						"DERPPort":         12345,
						"STUNPort":         3478, //这里改成stun的端口
						"ipv4":             "<服务器IP>",
						"InsecureForTests": true
					}
				]
			}
		}
	},

3.测试

打开终端,执行以下命令查看网络情况:

tailscale netcheck

得到如下结果表示 DERP 节点建立成功:

可以看到 DERP 有我们创建的 SHANGHAI 的节点,而且延迟在 30 ms 左右,不错!

4.可能遇到的问题

使用 netcheck 时,如果自己创建的节点不显示延迟,可以在 第二步 的配置中将 OmitDefaultRegions 设置为 true ,然后直接建立连接即可。

三、如何强制 Tailscale 只走 DERP

一般来说,DERP 优先用来辅助建立 P2P 通道,无法建立隧道时才会使用 DERP 来转发流量。

但有时候 P2P 直连的效果甚至不如 DERP ,尤其是在我们自建了 DERP 的情况下。

所以有时候宁愿 Tailscale 走自建 DERP 也不想让其建立 P2P 隧道。

官方并没有直接提供工具或选项来设置只走 DERP ,但是我们可以利用其自带的 DEBUG 选项来开启。

Windows 平台

  1. 在系统环境变量中新建:变量名:TS_DEBUG_ALWAYS_USE_DERP 变量值: true

  2. 在 poweshell(admin) 中执行 net stop tailscale 然后再执行 net start tailscale 完成服务重启。

  3. 执行 tailscale status 来验证是否生效

其他平台同理,此处不再赘述

四、总结

Tailscale 是一个不错的工具,用来建立一个小内网,可以随时随地、安全的访问其他主机的文件。

虽然网络环境让我们很不方便,但好在有折腾的空间,有解决的办法,不也挺好吗?!!

五、附录

参考连接