Tailscale 通过 tcp 流量转发实现无须自建 derp 节点加速国内访问

2023-02-14 20:15:13 +08:00
 zckevin

Abstract

https://tailscale.com/kb/1118/custom-derp-servers/

derp server has derp service(基于 http(s) 的流量转发 tcp/443) + STUN service(udp/3478)

众所周知,搭建一个 derp server 需要配置 https 证书等繁琐的流程,因此希望能通过 tcp 流量转发实现加速。

Route:

derpMap

在 tailscale web admin UI 中可以配置 ACL ,其中包括 derpMap

默认的 derpMap: https://login.tailscale.com/derpmap/default

(并不会一直请求,而是被 embed 在 golang binary 中)

配置

添加一个新的 region ,其 Nodes 参数包含我们想要添加的转发代理节点

{
	"derpMap": {
		"OmitDefaultRegions": true,
		"Regions": {
			"900": {
				"RegionID":   900,
				"RegionCode": "hkg2",
				"RegionName": "Tencent HK->Hongkong",
				"Nodes": [
					{
						"Name":     "derp Tencent hk",
						"RegionID": 900,
						"HostName": "derp20b.tailscale.com",
						"DERPPort": xxxx,
						"STUNPort": -1,
						"IPv4":     "xx.xx.xx.xx",
					},
					{
						"Name":     "stun",
						"RegionID": 900,
						"HostName": "derp20b.tailscale.com",
						"STUNOnly": true,
					},
				],
			},
		},
}

显而易见,如果我们用 UDP 转发来代理 STUN 服务,STUN 获取到的 external ip address 是 UDP 代理的 IP ,而不是 local agent ip ,其会直接导致服务连接失败。

好在 DERPNode 中的配置选项还算丰富,可以 somehow 绕过这个麻烦

https://pkg.go.dev/tailscale.com/tailcfg#DERPNode

HostName 必须是 default derpMap 中几个服务器之一(本人选择香港 derp20b ),否则 tls 报错 internal tls cert error ( journalctl -u tailscaled )

但是为此的代价是必须手动指定 IPv4 field ,设置为 vx.link tcp proxy’s IP addr ,如果 vx.link 更换了新的代理服务器,我们可能需要手动修改这个 field

DERPPortvx.link tcp proxy’s port

STUNPort 为 -1:To disable STUN on this node, use -1.

之后,再添加一个 STUNOnly 为 true 的节点,HostName 最好是和上边一样

效果

Routes(one way):

China Mobile FTTH → vx.link Tencent HK →derp20b.tailscale.comvx.link Tencent HK → China Unicom 4g

mtr -z derp20b.tailscale.com

勉强能在高峰期获得一个能用的延迟。

不足之处

流量转发与 STUN 服务的强耦合,导致 tcp udp 流量走的是两条不同的 network path ,即 tailscale netcheck 通过 STUN 服务检测到的 UDP 直连 RTT 并不等同于经过 tcp 转发后 path 的 rtt ,导致我们的最优 path 选择出错。

所以无奈之举是 OmitDefaultRegions 为 true ,disable 所有默认节点,只保留我们在 acl 中添加的转发节点。

结尾

注:文章内容从 notion 笔记中 CTRL-V ,文法及格式过于随意。

真不是广告,流量都是自费充值。

10254 次点击
所在节点    宽带症候群
22 条回复
AAAmos
2024-05-09 10:35:22 +08:00
@Actrace mark 微林 derp
Drbo
2024-06-03 11:18:51 +08:00
mark 微林 derp

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/916123

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX