Linux での DHCP ユニキャスト パケットの処理

Linux での DHCP ユニキャスト パケットの処理

ERSPAN セッションから DHCP パケットをキャッチして処理しようとしていますが (サードパーティの分析アプリで)、できません。ERSPAN トラフィックを受信する PHY インターフェイスと、カプセル化解除されたパケットを取得するための 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 を使用して確認する場合)。DHCP uincast を除く他のすべての TCP、UDP などであり、チェーン内のすべてのインターフェースの promisc 設定には依存しません。

システムはクリーンなようです。これは Ubuntu 22.04 ですが、DHCP サーバー、DHCP クライアント、netplan、ifupdown、その他の DHCP 関連のものは使用されていません。systemd-networkd は完全に無効になっています (テスト目的で、ネットワークを手動で構成しています)。

ユニキャスト DHCP パケットが失われた場所について何か考えはありますか? 私の場合、これらのパケットはこのホストを対象としていないため、カーネル内の何かがこれらのパケットをキャッチしてドロップしているように見えます。

ありがとう。

関連情報