linux-kernel - Linux 内核中的 IPsec - 如何弄清楚发生了什么

标签 linux-kernel ipsec

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

  • 获取有关 IPsec 处理的调试信息的最佳方法是什么?
  • 如何判断数据包是否被内核接受?
  • 如何查看数据包被丢弃的原因?
  • 最佳答案

    您可以检测 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/

    相关文章:

    c - 为什么 Linux 内核无锁链表有 head 和 node 结构?

    c - 读取到 procfile 末尾时遇到问题

    voip - 为什么 SIP 使用 TLS

    linux - xfrm_replay_state_esn 字段是什么意思?

    android - 如何检查内核是用于android还是linux?

    linux - 如何使用 QEMU 和 KGDB 调试 Linux 内核?

    security - 我如何在没有 HTTPS 的情况下提供一些安全性?

    c# - 使用 C# 在 Windows Server 上添加和删除 IPSec 策略有哪些选项?

    c - 编译 ipsec 工具时出错...PATH_IPSEC_H 实际上是什么意思?

    sockets - Linux套接字硬件时间戳