> 文章列表 > 史上最简单的wireguard系列教程-headscale基础介绍

史上最简单的wireguard系列教程-headscale基础介绍

史上最简单的wireguard系列教程-headscale基础介绍

tailscale和headscale介绍

tailscale介绍

  • tailscale (以下部分简称ts) 是基于wireguard协议开发,实现隧道加密点对点连接的上层应用,wireguard本身提供了两种实现,分别为用户态和内核态实现,ts是基于用户态的实现,还有一些项目比如netmaker是基于内核态的实现。虽然用户态的性能要比内核态的性能稍差一些,但是ts本身对UDP组网进行了深度优化,目前支持10G/s的吞吐量,性能要比原生内核态实现更上一层,ts是如何优化udp组网的技术细节之后可以单独出一篇文档讲解。实际上这两种方案我都用过,不管是个人还是企业(企业自建headscale)我更建议tailscale,netmaker的稳定性和部署的便捷性落后ts不止一点,而且netmaker经常出现丢包情况,这点我在实际的使用中深有体会。
  • tailscale的优势:
    • 开箱即用:使用贼简单
    • 功能齐全:ACL访问控制、节点动态更新、P2P连接、derpNAT穿透等等
  • tailscale支持两种组网模式
    • p2p打洞:网络直连
    • derp中继协议(转发):双方网络都处于严格管理的NAT之后时,通过derp服务器进行流量转发,加解密依然在端和端之间完成,derp只负责三层转发

ts小结:ts是一款更好用的,功能更完善的,适用于个人环境的wireguard


headscale介绍

  • 以上我这边介绍了ts,但是由于tailscale的协调服务器不开源,无法实现私有化部署,这种在一些严格的企业环境中无法容忍,或者你要做二次开发也基本没法实现,并且终端设备限制为20台。基于这些情况,出现开源版本的tailscale协调服务器项目headscale
  • headscale是tailscale的协调服务器开源版本,不限制设备数量,支持私有化部署,流量全部由自己控制
  • 协调服务器的作用为:
    • wireguard节点的公钥交换:
      • publicKey(NodeA) - > <- headscale server -> < -publicKey(NodeB)
    • Node客户端的虚拟ip分配工作
    • Node客户端之间的访问控制
    • 公开节点的广播路由,实现内网访问通过公开节点转发
  • headscale目前的核心功能为:
    • 节点注册:预共享秘钥接入headscale网络
    • 文件共享
    • 访问控制管理ACL
    • 支持ip段管理
    • 支持双栈 v4和v6
    • 路由广播:内网网关广播和网络出口节点广播
    • 授权临时节点
    • 自托管derp服务器

headscale客户端

  • 客户端实际使用的还是tailscale,tailscale客户端是由go编写的用户空间wireguard实现的,目前最新的tailscale客户端支持headscale的操作系统为:
    • Linux发行版本-支持
    • OpenBsd-支持
    • FreeBsd-支持
    • MacOS-支持
    • windows-支持
    • Android-支持
    • IOS-支持

hs小结:headscale是一开源的ts控制服务器,功能和ts基本一致,更适用于企业环境需要自托管网络的场景,比如sase的开发,异地办公组网等等(提一嘴-开发者能力真强。。貌似是欧洲航天局的技术人员)

扩展说明

headscale和tailscale的兼容性

  • 虽然headscale把tailscale闭源的协调控制器给重新实现了一遍,但并不影响ts对它的赞赏,官方的说法为:
    Headscale为Tailscale提供了一个有价值的补充:它可以帮助个人用户更好地了解Tailscale的工作原理以及如何在家中运行协调服务器。因此,在对可能影响headscale协调服务器工作的tailscale客户端进行更改时,Tailscale 会与 Headscale 维护人员合作,以确保持续的兼容性

tailscale的开源代码仓库:

  • 客户端守护进程代码仓库:https://github.com/tailscale/tailscale
  • gui代码仓库:在tailscale个人仓库中寻找即可,操作系统闭源的gui代码也闭源

headscale的开源代码仓库

  • https://github.com/juanfont/headscale