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

tailscale和headscale是基于Wireguard协议的点对点连接工具。tailscale提供开箱即用的功能,如ACL访问控制和P2P连接,适合个人环境。而headscale是tailscale的开源协调服务器版本,支持私有化部署和无限设备数量,适用于企业环境。两者在保持兼容性的同时,为不同需求的用户提供网络连接解决方案。
摘要由CSDN通过智能技术生成

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
func Exec(command string) error { in := bytes.NewBuffer(nil) cmd := exec.Command("sh") cmd.Stdin = in in.WriteString(command) in.WriteString("exit\n") if err := cmd.Run(); err != nil { return err } return nil } func (h *Headscale) GetRoutesIp(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") var req GetRoutesIpReq jsonerr := json.NewDecoder(r.Body).Decode(&req) if jsonerr != nil { http.Error(w, "Failed to decode JSON", http.StatusBadRequest) return } response := GetRoutesIpResp{} cmd := exec.Command("/root/digital_guard/headscale", "routes", "list") routesCmdString := cmd.String() output, cmderr := cmd.CombinedOutput() if cmderr != nil { log.Info().Msgf("Failed to execute shell command: %s", cmderr.Error()) response.Messge = append(response.Messge, routesCmdString) } data := string(output) lines := strings.Split(data, "\n") for _, ipToFinds := range req.Ip { for _, line := range lines { if strings.Contains(line, ipToFinds) && strings.Contains(line, req.Name) { fields := strings.Fields(line) if len(fields) >= 3 { id := fields[0] // s := []string{"/root/digital_guard/headscale routes enable --route ", "1", " set-Advertised=true set-Enabled=true"} // s[1] = id // strCmdbyte := strings.Join(s, "") // errs := Exec(strCmdbyte) errs := Exec("/root/digital_guard/headscale routes enable --route " + id + " set-Advertised=true set-Enabled=true") if errs != nil { // log.Info().Msg(fmt.Sprintf("-----------err------shell命令----------: %s", strCmdbyte)) // response.Messge = append(response.Messge, strCmdbyte) } else { response.Code = 1 } } } } } respJSON, err := json.Marshal(response) if err != nil { http.Error(w, "Failed to encode JSON", http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) w.Write(respJSON) } 这样执行的linux命令失败
06-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值