傳統 iptables 基於 Netfilter 串行匹配,多核時代性能受限。本文提出利用 Linux 路由表(FIB)擴展實現訪問控制:將源 IP 與目的 IP 路由項關聯,通過 Action 節點表達「源→目的」許可/拒絕/NAT 等動作,支持無鎖並行查找,大幅提升轉發性能。
struct nf_action_node {
struct hlist_node nf_dst; // 掛入目的路由項 Action 鏈
struct hlist_node nf_src; // 掛入源路由項 Action 鏈
struct nf_fib_node *dst_node; // 反向指針,優化查找
struct nf_fib_node *src_node;
int extra; // 擴展字段(動作類型、參數等)
};
dst_node 指針直接比對)。| 維度 | iptables (Netfilter) | 路由表 ACL |
|---|---|---|
| 匹配模式 | 串行逐條 | 雙向 LPM 並行 |
| 多核擴展性 | 差(鎖競爭) | 優(RCU 無鎖讀) |
| 規則順序敏感 | 是 | 否(集合語義) |
| 動作表達力 | 豐富(模塊化) | 可擴展(extra 字段) |
此設計展示了「將業務邏輯映射到內核核心數據結構」的系統思維,是高性能網絡軟件開發的經典范式。