在網路安全監控、流量分析與合規稽核場景,常需將多條連結的封包鏡像複製至分析設備,或將多源流量聚合至單一監控介面。本文剖析核心模組 MIRROR 的架構設計、參數解析演算法與關鍵程式碼實作邏輯。
模組運作於核心空間,透過 netfilter 或 tc 掛載點攔截封包,依使用者態下發的規則執行複製或聚合動作,再經由虛擬/實體網卡送出。

使用者態透過 insmod 參數或 sysfs 下發規則字串,格式:
eth1@eth2_eth1@eth3_eth1/eth4@eth5
語意解析:
eth1@eth2、eth1@eth3:鏡像複製 — 來自 eth1 的封包複製送往 eth2 與 eth3。eth1/eth4@eth5:流量聚合 — 來自 eth1 與 eth4 的封包聚合送往 eth5。分隔符:_ 分隔獨立規則,@ 區分來源/目的,/ 表示多來源聚合。
module_param_string() 接收規則字串。_ 切分為多條子規則,逐一送入 option_setup()。@、/ 判斷動作類型(複製/聚合),解析來源/目的介面名稱。dev_get_by_name() 確認網卡存在,取得 net_device 指標。net_device*、計數器等。NF_INET_PRE_ROUTING 或 tc ingress 掛點:
skb_copy() 或 skb_clone() → 修改 skb->dev 為目的介面 → dev_queue_xmit() 送出。skb->dev 為聚合介面 → 送出。

NETIF_F_SG/NETIF_F_FRAGLIST,優先用 skb_clone() 避免資料拷貝。rcu_read_lock(),寫入端 synchronize_rcu(),確保無鎖高效讀取。CAP_NET_ADMIN 的進程下發規則。# 載入模組並下發規則
insmod mirror.ko rules="eth1@eth2_eth1@eth3_eth1/eth4@eth5"
# 查看規則與統計
cat /sys/module/mirror/parameters/rules
cat /proc/net/mirror/stats
# 封包捕獲驗證
tcpdump -i eth2 -nn
tcpdump -i eth5 -nn
module_param,支援動態增刪規則無需重載模組。