Linux 中的 DHCP 单播数据包处理

Linux 中的 DHCP 单播数据包处理

我正在尝试捕获并处理来自 ERSPAN 会话的 DHCP 数据包(在第三方分析应用程序中),但无法做到这一点。有一个 PHY 接口接收 ERSPAN 流量,还有一个 erspan 类型接口用于获取解封装的数据包(ip link add inspan type erspan seq key 10 local 10.171.165.65 erspan_ver 1)

我正在使用 nftables 来匹配和处理最简单的规则:

table netdev inspan {
  chain catch {
    type filter hook ingress device "inspan" priority filter ; policy accept;
    iifname "inspan" udp dport 67 counter meta nftrace set 1 accept
  }
}

仅显示广播数据包(ip daddr 255.255.255.255):

# nft monitor trace

trace id 6fd1132b inet filter input packet: iif "inspan" ether saddr 00:1a:64:33:8d:fa ether daddr ff:ff:ff:ff:ff:ff ip saddr 0.0.0.0 ip daddr 255.255.255.255 ip dscp cs0 ip ecn not-ect ip ttl 128 ip id 20986 ip protocol udp ip length 328 udp sport 68 udp dport 67 udp length 308 @th,64,96 0x1010600d5d272d200000000
trace id 6fd1132b inet filter input rule iifname "inspan" udp dport 67 counter packets 0 bytes 0 meta nftrace set 1 accept (verdict accept)

而所有单播数据包(存在于 PHY 上封装的 ERSPAN 流量中)都在此跟踪中缺失,就像它们在 PHY 和 inspan 之间的某个地方被消耗(并丢弃)一样。

请注意,所有其他内容都会出现在 inspan 中(使用 tcpdump 查看时)- 任何其他 TCP、UDP 等,除了 DHCP uincast,并且它不依赖于链中所有接口的 promisc 设置。

系统看起来很干净。这是 Ubuntu 22.04,但没有任何 DHCP 服务器、DHCP 客户端、netplan、ifupdown 和其他与 DHCP 相关的东西;systemd-networkd 完全禁用(出于测试目的,我正在手动配置网络)。

知道单播 DHCP 数据包丢失在哪里吗?对我来说,内核中的某些东西似乎捕获了这些数据包并将其丢弃,因为它们不是针对此主机的。

谢谢。

相关内容