nftables链的priority是主动组织同一hook下不同链执行顺序的核心机制,值越小越早执行,仅在同一hook内生效,不跨协议族、table或影响iptables-legacy规则。

nftables 的 chain priority 不是用来“解决冲突”的补救手段,而是用来**主动组织执行顺序**的核心机制。所谓“与传统旧模块冲突”,本质是旧 iptables 规则(或 Docker、某些网络服务自动注入的规则)仍存在于内核中,而 nftables 无法覆盖或协调它们——priority 本身不消除冲突,但能帮你绕开、隔离或接管关键 hook 点。
明确 priority 的作用边界
priority 是整数,值越小越早执行。它只在同一 hook(如 input、forward)下对 不同 chain 排序,不跨协议族、不跨 table,也不影响 iptables-legacy 规则的执行位置。关键点:
- 同一 hook 下,priority 值重复 → 后创建的 chain 被静默拒绝(不会报错,但 chain 和其下规则不生效)
- priority 不控制规则在 chain 内部的顺序——那是 add/insert 位置决定的
- iptables-legacy 规则默认运行在 priority -200(raw)到 300(security)之间;nftables 若想“抢占先机”,需用更小值(如 -400)
应对旧模块干扰的三种实用策略
不是硬刚 priority 数值,而是分场景选择接管方式:
AI 舌诊面诊问诊医疗系统 + 诊疗商城系统源码是一套结合 AI 辅助诊断与商品转化的健康类程序,基于浩创云、ThinkPHP(PHP)开发,支持微信服务号与 H5 端,适合做中医舌诊面诊问答、健康建议推送以及配套诊疗商品的运营。
-
完全接管 input/forward:用更低 priority 创建 filter 链
例如:nft add chain inet filter early_input { type filter hook input priority -400 \; policy drop \; }
这样你的规则最先匹配,可提前放行可信流量或丢弃扫描包,避免被后续旧规则干扰 -
隔离容器流量:为 docker0 单独建链 + 独立 priority
禁用 Docker 的 iptables 后,显式添加:nft add chain inet filter docker_forward { type filter hook forward priority 100 \; }
再写规则匹配 iifname "docker0",把容器转发逻辑从主机 filter 链中剥离,互不干扰 -
兼容共存:避开已占用 priority 区间
先运行nft list chains,看当前 input hook 上已有哪些 priority(比如 -300、0、150);新链就选未被占用的值,如 -250 或 50,不争不抢,各行其道
验证是否真正生效
光加 chain 不代表它在工作。必须逐层确认:
- 查 table 存在:
nft list tables - 查 chain 已加载且参数匹配:
nft list chain inet filter early_input(注意输出中是否有hook input priority -400) - 查规则是否进入内核:
nft list ruleset -a -n(带 handle 和数字地址,无 DNS 解析干扰) - 查内核是否拒绝:
dmesg | tail -10 | grep nf_tables,出现File exists就是 priority 冲突
priority 是 nftables 的调度开关,不是万能胶。真正解决问题,靠的是清晰的分层设计:协议族选 inet、table 做命名空间、chain 按功能+priority 划域、规则按需挂载。旧模块若还在,优先清空或禁用,而不是靠调高 priority 去盖过它。

















