目录:
Tailscale 是一个基于 WireGuard 的零配置 VPN 方案,使用官方 Derp(Distributed Exit Relay Protocol)中继服务器可以轻松穿透 NAT 进行设备互联。但在特定场景下,例如企业内网或跨地域机房互联时,默认的 Derp 可能不是最优解。本文介绍如何通过配置自建 Derp 服务器,使 A 网络解析为内网 IP,B 网络解析为公网 IP,实现高性能互联。
方案概述
在 Tailscale 网络中,不同节点可以通过自定义 Derp 服务器进行中继通信。如果 A 机器位于内网,而 B 机器在公网,则可以利用 DNS 解析策略,让 A 解析为私网 IP,B 解析为公网 IP,从而优化连接路径,提高数据传输性能。
配置示例
在 Tailscale 的 derpMap
配置中,我们可以设定一个自建 Derp 服务器,并分别指定其公网和私网地址。示例如下:
"derpMap": {
"OmitDefaultRegions": true, #只连自建derp
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "hk1",
"RegionName": "HK1",
"Nodes": [
{
"Name": "derp01",
"HostName": "derp01.yourmain.com",
"RegionID": 900,
"DERPPort": 443,
"STUNPort": 3478,
"InsecureForTests": true
}
]
}
}
}
在derp节点上抓包测试验证:
tcpdump -v -n -i eth0 port 3478
关键配置解析
OmitDefaultRegions: true
- 该配置确保所有节点只使用自定义 Derp 服务器,而不会使用 Tailscale 官方的 Derp 节点。
derp01.yourmain.com
解析控制- A 网络中的机器解析该域名时,返回
172.25.1.1
(内网 IP)。 - B 网络中的机器解析时,返回
8.8.8.100
(公网 IP)。 - 如果启用magic dns,且yourmain.com解析将通过A网络的coredns来解析
- 注意A网络TS_ACCEPT_DNS要设为false,这将使用本地coredns来解析,也就是会解析为内网IP
- tailscale中要override一条derp01.yourmain.com解析规则,用8.8.8.8公网解析服务器
- B网络TS_ACCEPT_DNS要设置为true,使用公网解析
- A 网络中的机器解析该域名时,返回
- STUN 端口
STUNPort
用于 NAT 穿透,若网络条件允许,可优化为直接 P2P 连接。
实践效果
- A 机器在访问 B 机器时,通过内网 IP 直接连接,避免公网绕行。
- B 机器由于不在同一私网,只能通过公网 IP 访问,但仍然走自建 Derp 节点,确保最优路径。
- 实现了公网、私网 IP 智能解析,提高了数据传输的稳定性和速度。
适用场景
- 跨地域数据中心互联:避免公网带宽消耗,提升传输效率。
- 企业内部网络优化:自定义流量路径,降低延迟。
- 远程办公加速:通过本地 Derp 服务器优化访问速度。
结论
通过 Tailscale 自建 Derp 服务器,并结合智能解析策略,可以高效优化跨网段互联的性能,降低延迟,同时保证稳定性。