异地组网:免域名免备案自建Tailscale DERP节点
无论是远程办公需要访问公司内网资源,还是想要在外出时轻松管理家中的设备,甚至只是想绕过NAT限制直接连接到另一台主机,异地组网都是一个理想的解决方案。本文将介绍一种不需要域名、无需备案的方法来建立自己的私有网络,特别适合国内环境下的技术爱好者和专业人士。
1 异地组网的目的与好处
想象这样一个场景:李华是一名开发者,他在家里有一台NAS用于娱乐,公司有一台性能强劲的PC作为开发环境,同时在云端租了一台服务器用于部署项目。他经常需要在星巴克充当气氛组或是出差时工作,使用的是一台环保的MacBook。如果没有异地组网,李华每次在外工作或访问家里的电脑,可能需要设置复杂的端口转发规则,担心家庭网络的安全性,还得记住不断变化的家庭IP地址。而想要在本地直接调试部署在云服务器上的应用,又必须开放服务器端口,增加了安全风险。
通过建立异地组网,李华只需要登录到私有网络,就像所有设备都在同一个局域网内一样。他可以从咖啡厅直接访问到NAS、开发环境,在笔记本上进行开发,然后无缝地部署到云服务器上。整个过程安全、高效,无需担心复杂的网络配置和安全风险。
异地组网为我们带来了多方面的好处:首先是便捷访问,无论身处何地,都能像在本地网络一样访问远程设备和服务;其次是保障了数据安全,通过加密通道传输数据,有效避免敏感信息在公共网络中泄露;同时,它能突破各种网络限制,绕过NAT、防火墙等障碍,实现真正的点对点连接;最后,它提供了统一管理的可能,让分散在不同地点的设备整合到一个虚拟网络中,便于集中管理和维护。
现代异地组网解决方案通常部署迅速,只需几分钟就能完成设置;提供低延迟体验,在良好的网络环境下几乎感受不到距离带来的延迟;且大多支持Windows、MacOS、Linux、iOS、Android等多种操作系统,让你的所有设备都能加入到这个私有网络中;更重要的是,它们简化了传统VPN的复杂配置,普通用户也能轻松上手使用。
2 异地组网的常见方案对比
市场上有多种异地组网解决方案,每种都有其独特的特点和适用场景。下面我们通过一个综合对比来了解几种主流方案:
方案 | 核心特点 | 优势 | 局限性 | 适用场景 |
---|---|---|---|---|
Tailscale | 基于WireGuard的P2P VPN | 高性能、简单易用、支持P2P直连、开源核心组件 | 免费版设备数量有限(100个)、官方DERP中继在国内不稳定 | 个人使用、小型团队、需要高安全性的场景 |
ZeroTier | 全球虚拟网络 | 灵活的网络拓扑、可创建多个网络、多平台支持 | 免费版设备数量有限(10个)、中继节点在国内不稳定、配置略复杂 | 需要复杂网络结构、多个虚拟网络的场景 |
FRP | 反向代理工具 | 完全开源、灵活配置、无设备限制 | 非组网工具、需要公网服务器、配置复杂 | 特定服务端口转发、内网穿透 |
Cloudflare Tunnel | 云端隧道服务 | 强大基础设施、不需公网IP、CDN加速 | 非P2P连接、主要针对Web服务、免费版功能有限 | Web服务暴露、需要CDN加速的场景 |
虽然表格提供了直观的对比,但选择合适的方案还需结合具体使用场景进行考量。对于追求简单易用且希望建立真正点对点连接的用户,Tailscale通常是最佳选择。它简化了传统VPN的复杂性,同时保留了高性能和安全性。ZeroTier则适合那些需要构建更复杂网络拓扑的用户,它提供了更多的网络结构定制可能性。
如果您只是想解决特定应用的端口转发问题,FRP作为一个轻量级工具可能更为适合。而对于主要需要暴露Web服务的场景,特别是希望享受CDN加速的用户,Cloudflare Tunnel则提供了独特的优势。
就我个人而言,可以将上面的方案分为两类:前两者为SDN类,后两者为FRP类,两类正好是互补的关系。对于大多数情况,我的服务只需要在SDN类构建的局域网中访问即可;但对于某些特殊服务,还是需要Cloudflare Tunnel来打洞,即与他人分享的服务(正好Cloudflare Tunnel的鉴权访问做得非常完善)以及无root权限的机器。
在本文中,我们将重点探讨如何优化Tailscale在国内的使用体验,特别是通过自建DERP节点来提高连接质量,这对于国内用户来说是一个至关重要的改进。
3 Tailscale详解
Tailscale是近年来迅速崛起的新一代VPN解决方案,它巧妙地融合了传统VPN的安全性和P2P网络的直接连接优势,为用户提供了一种便捷、高效的异地组网方式。
3.1 什么是Tailscale?
Tailscale本质上是一个基于WireGuard协议的网状VPN(Mesh VPN)服务,它将复杂的网络配置简化为几次点击操作。与传统VPN不同,Tailscale采用了分布式架构,大多数情况下可以实现直接的点对点连接,无需所有流量经过中心服务器。这种设计既提高了数据传输效率,又降低了服务器负载和中心节点故障的风险。例如在上面的拓扑图中,四个节点间可以实现两两(P2P)直连。
Tailscale的魅力在于它极致的简化理念。用户无需深入了解网络配置,也不需要固定IP地址或是复杂的防火墙规则设置,只需在设备上安装客户端并登录,就能自动加入到安全的私有网络中。这种"零配置"的体验使得即使是非技术背景的用户也能轻松使用。
3.2 Tailscale的工作原理
理解Tailscale的工作原理,需要先了解几个核心概念:
WireGuard协议是Tailscale的基础,这是一个现代化的VPN协议,相比OpenVPN等传统方案,它代码量更小、性能更高、更易于审计。WireGuard提供了底层的加密通信能力,确保数据在传输过程中的安全性。
Tailscale采用了控制平面与数据平面分离的架构。控制平面负责设备认证、密钥交换、网络配置等管理功能,由Tailscale的服务器处理;而数据平面则负责实际的数据传输,尽可能地在设备间直接进行,无需经过中央服务器。
当两台设备需要通信时,Tailscale会首先尝试通过各种NAT穿透技术建立直接的P2P连接。这包括使用STUN协议发现设备的公网地址,以及尝试UDP打洞等技术。在大多数情况下,这些技术能够成功建立直接连接。
然而,在一些严格的网络环境下(如对称型NAT、企业防火墙、运营商级NAT等),直接的P2P连接可能无法建立。这时,Tailscale会退而求其次,使用DERP(Designated Encrypted Relay for Packets)服务作为数据中继。DERP是Tailscale开发的一种中继协议,它会在无法直连的情况下,帮助转发加密后的数据包。
3.3 Tailscale的优势与局限性
Tailscale凭借其独特的设计,在异地组网领域具有显著优势。首先是其卓越的性能表现,基于WireGuard协议,Tailscale比传统VPN解决方案如OpenVPN快得多,延迟更低,适合各种实时应用场景。其次是极简的用户体验,几分钟内就能完成全部配置,后续几乎零维护,大大降低了用户的使用门槛和运维成本。
安全性方面,Tailscale提供端到端加密,支持多种身份验证方式,包括与Google、Microsoft等身份提供商的集成,适合企业环境使用。跨平台支持也是Tailscale的一大亮点,它几乎支持所有主流操作系统,包括Windows、macOS、Linux、iOS、Android等,甚至还支持各种路由器固件如OpenWRT,让用户可以将所有设备纳入同一个私有网络。
然而,Tailscale也存在一些局限性。最突出的问题是官方DERP节点在国内连接不佳,由于众所周知的网络原因,官方提供的中继服务器在中国大陆地区的表现往往不尽如人意,影响了用户体验。此外,免费版本的设备限制(最多100台设备)对于个人用户通常足够,但对于较大规模的组织可能会成为制约。最后,一些高级功能如子网路由、多用户组织等需要付费计划支持,这也是使用Tailscale需要考虑的成本因素。
正是由于官方DERP节点在国内连接不佳的问题,自建DERP节点成为了提升国内Tailscale使用体验的关键解决方案,这也是本文接下来将重点讨论的内容。
4 自建Tailscale DERP节点
针对国内用户面临的最大问题——官方DERP节点连接不稳定,我们可以通过在国内服务器上自建DERP节点来解决。这种方法不需要域名和备案,只需要一台拥有公网IP的国内服务器,就能大大提升Tailscale在国内的使用体验。
4.1 DERP服务简介
DERP(Designated Encrypted Relay for Packets)是Tailscale专门开发的中继服务。当两台设备因为网络环境限制无法直接建立P2P连接时,DERP会作为中间人帮助转发加密数据包。这种情况常见于严格的NAT环境下,如校园网、移动网络、企业防火墙等场景。
需要强调的是,虽然DERP服务会中转数据,但这些数据在发送前已经被端到端加密,DERP服务器本身无法解密或查看数据内容,因此安全性不受影响。当然,使用DERP中继会增加一定的网络延迟,并受限于DERP服务器的带宽和地理位置。
默认情况下,Tailscale提供了遍布全球的DERP节点网络,包括美国、欧洲、亚洲多个地区,但遗憾的是没有中国大陆地区的节点。这导致国内用户在需要使用DERP中继时,往往需要连接到距离较远的节点,如香港、新加坡、日本等地,造成较高的延迟和不稳定的连接。
4.2 准备工作
在开始自建DERP节点前,您需要准备以下资源:
- 一台拥有公网IP的国内服务器,推荐配置至少1核2GB内存,带宽建议10Mbps以上,系统可以是常见的Linux发行版如Ubuntu、CentOS等。
- 服务器上已安装Docker和Docker Compose,这将极大简化我们的部署流程。如果尚未安装,可以参考Docker官方文档进行安装。
- 已注册的Tailscale账号,用于管理您的私有网络和DERP节点。
值得注意的是,虽然许多教程建议使用域名和SSL证书来部署DERP服务,但本文将介绍一种不需要域名和备案的简化方法,特别适合个人用户或小团队使用。
4.3 在DERP节点服务器上安装Tailscale客户端
首先,我们需要在服务器上安装Tailscale客户端。这一步骤至关重要,它是防止他人未经授权使用我们DERP节点的关键机制。由于DERP服务本身不验证客户端身份,我们需要借助Tailscale客户端的身份验证机制来实现访问控制。
在服务器上执行以下命令安装Tailscale客户端:
|
|
执行登录命令后,终端会显示一个URL链接。使用浏览器访问这个链接,按照提示完成身份验证流程。认证成功后,服务器就会成为您Tailscale网络中的一个节点。
您可以通过tailscale status
命令验证登录状态,确保服务器已经成功连接到您的Tailscale网络。
4.4 使用Docker部署DERP服务
接下来,我们将使用yangchuansheng开发的Docker镜像来部署DERP服务。这个镜像封装了DERP服务的配置和运行环境,大大简化了部署过程。
首先,创建一个新的目录用于存放Docker配置文件:
|
|
然后,创建docker-compose.yml
文件:
|
|
将以下内容复制到文件中:
|
|
如果您的服务器在国内,可能会遇到拉取国外Docker镜像缓慢的问题,这时可以使用国内镜像源:
|
|
保存文件后,启动DERP服务:
|
|
通过查看容器日志,可以确认服务是否正常启动:
|
|
如果看到类似"DERP server is up and running"的消息,说明服务已成功启动。
4.5 配置Tailscale使用自建DERP节点
现在,我们需要告诉Tailscale网络使用我们自建的DERP节点。这需要修改Tailscale的ACL(访问控制列表)配置。
-
登录Tailscale管理控制台:https://login.tailscale.com/admin/acls/file
-
在编辑器中,找到或添加
derpMap
部分,配置自建的DERP节点信息:
|
|
注意事项:
RegionID
在900-999之间是预留给自定义DERP节点的,避免与官方节点冲突RegionCode
和RegionName
可以自定义,建议使用有意义的名称IPv4
必须是服务器的公网IP地址DERPPort
必须与Docker配置中暴露的端口一致InsecureForTests
设置为true是因为我们使用了自签名证书
- 保存配置后,Tailscale控制面板会自动将新的DERP配置推送到所有连接的设备。这个过程可能需要几分钟时间,具体取决于设备数量和网络状况。
4.6 验证DERP节点是否工作
成功部署后,我们需要验证DERP节点是否正常工作。有两种主要的验证方法:
方法一:使用网络连接测试
在任何一台已连接到Tailscale网络的设备上,运行以下命令:
|
|
这个命令会检测当前设备能够连接到哪些DERP节点,以及它们的延迟情况。在输出结果中,应该能看到我们自建的DERP节点信息,如果显示延迟数值(而不是超时),说明节点连接正常。
方法二:使用Ping测试
当两台设备无法直接建立P2P连接时,Tailscale会自动通过DERP节点中继流量。我们可以通过ping测试来验证:
|
|
如果在输出中看到类似via DERP(cn-derp1)
的信息,说明流量正在通过我们自建的DERP节点中继,证明配置成功。
我的测试结果如上图所示,左侧是使用自建服务器之前,右侧是使用自建中转节点之后。其中第一条命令的机器porser是国内异地,都是先中转再打洞成功,明显看到使用自建DERP节点后,中转的时间显著下降。第二条命令的测试机器nerd是美国节点,经过自建DERP中转甚至比直连更快。第三调命令显示我们的DERP节点(sh)延迟只有15ms,比之前官方提供的最近节点(70ms)有了显著提升。
在实际使用中,您可能会注意到,当两台设备位于不同的网络环境时(如一台在家庭网络,一台在移动网络),它们很可能会通过DERP节点通信。而当设备在同一网络环境时,Tailscale会尽可能建立直接的P2P连接,不使用DERP中继。
5 常见问题与解决方案
在部署和使用自建DERP节点的过程中,您可能会遇到各种问题。以下是一些常见问题及其解决方案:
问题:无法连接到DERP节点
这通常是由网络配置或服务器设置导致的。首先,检查服务器防火墙是否开放了DERP服务使用的端口(在我们的例子中是12345和3478/UDP)。大多数云服务商除了操作系统防火墙外,还有额外的安全组或网络ACL设置,确保这些也已正确配置。
其次,确认docker-compose.yml
中的配置是否正确,特别是端口映射和环境变量设置。可以通过docker logs derper
查看容器日志,寻找可能的错误信息。
最后,验证服务器上的Tailscale客户端是否正常登录,可以通过tailscale status
命令查看。如果客户端未登录或状态异常,可能会导致DERP服务无法正常工作。
问题:连接DERP成功但设备之间无法通信
这种情况通常与Tailscale的访问控制设置有关。首先,检查ACL配置是否正确,确保相关设备有互相访问的权限。Tailscale的ACL功能非常强大,可能需要仔细检查是否有意外的访问限制规则。
其次,确认设备间的子网路由设置。如果涉及到访问设备所在的子网(而不仅是设备本身),需要在Tailscale客户端启用子网路由功能,并在ACL中授权相应的子网访问权限。
使用tailscale status
命令可以查看当前网络中所有设备的连接状态,包括它们是否通过P2P直连或DERP中继通信。这有助于诊断具体的连接问题。
问题:DERP连接速度较慢
DERP中继的性能受多种因素影响,包括服务器硬件配置、网络带宽、地理位置等。如果发现连接速度不理想,可以考虑以下优化方案:
升级服务器配置,特别是网络带宽。DERP服务对CPU和内存要求不高,但带宽是关键因素,尤其是当多台设备同时通过中继通信时。
优化服务器的网络配置,如调整TCP/IP参数,开启BBR等拥塞控制算法,这可能会提高网络吞吐量。
如果条件允许,可以在不同地理位置或使用不同ISP的服务器上部署多个DERP节点,通过derpMap
配置让Tailscale网络使用距离最近或延迟最低的节点。
问题:服务器重启后DERP服务不自动启动
确保Docker服务配置为开机自启动:
|
|
同时,在docker-compose.yml
中已经设置了restart: always
参数,这应该能确保Docker容器在服务重启后自动启动。如果仍有问题,可以创建一个系统服务或启动脚本,确保在系统启动时自动启动DERP服务。
6 总结与展望
我们已经成功在国内环境下建立了自己的Tailscale DERP节点,而且不需要域名和备案,大大提升了Tailscale的使用体验。这种方案不仅适用于个人用户,也适合小型团队或企业内部使用,能够在保证数据安全的同时,提供稳定、高效的异地组网服务。
自建DERP节点的方案解决了国内用户使用Tailscale面临的最大痛点——官方DERP节点连接不稳定的问题。通过国内服务器中继,不仅大幅降低了网络延迟,还提高了连接的稳定性和可靠性,让Tailscale这款优秀的组网工具在国内环境下发挥出应有的价值。
展望未来,随着网络技术的不断发展,我们可能会看到更多适合国内环境的P2P连接解决方案。Tailscale本身也在不断改进NAT穿透技术,增强直接P2P连接的成功率。但在当前阶段,自建DERP节点仍然是解决Tailscale在国内使用问题的最佳方案之一。
值得一提的是,除了本文介绍的方法外,还有其他一些改进Tailscale使用体验的方式,如使用Headscale作为自托管的控制服务器,以进一步增强网络的自主性和定制性。对于有更高要求的用户,这些方案也值得探索。
最后,感谢开源社区的贡献,尤其是yangchuansheng开发的ip_derper项目,让自建DERP节点变得如此简单。
7 参考资料


