NF_HOOK conntrack分析[NAT篇]
一 NF_HOOK 之NAT簡介
上一節主要是對coontrack的流程和資料模型進行了分析,核心協議棧中有一個重要的應用就是NAT。藉助於核心的NAT功能可以輕鬆的通過一條命令搭建NAT伺服器。NAT功能就是在conntrack的基礎之上實現的基本應用。
下圖是NAT在協議棧的處理流程。
通過註冊相應的HOOK函式,netfilter會在相應的鉤子函式入口呼叫相應的處理函式,完成NAT的處理。
二 NAT舉例
搭建一臺linux的路由器,可以簡單的使用下面兩個命令
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
網路模型如下圖:
為了簡單化我們的分析,以UDP的NAT穿透舉例,以PC發往8.8.8.8的63埠為例,源埠號為800,如下圖
經過NAT轉換後,變為如下的包(源埠沒有改變的情況)
伺服器迴應的包如下
在路由器收到迴應包後,再進行NAT的轉換,將包發給PC
這樣一個UDP的NAT連線就建立完畢,並在核心中建立了相應的NAT穿透,伺服器和PC可以通過這個穿透自由的傳送資料了。
三 NAT的核心實現
以上圖為例,核心是如何完成NAT的呢。
在PC的包發往路由器後,路由器對包進行路由和轉發,然後到達POSTROUTING連結串列。此時執行
在masquerade_tg做完相應的結構體資訊採集之後執行nf_nat_setup_info函式。
在conntrack增加下面增加nat結構體,這樣一個conntrack就增加如下:
curr_tuple由reply
tuple->src.u3.ip = 192.168.1.2;
tuple->dst.u3.ip = 8.8.8.8;
new_tuple,根據NAT range更改源地址,新的
new_tuple->src.u3.ip =3.3.3.3
new_tuple->dst.u3.ip = 8.8.8.8
經過此處理之後相應的結構體變為如下
剩下的就是將nat 結構體新增到Hash表中去。
最後退出將包修改完之後,傳送出去。
當 包到達的時候,執行
nf_nat_fn進行相應的檢查和結構體的完善之後,呼叫nf_nat_packet(ct, ctinfo, hooknum, skb);,
最後通過manip_pkt,將包修改成
最後轉發到PC,這樣一個UDP包的穿透實現就完成了。對於TCP的包處理,相對來說複雜一些,可以對比UDP分析一下,這裡就不做詳細的分析了。
轉自 http://blog.sina.com.cn/s/blog_694f2ae70101albl.html
相關文章
- iptables深入解析:nat篇
- tcpdump抓包分析NAT ping不通TCP
- 4、NAT
- kernel: ip_conntrack: table full, dropping packet.
- error: "net.ipv4.ip_conntrack_max" is an unknown keyError
- WireGuard 教程:使用 DNS-SD 進行 NAT-to-NAT 穿透DNS穿透
- NAT穿透工具pwnat穿透
- 組網、nat配置
- Conntrack 監控,別等故障了再回來加監控
- 【挖掘篇】:文字分析
- NAT與內網穿透內網穿透
- 再論NAT和穿透穿透
- Linux NAT轉發Linux
- 思科-Seven【NAT應用篇】!動態與靜態路由的區別和特點~~~路由
- 一文告訴你什麼是NAT,為什麼需要NAT
- 2020-10-26 實驗五:NAT工作原理分析與驗證
- IPv6的NAT原理
- 建立iptables NAT規則(轉)
- 用iptables實現NAT(轉)
- NAT iptables防火牆(script)(轉)防火牆
- OkHttp使用分析—WebSocket篇HTTPWeb
- [日誌分析篇]-利用ELK分析jumpserver日誌-日誌拆分篇Server
- 網路地址轉換 NAT 配置
- LVS(二)NAT模型配置模型
- Hyper-V部署NAT教程(RStack)
- OpenStack 的NAT解決辦法
- NAT(網路地址轉換)(三)
- NAT(網路地址轉換)(四)
- NAT(PAT)與埠對映(轉)
- Linux ARP代理 與 NATLinux
- NAT-網路地址轉換
- 如何用iptables實現NAT(zt)
- 淺析NAT的型別-ZT型別
- 綜合實驗,策略路由(BFD,NAT)路由
- Redux原始碼分析–Reducer篇Redux原始碼
- Redux原始碼分析--bindActionCreators篇Redux原始碼
- 一篇statspack分析例子
- P2P技術(一):NAT