我正在为微 Controller 编写 IPsec 实现,我想使用运行 Debian Lenny 的标准 Linux 机器对其进行测试。两个设备都应该在隧道模式下使用 IPsec ESP 来保护它们之间的通信。使用 setkey
手动设置 key .没有(或至少应该没有)用户空间程序参与处理 IPsec 数据包。现在我想看看我创建的数据包是如何被 Linux 内核处理的。要查看原始数据包,我使用 tcpdump
捕获它们并使用 wireshark
分析它们.
最佳答案
您可以检测 XFRM(或者可能是 ipv4/esp.c
)内核代码以在正确的位置打印出调试消息。
例如,在 net/ipv4/esp.c
存在一个函数 esp_input()
它有一些错误情况,但你会看到最有趣的东西在 xfrm/*.c
中。代码。
也就是说,我在将自定义 IPSec 与 Linux 互操作时没有问题。遵循 43xx 规范并通过 wireshark 验证数据包正确输出似乎做得很好。如果您遇到问题并且不想检测内核,那么您可以设置 iptables 规则并计算每个点的(各种类型的)数据包数量。
最后,确保您确实添加了安全策略 (SP) 以及安全关联 (SA) 并正确设置了防火墙规则。
关于linux-kernel - Linux 内核中的 IPsec - 如何弄清楚发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935420/