我有一些与 Linux 内核的 IPsec 实现及其用户空间接口相关的问题(疑问)。
- 最大的问题是 Linux 内核 IPsec 实现的实际官方项目是哪一个?据我所知,该实现是 Kame 项目的一个分支,但一位朋友说这不是真的。他们的官方网站和 repo 在哪里?
- 在内核文档源的哪里我可以找到一些相关的说明?
- 它最常使用哪个用户空间前端?ip-tools 还是 iproute2 包?这两个方法是否相同,或者其中一个开销更大?
- 据我所知,iproute2 IPsec 传输模式的教程与用于加载配置文件的“setkey”实用程序有关。“setkey”是否真的用于 iproute2 包,还是我被误导了?“setkey”是否与 ip-tools 中的“racoon”粘在一起,或者它是一个用于配置加载的通用应用程序?“setkey”实际上做什么(我对此非常困惑)?
答案1
- 自 2.6 版 Linux 内核中集成的 IPsec 堆栈(NETKEY)最初基于 KAME 堆栈(至少在 API 方面)。源代码是内核存储库,其中主要组件位于
net/xfrm
文件夹中,包括 Netlink/XFRM 配置接口的实现。替代和标准化(但有所扩展)PF_KEYv2接口实现位于net/key
文件夹中。 - 没有太多文档。但请检查
Documentation/networking
文件夹。 - 如果你手动配置 IPsec SA 和策略(手动键入),我建议iproute2。它使用更强大的 Netlink/XFRM 接口,大多数发行版默认安装该包。但通常你会使用用户空间提供的自动密钥IKE守护进程(如 strongSwan、Open/libreswan 或 racoon (ipsec-tools)),这样您就不必手动安装 SA 和策略,并且您可以在 IKE 期间通过 Diffie-Hellman 获得临时加密/完整性密钥。还可以定期自动协商新密钥,这称为重新密钥。
setkey
由ipsec 工具手动键入包,与iproute2封装。使用iproute2您可以使用ip xfrm
命令手动配置 SA 和策略。这两个命令都直接与 SAD 和 SPD 交互(请参阅RFC 4301) 在内核中手动管理 IPsec SA 和策略。与其他基于 BSD 的工具setkey
一样racoon
,它使用 PF_KEYv2 接口,因此功能不如命令强大ip xfrm
。例如,在 Linux 上,无法使用 PF_KEYv2 配置扩展序列号或标记。