You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改数据包目的MAC与IP为本地网卡地址后nftables日志消失的原因排查

修改数据包目的MAC与IP为本地网卡地址后nftables日志消失的原因排查

我来帮你拆解这个问题,核心原因主要和数据包的处理流程以及校验和有效性有关,咱们一步步说:

  • 数据包校验和错误被内核提前丢弃
    你在netdev家族的ingress链里修改了IP目的地址,但没同步更新IP头部的校验和。Linux内核处理IP数据包时,第一步就会校验IP头部的校验和是否合法——如果校验和不匹配,内核会直接把数据包丢掉,根本不会让它进入IP层的后续处理流程(包括你在ip filter表prerouting链设置的日志规则)。
    解决这个问题很简单,只要在修改IP地址的规则末尾加上csum update,让nftables自动帮你更新IP校验和就行:

    ether daddr set c4:00:ad:99:67:c7 ip daddr set 192.168.10.120 csum update
    
  • 数据包处理路径的变化(校验和正确后的情况)
    没加netdev规则时,数据包是要被路由器转发的:从enp1s0进来,经过ip filter prerouting链(触发你的日志),路由决策判定为转发,走forward链后从enp2s0发出去。
    加了netdev规则后,你把数据包的目的IP改成了本机enp1s0的IP(192.168.10.120),此时路由决策会认为这个包是发给本机的,处理路径就变成了:netdev ingress → IP层校验(合法的话) → ip filter prerouting(这时候应该能触发日志) → ip input链 → 交给本地协议栈处理。但如果校验和错误,后面这些流程都走不到,自然看不到日志。

另外提个小细节:你修改以太网目的MAC的操作其实是多余的——数据包本来就是从enp1s0接收的,它的目的MAC本来就是enp1s0的MAC地址(c4:00:ad:99:67:c7),这个修改不会有任何实际效果,反而多了没必要的处理步骤。

备注:内容来源于stack exchange,提问作者guenhter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:45:29