Headscale内网穿透原理解析

内网穿透简述

由于国内网络环境问题,普遍家庭用户宽带都没有分配到公网IP,这时候一般我们需要从外部访问家庭网络时就需要通过一些魔法手段, 比如VPN、Todesk/向日葵等远程软件,但是这些工具都有一个普遍存在的问题: 慢+卡!

传统星型拓扑

究其根本因素在于,在传统架构中如果两个位于多层NAT(简单理解为多个路由器)之后的设备, 只能通过一些中央(VPN/远程软件)中转服务器进行链接,这时网络连接速度取决于中央服务器带宽和速度,这种网络架构我这里简称为:星型拓扑。

Headscale内网穿透原理解析

从这张图上可以看出,你的“工作笔记本”和“家庭 NAS”之间通讯的最大传输速度为 Up/Down:512K/s;因为流量经过了中央服务器中转,由于网络木桶效应存在,即使你两侧的网络速度再高也没用,整体的速度取决于这个链路中最低的一个设备网速而不是你两端的设备。

在这种拓扑下,想提高速度只有一个办法:加钱!在不使用“钞能力”的情况下, 普遍免费的软件提供商不可能给予过多的资源来让用户白嫖,而自己弄大带宽的中央服务器成本又过高。

NAT穿透与网状拓扑

本部分只做简述,具体里面有大量细节和规则可能描述不准确,细节部分推荐阅读How NAT traversal works。

既然传统的星型拓扑有这么多问题,那么有没有其他骚操作可以解决呢?答案是有的,简单来说就是利用 NAT 穿透原理。NAT穿透简单理解如下:在 A 设备主动向 B 设备发送流量后,整个链路上的防火墙会短时间打开一个映射规则,该规则允许 B 设备短暂的从这个路径上反向向 A 设备发送流量,更通俗的讲大概就是所谓的:“顺着网线来打你”。

Headscale内网穿透原理解析

搞清了这个规则以后,我们就可以弄一台“低配”的中央服务器,让中央服务器来帮助我们协商两边的设备谁先访问谁(或者说是访问规则);两个设备一起无脑访问对方,然后触发防火墙的 NAT 穿透规则(防火墙打开),此后两个设备就可以不通过中央服务器源源不断的通讯了,在这种架构下我们的设备其实就组成了一个非标准的网状拓扑。

Headscale内网穿透原理解析

在这种拓扑下,两个设备之间的通讯速度已经不在取决于中央服务器,而是直接取决于两端设备的带宽,也就是说达到了设备网络带宽峰值。当然,NAT穿透也不是百分百能够成功的,在复杂网络情况下,有些防火墙不会按照预期工作或者说有更严格的限制,比如IP、端口、协议限制等等,所以为了保证可靠性可以让中央服务器中转做后备方案,即尽量尝试 NAT 穿透,如果不行走中央服务器中继。

Tailscale 就是一种利用 NAT 穿透(aka:P2P穿透)技术的 VPN 工具,Tailscale客户端等是开源的,不过遗憾的是中央控制服务器目前并不开源。Tailscale目前也提供免费的额度给用户使用,在 NAT 穿透成功的情况下也能保证满速运行。

不过一旦无法 NAT 穿透需要做中转时, Tailscale 官方的服务器由于众所周知的原因在国内访问速度很拉胯,万幸的是开源社区大佬们搓了一个开源版本的中央控制服务器(Headscale),也就是说:我们可以自己搭建中央服务器啦,完全“自主可控”啦。

至于怎么搭建 Headscale 服务端,后面有空再分享啦!

✅来源:十一张博客
© 版权声明
THE END
如果觉得这篇文章对您有帮助,不妨考虑请我喝杯奶茶😄
点赞3赞赏 分享
评论 抢沙发
头像
评论人工审核通过显示,请勿重复提交!
提交
头像

昵称

取消
昵称表情代码

    暂无评论内容