参考文档如下,感谢作者的付出
无需域名,自建 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服务地址:
- Tailscale
具体参数含义参考官方文档: - tailcfg package - tailscale.com/tailcfg - Go Packages
- tailcfg package - tailscale.com/tailcfg - Go Packages
根据官方的derp清单可以知道不同ID对应的derp区域,然后通过配置文件覆盖,优选延迟低的区域: - https://controlplane.tailscale.com/derpmap/default
下面是我的配置,记得填入你自己的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即可,简直就是神。
总算是能稍微安心了。