
答案1
數據包透過TEE克隆,被設定為不被 conntrack 跟踪,阻止被 再次重複,並透過發射本地輸出路由堆疊的一部分,因此首先由 raw/OUTPUT 看到(您也可以參考此Netfilter 和通用網路示意圖中的封包流:這將是在本地流程之後)。如果先前對路由資料包進行了複製(例如,在 mangle 或原始 PREROUTING 中),這將是相同的。這使得事情變得困難(但是不是不可能) 接受額外的處理,例如額外的 nat,因為它不會被跟踪,並且很難將其與原始的區分開來。
這是一個例子痕跡(使用 iptables-legacy 的版本)在類似於 OP 的設定中捕獲從 192.168.0.2 到 8.8.8.8 進行的 ping:捕獲是在路由器上使用iptables -t raw -A OUTPUT -j TRACE
.原本的路由的資料包不會出現,因為它必須從原始/預路由中捕獲,從而驗證上面的解釋,告訴它是從輸出完成的。
TRACE: raw:OUTPUT:policy:2 IN= OUT=eth1 SRC=192.168.0.2 DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=39209 DF PROTO=ICMP TYPE=8 CODE=0 ID=3070 SEQ=1
TRACE: mangle:OUTPUT:policy:1 IN= OUT=eth1 SRC=192.168.0.2 DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=39209 DF PROTO=ICMP TYPE=8 CODE=0 ID=3070 SEQ=1
TRACE: mangle:POSTROUTING:policy:2 IN= OUT=eth1 SRC=192.168.0.2 DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=39209 DF PROTO=ICMP TYPE=8 CODE=0 ID=3070 SEQ=1