我在netfilter框架中有兩個鉤子。使用Netfilter封裝和解封IPv4包
一個在NF_IP_PRE_ROUTING
用於傳入數據包,另一個在NF_IP_LOCAL_OUT
用於傳出數據包。
發出的數據包:
現在,所有的IPv4數據包從特定的IP地址發送出去,被封裝在另一個IPv4-UDP數據包。
我使用pskb_expand_head
API來獲得更多的封裝空間。然後,用ip_route_output_key
找到合適的rtable
。使用rtable
,我重新分配skb->dst
和skb->dev
。然後,我會繼續使用NF_ACCEPT
接受數據包。
skb_dst_drop(skb);
skb_dst_set(skb, &rt->dst);
skb->dev = skb_dst(skb)->dev;
傳入數據包:
現在,所有封裝的數據包接收和基於端口號來標識。 並且,封裝(IP+UDP+XYZ HEADER)
被拉出。並且類似於傳出數據包 我使用ip_route_output_key
來獲取rt(rtable)。
使用rtable重新分配skb->dst
和skb->dev
。然後我接受與NF_ACCEPT
數據包所以,碰巧我也收到碎片整理傳入數據包,我有點困惑,他們應該如何處理。
我想整理磁盤碎片整理,然後收到整個數據包。 任何想法。我一直在經歷可用
ip_defrag(skb, IP_DEFRAG_LOCAL_DELIVER);
功能但這似乎將用於在NF_IP_LOCAL_IN
階段組裝包,但我想在NF_IP_PRE_ROUING
階段的組裝包。
任何幫助,將不勝感激。
您有一段我標記爲* Duplicated Text *的段落 - 如果無意中包含,則應該刪除該段落。請幫我幫助你做出一個好問題。 –
嗨jonathon,謝謝我糾正了這一點。 – innosam