Linux NAT原始碼分析

2021-09-24 10:00:19 字數 1520 閱讀 7797

kernel原始碼: linux 3.18.21

dnat和snat最終都會呼叫nf_nat_ipv4_fn

只有每條連線的第乙個包會經過nat表,後面的包直接根據連線跟蹤進行**

snat dnat masquerade等target,匹配上的時候最終都會呼叫nf_nat_setup_info函式,這個裡面會修改連線跟蹤裡面的reply tuple。

該函式的功能主要是根據連線跟蹤中的資訊去修改skb中的ip位址和埠等資訊。

syn包:

(1)prerouting點:   dnat, dir非reply, 所以statusbit是ips_dst_nat, ct->status沒有snat, 直接accept,不呼叫

l3proto->manip_pkt

(2)postrouting點:  snat, dir非reply,

所以statusbit是ips_src_nat, ct->status經過masqrade規則後有了snat, 呼叫l3proto->manip_pkt進行snat資訊修改

syn + ack包:

(1)prerouting點:   dnat, dir reply, 所以statusbit是ips_src_nat, ct->status有snat,  呼叫l3proto->manip_pkt進行資訊修改

(2)postrouting點:  snat, dir reply,

所以statusbit是ips_dst_nat, ct->status有snat, 所以直接accept,不進行位址轉換

ack包:

(1)prerouting點:   dnat, dir非reply, 所以statusbit是ips_dst_nat, ct->status有snat,  直接accept,不呼叫l3proto->manip_pkt進行資訊修改

(2)postrouting點:  snat, dir非reply, 所以statusbit是ips_src_nat, ct->status有snat, 呼叫l3proto->manip_pkt進行資訊修改

unsigned int nf_nat_packet(struct nf_conn *ct,

enum ip_conntrack_info ctinfo,

unsigned int hooknum,

struct sk_buff *skb)

return nf_accept;

}

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...