【最好的虚拟组网】为Tailscale部署使用IP的Derp节点

参考文档如下,感谢作者的付出
无需域名,自建 Tailscale Derp 节点
tailscale使用自定义derper服务器
ip_derper
Tailscale 基础教程:部署私有 DERP 中继服务器

前几天折腾headscale后是一地鸡毛,听佬友说只需要部署自建derp,然后用官方的tailscale就行,我寻思着没毛病,真是完美的方案

上次验证失败是卡在了域名SSL证书验证问题,我配置的nginx无法解决这个问题,所以这次就放弃域名验证了,使用纯IP就行,且tailscale的控制台支持添加自定义derp服务器,支持自定义端口。

部署

感谢大佬打包了纯IP部署的derp docker镜像,可以直接拉取,就是速度十分感人,等着吧

docker pull ghcr.io/yangchuansheng/ip_derper:latest

认证会使用到容器内部的两个端口:443、3478,映射的时候需要将这个两个端口暴露出去(80用不上,因为必须走TLS),同时记得去云服务器的防火墙放行你要暴露的端口

此处3478是derp默认使用的STUN 端口,而且也是tailscale ping状态的端口,而443是验证TLS的端口。端口都可以自定义,tailscale控制台支持修改。

注意,3478需要映射udp(tcp可以不映射,我懒得删了):

docker run --restart always --name derper -d -p 59443:443 -p 3478:3478 -p 3478:3478/udp ghcr.io/yangchuansheng/ip_derper

云服务器的防火墙记得打开3478(udp)、59443(tcp)

然后访问https://IP:59443,看到derp界面就说明服务正常启动

配置

接下来去tailscale控制台配置derp服务地址:

下面是我的配置,记得填入你自己的IP,直接在ssh段落后面添加就行:

	"randomizeClientPort": true,

	"derpMap": {
		"OmitDefaultRegions": false,
		"Regions": {
			"901": {
				"RegionID":   901,
				"RegionCode": "tx",
				"RegionName": "tencent Shanghai",
				"Nodes": [
					{
						"Name":             "901",
						"RegionID":         901,
						"HostName":         "【IP】",
						"DERPPort":         59443,
						"IPv4":             "【IP】",
						"InsecureForTests": true,
						"STUNPort":         3478,
					},
				],
			},
			"1": null,
			"2": null,
			// "3":  null,//Singapore
			"4": null,
			// "5": null,//Sydney
			"6": null,
			// "7":  null,//Tokyo
			"8":  null,
			"9":  null,
			"10": null,
			"11": null,
			"12": null,
			"13": null,
			"14": null,
			"15": null,
			"16": null,
			"17": null,
			"18": null,
			"19": null,
			//"20": null,//Hong Kong
			"21": null,
			"22": null,
			"23": null,
			"24": null,
			"25": null,
		},
	},

点击save即可

测试

更换derp节点需要客户端重启tailscale才能生效,不然使用的时候还是会用之前的derp节点。群晖就直接在套件中心停用再启用tailscale就行。

我们来测试一下节点情况,在Windows的tailscale路径下cmd执行即可(群晖ssh也行)

首先关闭ipv6,避免直接公网直连,然后找到一台用流量的手机,连入tailscale:

  • 查询集群状态
tailscale status  
100.64.0.2      Nas-windows11          windows -
100.64.0.4      phone                    android active; 
100.64.0.5      macbookair             macOS   offline
100.64.0.3      pc                  windows active; 
100.64.0.1      Nas              linux   active; 
  • 查询网络状态
tailscale netcheck  
Report:
        * UDP: true
        * IPv4: yes, ip:23298
        * IPv6: no, but OS has support
        * MappingVariesByDestIP: false
        * PortMapping: UPnP, NAT-PMP, PCP
        * CaptivePortal: true
        * Nearest DERP: tencent Shanghai
        * DERP latency:
                -  tx: 54.4ms  (tencent Shanghai)
                - tok: 200.6ms (Tokyo)
                - syd: 234.7ms (Sydney)
                - sin: 244.3ms (Singapore)
                - hkg: 249.2ms (Hong Kong)
  • ping一下使用流量上网的手机
tailscale ping phone
pong from 14u (100.64.0.4) via DERP(tx) in 173ms
pong from 14u (100.64.0.4) via DERP(tx) in 125ms
pong from 14u (100.64.0.4) via DERP(tx) in 242ms
pong from 14u (100.64.0.4) via 39.144.134.6:64239 in 16ms

ipv4 STUN打洞成功,延迟只有16ms!

总结

使用tailscale + 自建Derp 有以下效果:

如果设备都在同一个局域网,设备直连;
如果访问设备网络环境有公网ipv6地址,设备直连;
如果访问设备只有ipv4但NAT类型支持,那么通过自建Derp打洞实现STUN穿透访问;
如果设备网络环境极其恶劣,亦可使用中继服务器转发进行小带宽的访问。

这应该是目前使用体验最优秀,最方便,成本最低的虚拟组网方案,使用国内服务器自建的derp,听说连NAT4都能打洞成功。而且最重要的是,一切网络转换行为都不需要你操心,只需要设备登录连接tailscale即可,简直就是神。

总算是能稍微安心了。

307 个赞

好呀好呀

17 个赞

不错

6 个赞

学习中

6 个赞

Zerotier习惯了啊

2 个赞

去年双十一云厂商优惠的主机没什么业务,手撸的derp ,需要go的环境,用aliyun一年的免费ssl hey,有配置好的docker应该更简单 taiscale北京到上海的Derp节点时延是40ms

8 个赞

感谢热佬~ :smiling_face_with_three_hearts:

我还是觉得 Tailscale 设计的太复杂了。ACL 策略等机制。这种程度的复杂对于我这种个人用户来说属于过多的心智负担了。 :rofl:

我还是喜欢 Zerotier 那种傻瓜式操作。 :smiling_face_with_three_hearts:

4 个赞

不错,感谢教程

5 个赞

感谢教程

12 个赞

这两个我用起来没有区别吧,你说的复杂体现在哪里呢

4 个赞

zerotier经常掉线,可能是我自建的有问题

4 个赞

我用n2n,docker直接部署 非常方便

3 个赞

回复:“这两个我用起来没有区别吧,你说的复杂体现在哪里呢”

感觉以下几个功能很乱,也可能是我个人的问题



以及这个魔法 DNS 不能自定义

回复 “zerotier经常掉线,可能是我自建的有问题”

我用的 GitHub - Jonnyan404/zerotier-planet: 一分钟自建zerotier-planet 目前还没遇到问题。
自己搭建的根服务器连接质量,延迟都很棒。
而且我感觉 Zerotier 这种简单的设置网段,自动分配 IP,也可以手动修改 IP。手动配置 DNS,手动设置路由表这种简单操作要易用的多。
相比 TS 的 ACL 规则,退出节点等复杂概念我感觉要好用的多
image

我感觉 TS 应该是对标 Cloudflare Zero Trust 这种 Cloudflare Tunnel 的 企业级 产品。对于我这种轻量级的个人需求来说功能太多太复杂了。增加心智负担。我更喜欢简单一点的 Zerotier。

3 个赞

感谢分享。

3 个赞

点赞:+1:,谢谢分享

5 个赞

好贴, :+1:

11 个赞

其实还能让你省下一个客户端,前提是你的翻墙节点服务器上也开了tailscale:

有没有这样一种场景,你手机端开了tailscale 但是你的vpn断开了,比如 clash 比如v2rayNG比如小火箭, 虽然你能从tailscale走一些流量但是不完美;

其实你只需要开着你的翻墙节点,然后把绕过局域网的规则取消掉,再次打开你组网的其他机器的内网页面,是不是奇迹再次发生了

5 个赞

那可能是我用的功能比你还少的多,我甚至只需要自定义分配IP,其他的都不关心 :joy:
tailscale的自动根据网络环境切换直连或穿透,还是挺省心的,起码我自己用zerotier时没有这么丝滑
不过应该是我弄的Zerotier组件不太先进,反正docker一口气开了三个容器,挺麻烦的

3 个赞

比较古早的项目了,之前都试过,有空可以升级成更流行的

3 个赞

太感谢了,收藏研究,后继佬友多分享

4 个赞