4

我正在为微控制器编写 IPsec 实现,我想使用运行 Debian Lenny 的标准 Linux 机器对其进行测试。两个设备都应在隧道模式下使用 IPsec ESP 保护它们之间的通信。键是使用手动设置的setkey。处理 IPsec 数据包不涉及(或至少应该不涉及)用户空间程序。现在我想看看我创建的数据包是如何被 Linux 内核处理的。要查看原始数据包,我使用捕获它们tcpdump并使用wireshark.

  • 获取有关 IPsec 处理的调试信息的最佳方式是什么?
  • 如何确定内核是否接受了数据包?
  • 如何查看丢包的原因?
4

1 回答 1

3

您可以检测 XFRM(或者也许是ipv4/esp.c)内核代码以在正确的位置打印出调试消息。

例如,net/ipv4/esp.c存在一个esp_input()有一些错误情况的函数,但您会看到最有趣的东西在xfrm/*.c代码中。

也就是说,我没有遇到与 Linux 互操作自定义 IPSec 的问题。遵循 43xx 规范并通过wireshark 验证数据包是否正确输出似乎做得很好。如果您遇到问题并且不想检测内核,那么您可以设置 iptables 规则并计算每个点的(各种类型)数据包的数量。

最后,确保您确实添加了安全策略 (SP) 以及安全关联 (SA) 并正确设置了防火墙规则。

于 2011-10-28T22:27:07.017 回答