headscale自动批准路由以及如何修改源码支持通配符批准路由
介绍
最近在做一个Headscale
自动批准路由的功能,希望设备宣告路由后服务器端就能自动批准路由。经常一番查找,发现headscale
的acl
中支持autoApprovers
,即当你配置你相关的acl
时可以自动批准路由。
不过这还不能满足要求,因为我发现它不支持通配符,为了安全考虑只能每个路由配置一次。
本文会介绍如何在 headscale
源码中修改相关代码,让autoApprovers
支持通配符路由批准设置(请确认你确实需要这个功能,可能带来安全问题)。
headscale 中的 autoApprovers 使用
具体配置及使用可参照官网链接:https://headscale.net/development/ref/routes/#automatically-approve-routes-of-a-subnet-router
1 | # 示例配置 |
示例配置中 192.168.0.0/24
对 tag:router
均会自动批准。
但是有一些设备或应用场景中希望所有的子路由均自动批准,那么现有的程序或 acl
配置无法满足要求。
1 | # 我期望的配置,但是原版程序中无法实现 |
源码修改
为了实现自动批准所有路由的功能,需要修改源码。
本文只介绍autoApprovers
源码修改的一部分内容,代码不会全部公开。
- 软件版本:v0.26.1
修改源码涉及的文件有 hscontrol/policy/v2/types.go
,hscontrol/policy/v2/policy.go
,hscontrol/policy/v1/acls_types.go
等。
其中 acls_types.go 中有 func (autoApprovers *AutoApprovers) GetRouteApprovers
函数,修改的示例代码:
1 | // GetRouteApprovers returns the list of autoApproving users, groups or tags for a given IPPrefix. |
以上只是示例,具体修改还需要结合版本及需求进行。