1. 程式人生 > >網路地址轉換NAT原理及應用-連線跟蹤--埠轉換*******************

網路地址轉換NAT原理及應用-連線跟蹤--埠轉換*******************

http://eqinping.blog.163.com/blog/static/28019142201331123427907/

這是做路由器的時候,學習網路地址轉換Network Address Translation後的一些理解整理,主要通過例項和圖表的方式展示了NAT的工作原理和每個階段的狀態。本文的NAT是基本於Linux下的iptables命令實現。

1 概述

1.1 簡介

NAT英文全稱是“Network Address Translation”,中文意思是“網路地址轉換”,它是一個IETF(Internet Engineering Task Force, Internet工程任務組)標準,允許一個整體機構以一個公用IP(Internet Protocol)地址出現在Internet上。顧名思義,它是一種把內部私有網路地址(IP地址)翻譯成合法網路IP地址的技術。因此我們可以認 為,NAT在一定程度上,能夠有效的解決公網地址不足的問題。

1.2 分類

NAT有三種類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網路地址埠轉換NAPT(Port-Level NAT)。

其中,網路地址埠轉換NAPT(Network Address Port Translation)則是把內部地址對映到外部網路的一個IP地址的不同埠上。它可以將中小型的網路隱藏在一個合法的IP地址後面。NAPT與 動態地址NAT不同,它將內部連線對映到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT裝置選定的埠號。

NAPT是使用最普遍的一種轉換方式,在HomeGW中也主要使用該方式。它又包含兩種轉換方式:SNAT和DNAT。

(1)源NAT(Source NAT,SNAT):修改資料包的源地址。源NAT改變第一個資料包的來源地址,它永遠會在資料包傳送到網路之前完成,資料包偽裝就是一具SNAT的例子。

(2)目的NAT(Destination NAT,DNAT):修改資料包的目的地址。Destination NAT剛好與SNAT相反,它是改變第一個資料懈的目的地地址,如平衡負載、埠轉發和透明代理就是屬於DNAT。

nat1

1.3 應用

NAT主要可以實現以下幾個功能:資料包偽裝、平衡負載、埠轉發和透明代理。

資料偽裝: 可以將內網資料包中的地址資訊更改成統一的對外地址資訊,不讓內網主機直接暴露在因特網上,保證內網主機的安全。同時,該功能也常用來實現共享上網。

埠轉發: 當內網主機對外提供服務時,由於使用的是內部私有IP地址,外網無法直接訪問。因此,需要在閘道器上進行埠轉發,將特定服務的資料包轉發給內網主機。

負載平衡: 目的地址轉換NAT可以重定向一些伺服器的連線到其他隨機選定的伺服器。

失效終結: 目的地址轉換NAT可以用來提供高可靠性的服務。如果一個系統有一臺通過路由器訪問的關鍵伺服器,一旦路由器檢測到該伺服器當機,它可以使用目的地址轉換NAT透明的把連線轉移到一個備份伺服器上。

透明代理: NAT可以把連線到因特網的HTTP連線重定向到一個指定的HTTP代理伺服器以快取資料和過濾請求。一些因特網服務提供商就使用這種技術來減少頻寬的使用而不用讓他們的客戶配置他們的瀏覽器支援代理連線。

2 原理

2.1 地址轉換

NAT的基本工作原理是,當私有網主機和公共網主機通訊的IP包經過NAT閘道器時,將IP包中的源IP或目的IP在私有IP和NAT的公共IP之間進行轉換。

如下圖所示,NAT閘道器有2個網路埠,其中公共網路埠的IP地址是統一分配的公共 IP,為202.20.65.5;私有網路埠的IP地址是保留地址,為192.168.1.1。私有網中的主機192.168.1.2向公共網中的主機 202.20.65.4傳送了1個IP包(Dst=202.20.65.4,Src=192.168.1.2)。

nat2

當IP包經過NAT閘道器時,NAT Gateway會將IP包的源IP轉換為NAT Gateway的公共IP並轉發到公共網,此時IP包(Dst=202.20.65.4,Src=202.20.65.5)中已經不含任何私有網IP的信 息。由於IP包的源IP已經被轉換成NAT Gateway的公共IP,Web Server發出的響應IP包(Dst= 202.20.65.5,Src=202.20.65.4)將被髮送到NAT Gateway。

這時,NAT Gateway會將IP包的目的IP轉換成私有網中主機的IP,然後將IP包(Des=192.168.1.2,Src=202.20.65.4)轉發到私有網。對於通訊雙方而言,這種地址的轉換過程是完全透明的。轉換示意圖如下。

nat3

如果內網主機發出的請求包未經過NAT,那麼當Web Server收到請求包,回覆的響應包中的目的地址就是私網IP地址,在Internet上無法正確送達,導致連線失敗。

2.2 連線跟蹤

在上述過程中,NAT Gateway在收到響應包後,就需要判斷將資料包轉發給誰。此時如果子網內僅有少量客戶機,可以用靜態NAT手工指定;但如果內網有多臺客戶機,並且各自訪問不同網站,這時候就需要連線跟蹤(connection track)。如下圖所示:

nat4

在NAT Gateway收到客戶機發來的請求包後,做源地址轉換,並且將該連線記錄儲存下來,當NAT Gateway收到伺服器來的響應包後,查詢Track Table,確定轉發目標,做目的地址轉換,轉發給客戶機。

2.3 埠轉換

以上述客戶機訪問伺服器為例,當僅有一臺客戶機訪問伺服器時,NAT Gateway只須更改資料包的源IP或目的IP即可正常通訊。但是如果Client A和Client B同時訪問Web Server,那麼當NAT Gateway收到響應包的時候,就無法判斷將資料包轉發給哪臺客戶機,如下圖所示。

nat5

此時,NAT Gateway會在Connection Track中加入埠資訊加以區分。如果兩客戶機訪問同一伺服器的源埠不同,那麼在Track Table里加入埠資訊即可區分,如果源埠正好相同,那麼在時行SNAT和DNAT的同時對源埠也要做相應的轉換,如下圖所示

nat6

3 Linux下NAT實現

3.1 netfilter/iptables模組

netfilter/iptables(IP資訊包過濾系統)是一種功能強大的工具,根據資料包過濾規則,對經過的網路資料包進行丟棄、改造、轉發等處理。

netfilter元件也稱為核心空間(kernelspace),是核心的一部分,由一些資料包過濾表組成,這些表包含核心用來控制資訊包過濾處理的規則集。

iptables元件是一種工具,也稱為使用者空間(userspace),它主要用來向用戶提供新增、修改、刪除核心中資料過濾表的介面。

3.2 基於netfilter/iptables的NAT

netfilter/iptables中的資料包過濾表有三種:filter、nat和mangle。

filter 表用於一般的資訊包過濾,它包含 INPUT 、 OUTPUT 和 FORWARD 鏈。

nat 表用於要轉發的資訊包,它包含 PREROUTING 、 OUTPUT 和 POSTROUTING 鏈。

如果資訊包及其頭內進行了任何更改,則使用 mangle 表。該表包含一些規則來標記用於高階路由的資訊包,該表包含 PREROUTING 和 OUTPUT 鏈。

filter 表用來過濾資料包,我們可以在任何時候匹配包並過濾它們。Mangle不經常使用還在開發當中。我們下面主要介紹Nat表來實現NAT功能。

(1)使用者使用iptables命令在使用者空間設定NAT規則。通過使用使用者空間iptables命令,可以構建使用者自己的定製NAT規則。所有規 則儲存在核心空間的nat表中。根據規則所處理的資訊包型別,將規則分組在鏈中。要做SNAT的資訊包被新增到POSTROUTING鏈中。要做DNAT 的資訊包被新增到PREROUTING鏈中。直接從本地出站的資訊包的規則被新增到OUTPUT 鏈中。

(2)核心空間接管NAT工作.做過NAT操作的資料包的地址就被改變了,當然這種改變是根據我們的規則進行的。屬於一個流的包只會經過這個表一 次。如果第一個包被允許做NAT或 Masqueraded,那麼餘下的包都會自動地被做相同的操作。也就是說,餘下的包不會再通過這個表,一個一個的被NAT,而是自動地完成。這就是我們 為什麼不應該在這個表中做任何過濾的主要原因。PREROUTING 鏈的作用是在包剛剛到達防火牆時改變它的目的地址,如果需要的話。OUTPUT鏈改變本地產生的包的目的地址。下圖是資料包穿越整個 netfilter/iptables的流程圖。

nat7

(3)NAT工作步驟:

DNAT:若包是被送往PREROUTING鏈的,並且匹配了規則,則執行DNAT或REDIRECT目標。為了使資料包得到正確路由,必須在路由之前進行DNAT。

路由:核心檢查資訊包的頭資訊,尤其是資訊包的目的地

處理本地程序產生的包:對nat表OUTPUT鏈中的規則實施規則檢查,對匹配的包執行目標動作。

SNAT:若包是被送往POSTROUTING鏈的,並且匹配了規則,則執行SNAT或MASQUERADE目標。系統在決定了資料包的路由之後才執行該鏈中的規則。


相關推薦

網路地址轉換NAT原理應用-連線跟蹤--轉換*******************

http://eqinping.blog.163.com/blog/static/28019142201331123427907/ 這是做路由器的時候,學習網路地址轉換Network Address Translation後的一些理解整理,主要通過例項和圖表的方式展示了N

網路地址轉換NAT原理應用【轉】

  (轉自:https://blog.csdn.net/xiaofei0859/article/details/6630467) 這是做路由器的時候,學習網路地址轉換Network Address Translation後的一些理解整理,主要通過例項和圖表的方式展示了NAT的工作原

Linux網路篇,ssh原理應用

一、對稱加密與非對稱加密    對稱加密: 加密和解密的祕鑰使用的是同一個.    非對稱加密: 非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰;簡稱公鑰和私鑰對稱加密     對稱加密的密碼強度高、較

詳解iptables防火墻SNAT、DNAT地址轉換工作原理使用

路由器 信息 nat nat技術 成了 客戶端 目標地址 init5 ima NAT簡介 NAT是將私有IP地址通過邊界路由轉換成外網IP地址,在邊界路由的NAT地址轉換表中記錄下這個轉換,當數據返回時,路由使用NAT技術查詢NAT轉換表,再將目標地址替換成內網用戶IP地址

資料庫連線原理應用

1、運作原理 在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用 JDBC直接訪問資料庫中的資料,每一次資料訪問請求都必須經歷建立資料庫連線、開啟資料庫、存取資料和關閉資料庫連線等步驟,而連線並開啟資料庫是一件既消耗資源又費時的工作,如果頻繁發生這種資料庫操作,系

130行程式碼實現BP神經網路原理應用舉例

    優化演算法是機器學習的一個重要組成部分,BP神經網路是深度學習的基礎,BP神經網路原理非常簡單,幾乎可以理解作是logistic迴歸的一種集合方式,在前面的博文中,筆者利用R語言實現了幾種優化演算法,本文以前面提到的粒子群演算法為工具,以神經網路的原理為基礎,實現了

NAT基本原理應用

原文出處:http://www.cnblogs.com/derrick/p/4052401.html?utm_source=tuicool&utm_medium=referral#undefined 原文出處:http://blog.csdn.net/leisur

數據庫原理應用——關系數據庫

block 關系數據庫 ces and 卡爾 svg 數據庫原理 -m 元組 關系數據結構 實體,實體間的聯系都是關系表示,用戶角度的邏輯結構就是二維表 關系:笛卡爾積的子集 關系操作集合 傳統集合操作:並、交、差、笛卡爾積 專門的關系運算:

python Ridge 回歸(嶺回歸)的原理應用

原理 blog 得到 one 技術 設置 fun src print 嶺回歸的原理: 首先要了解最小二乘法的回歸原理 設有多重線性回歸模型 y=Xβ+ε ,參數β的最小二乘估計為 當自變量間存在多重共線性,|X‘X|≈0時,設想|X‘X|給加上一個正常數矩陣(k>

數據庫原理應用(SQL Server 2016數據處理)【上海精品視頻課程】

應用 原理 sql 信息無處不在,數據處理無處不用。物質、信息、能源已經成為人類生存和發展的重要保障。數據庫的應用廣度深度及建設規模已經成為衡量一個國家信息化程度的一項重要標誌。數據庫技術是計算機學科的一個重要分支,反映了數據管理的最新技術。數據庫技術與計算機網絡、人工智能一起被稱為計算機三大

selenium + python自動化測試unittest框架學習(一)selenium原理應用

自動化 網上 下載安裝 src .cn 基礎 client cnblogs pytho unittest框架的學習得益於蟲師的《selenium+python自動化實踐》這一書,該書講得很詳細,大家可以去看下,我也只學到一點點用於工作中,閑暇時記錄下自己所學才能更加印象深刻

VUE -- JSONP的誕生、原理應用實例

some body 發送 我們 att box 想要 random ati 問題: 頁面中有一個按鈕,點擊之後會更新網頁中的一個盒子的內容。 Ajax可以很容易的滿足這種無須刷新整個頁面就可以實現數據變換的需求。 但是,Ajax有一個缺點,就是他不允許跨域請求資源。

MyBatis的原理應用

sql 關系 str dma 事務管理器 space ransac 文件的 讀取 MyBatis是一個基於Java的持久層ORM關系映射框架,是一種支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。它避免了幾乎所有的 JDBC 代碼和手工設置參數以及抽取結果集。

SpringAOP原理應用

call span 簡述 ... 開始 spring源碼 gpo 業務 eat SpringAOP原理及應用 一、背景 什麽是AOP,英文直譯是Aspect-OrientedProgramming,面向方面編程。從名字也可以看出,如果把我們代碼的執行過程

數據庫原理應用-數據庫管理系統 DBMS

元組 並且 大小 持久 currency 小型 解決方法 結果 表達式 2018-02-20 14:35:34 數據庫管理系統(英語:database management system,縮寫:DBMS) 是一種針對對象數據庫,為管理數據庫而設計的大型電腦軟件管理系統。具有

Docker五種存儲驅動原理應用場景和性能測試對比

Docker 存儲驅動 Docker最開始采用AUFS作為文件系統,也得益於AUFS分層的概念,實現了多個Container可以共享同一個image。但由於AUFS未並入Linux內核,且只支持Ubuntu,考慮到兼容性問題,在Docker 0.7版本中引入了存儲驅動, 目前,Docker支持AUFS

奇異值分解(SVD)原理應用

4.4 存在 post 定性 tro ant 二維 5.1 spl 一、奇異值與特征值基礎知識: 特征值分解和奇異值分解在機器學習領域都是屬於滿地可見的方法。兩者有著很緊密的關系,我在接下來會談到,特征值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特征

Message Loop 原理應用

now() ret 有一個 cocoa 等待 導致 current nbsp 多線程通信 此文已由作者王榮濤授權網易雲社區發布。歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。Message loop,即消息循環,在不同系統或者機制下叫法也不盡相同,有被叫做event l

關於move_base的原理應用

原理: (1)ROS探索總結(十四)——move_base(路徑規劃) (2)ROS專題----導航功能包navigation基礎彙總 某些引用及程式碼: (1)學習,move_base包 (2)ROS 教程之 navigation : 用 move_base 控制自己的機器人(

RC電路簡介,RC串並聯電路的工作原理應用

RC電路簡介,RC串並聯電路的工作原理及應用   RC電路全稱Resistance-Capacitance Circuits。一個 相移電路(RC電路)或稱 RC濾波器、 RC網路, 是一個包含利用電壓源、電流源驅使電阻器、電容器運作的電路。一個最簡單的RC電路是由一個電容器和