《深入理解OpenStack Neutron》—2.7 iptables

      網友投稿 881 2025-03-31

      2.7 iptables

      iptables與前文介紹的tap/tun等不同,它并不是一個網絡設備。不過它們又有相同點:都是Linux的軟件。通過iptables可以實現防火墻、NAT等功能,不過這句話也對,也不對。說它對,我們確實是通過iptables相關的命令行,實現了防火墻、NAT的功能;說它不對,是因為iptables其實只是一個運行在用戶空間的命令行工具,真正實現這些功能的是運行在內核空間的netf?ilter模塊。

      它們之間的關系如圖2-15所示。

      我們不必太在意這個圖是什么意思,那樣有點偏離主題,只需有個直觀的感覺即可。本節所要描述的內容位于圖中“iptables命令”方框。

      《深入理解OpenStack Neutron》—2.7 iptables

      iptables內置了三張表:f?ilter、nat和mangle。

      f?ilter和nat顧名思義,是為了實現防火墻和NAT功能而服務的。mangle,翻譯成漢語是“亂砍;損壞;用軋布機砑光”等意思,它在這里指的是“主要應用在修改數據包內容上,用來做流量整形”。

      iptables還內置了另外2張表raw和security,這里不詳細介紹了。

      iptables內置的既是三張表,也是三條鏈(chain),或者換個角度說,iptables內置的是三種策略(policy),而這些策略,是由不同規則(rule)串接而成。什么叫規則呢?我們以防火墻為例,講述一條規則:

      iptables -A INPUT -i eth0 -p icmp -j ACCEPT

      這條規則表達的意思是:允許所有從eth0端口進入且協議是ICMP的報文可以接受(可以進入下一個流程)的。

      這就是一條規則,至于iptables的命令行格式(語法)只是一個表象,它的本質是對進入的IP報文進行說明,如:符合什么樣的條件(比如本條命令的條件是“允許所有從eth0端口進入且協議是ICPM的報文”)、做什么樣的處理(比如本條命令的處理是“接受”,可以進入下一個流程)。

      iptables可以定義很多策略/規則,從圖2-16中我們知道,這些規則最終會傳遞到內核netf?ilter模塊,netf?ilter模塊會根據這些規則做相應的處理。netf?ilter的處理方式是:從報文進入本機(linux host或vm)的那一刻起,到報文離開本機的那一刻止,中間這段時間(或者是發自本機的報文,從報文準備發送的那一刻,到報文離開本機的那一刻止,中間這段時間),netf?ilter會在某些時刻點插入處理模塊,這些處理模塊根據相應的策略/規則對報文進行處理。

      至于nat、f?ilter、mangle三張表也可以這么理解:僅僅是為了達到不同的目的(功能)而實現的三個模塊而已。

      netf?ilter插入的這些時刻點如圖2-16所示。

      圖2-16 Netf?ilter處理報文的時刻點

      在這些時刻點中,上文提到三張表(模塊)并不是所有的時刻都可以處理。在同一個時刻點,也可以有多個模塊進行處理,那么這些模塊就有一個處理順序,誰先處理,誰后處理。這么說有點繞,具體請參見圖2-17。

      圖2-17 Netf?ilter處理報文的詳細時刻點

      圖中的幾個關鍵時刻點,含義如下:

      1)PREROUTING:報文進入網絡接口尚未進入路由之前的時刻;

      2)INPUT:路由判斷是本機接收的報文,準備從內核空間進入到用戶空間的時刻;

      3)FORWARD:路由判斷不是本機接收的報文,需要路由轉發,路由轉發的那個時刻;

      4)OUTPUT:本機報文需要發出去,經過路由判斷選擇好端口以后,準備發送的那

      一刻;

      5)POSTROUTING:FORWARD/OUTPUT已經完成,報文即將出網絡接口的那一刻。

      三張表,所能對應的時刻點,如表2-4所示。

      表2-4 三張表所能處理的時刻點

      這三張表(三個模塊)在這些時刻點,到底是做什么處理呢?下面我們逐個講述。

      2.7.1 NAT

      1.?NAT的基本概念

      在講述nat這張表做何處理之前,我們首先介紹一下NAT的基本概念。

      NAT(Network Address Translation,網絡地址轉換),顧名思義,就是從一個IP地址轉換為另一個IP地址。當然,這里面的根本原因還是IP地址不夠用的問題(解決IP地址枯竭的方法一個是IPv6,另一個就是NAT)。所以,NAT,大家基本做的還是公網地址與私網地址的互相轉換。如果一定要在公網地址之間互相轉換,或者私網地址之間互相轉換,技術上是支持的,只是這樣的場景非常非常少。

      NAT,從實現技術角度來說,分為:靜態NAT、動態NAT和端口多路復用三種方案。

      (1)靜態NAT(Static NAT)

      靜態NAT(Static NAT),有兩個特征(如圖2-18所示)。

      ①私網IP地址與公網IP地址的轉換規則是靜態指定的,比如10.10.10.1與50.0.0.1互相轉換,這個是靜態指定好的。

      ②私網IP地址與公網IP地址是1∶1,即一個私網IP地址對應1個公網IP地址。

      (2)動態NAT

      一般情況是公網IP比私網IP地址少的時候,用到動態NAT方案。如果公網IP地址比私網IP地址還多(或者相等),則用靜態NAT就可以了,沒必要這么麻煩。

      動態NAT,就是一批私網IP與公網IP地址之間不是固定的轉換關系,而是在IP報文處理過程中由NAT模塊進行動態匹配。雖然,公網IP比私網IP地址少,但是,同時在線的私網IP需求小于等于公網IP數量,不然某些私網IP將得不到正確的轉換,從而導致網絡通信失敗。

      動態NAT,有三個特征(如圖2-19所示)。

      ①私網與公網IP地址之間不是固定匹配轉換的,而是變化的;

      ②兩者之間的轉換規則不是靜態指定的,而是動態匹配的;

      ③私網IP地址與公網IP地址之間是m∶n,一般m < n

      (3)端口多路復用/PAT

      如果私網IP地址有多個,而公網IP地址只有一個,那么,靜態NAT顯然是不行了,動態NAT也基本不行(只有一個公網IP,不夠用)。此時,就需要用到端口多路復用。多個私網IP映射到同一個公網IP,不同的私網IP利用端口號進行區分,這里的端口號指的是TCP/UDP

      端口號。所以端口復用又叫PAT(Port Address Translation)。

      端口多路復用(PAT)的特征是(如圖2-20所示)。

      ①私網IP:公網IP = m∶1;

      ②以公網IP +端口號來區分私網IP。

      (4)SNAT/DNAT

      前面說的是靜態NAT(Static NAT)、動態NAT。很遺憾,不能簡稱SNAT、DNAT,因為SNAT/DNAT有另外的含義,是另外的縮寫。要區分SNAT(Source Network Address Translation,源地址轉換)與DNAT(Destination Network

      Address Translation,目的地址轉換)這兩個功能可以簡單地由連接發起者是誰來區分。

      ①內部地址要訪問公網上的服務時(如Web訪問),內部地址會主動發起連接,由路由器或者防火墻上的網關對內部地址做個地址轉換,將內部地址的私有IP轉換為公網的公有IP,網關的這個地址轉換稱為SNAT,主要用于內部共享IP訪問外部。

      ②當內部需要提供對外服務時(如對外發布Web網站),外部地址發起主動連接,由路由器或者防火墻上的網關接收這個連接,然后將連接轉換到內部,此過程是由帶有公網IP的網關替代內部服務來接收外部的連接,然后在內部做地址轉換,此轉換稱為DNAT,主要用于內部服務對外發布。

      2.?Netfilter中的NAT Chain

      說chain有點太學究,大白話就是時刻點。通過前文介紹我們知道,NAT一共在三個時刻點對IP報文做了處理。下面我們一個一個描述。

      (1)NAT-PREROUTING(DNAT)

      NAT-PREROUTING(DNAT)的處理時刻點,如圖2-21所示。

      IP報文流的順序是圖中的“1-2-3-4-5”,在圖2-21中A處,即PREROUTING時刻點進行NAT處理。IP報文的目的地址是IP1(公網IP),這個IP1就是Linux內核空間對外(公網)

      呈現的IP地址(說明這樣的IP地址可以有多個)。當報文到達PREROUTING這個時刻點時,NAT模塊會做處理。如果需要(即提前做了相關NAT配置),NAT模塊會將目的IP從IP1

      轉換成IP2(這個是提前配置好的),這也就是所謂的DNAT。

      (2)NAT-POSTROUTING(SNAT)

      NAT-POSTROUTING(SNAT)的處理時刻點,如圖2-22所示。

      圖2-21 NAT-PREROUTING(DNAT) 圖2-22 NAT-POSTROUTING(SNAT)

      IP報文流的順序是圖中的“1-2-3-4-5”,在圖中“E”處,即POSTROUTING時刻點進行NAT處理。IP報文的源地址是IP3(私網IP),這個報文最后經過POSTROUTING這個時刻點時,如果需要(即提前做了相關NAT配置),NAT模塊會做處理。NAT模塊會將源 IP從IP3轉換成IP1(這個是提前配置好的),這也就是所謂的SNAT。這個IP1就是Linux內核空間對外(公網)呈現的IP地址(說明,這樣的IP地址可以有多個)。

      (3)NAT-OUTPUT(DNAT)

      NAT-OUTPUT(DNAT)的處理時刻點,如圖2-23所示。

      圖2-23給人一種“迷惑/詭異”的感覺,這個IP報文是誰發出來的?如果我們把Linux內核空間(Netf?ilter)

      往“外”設想一下,把它想象成一個網元,比如防火墻(防火墻里可以有NAT功能),這個防火墻自己對外發送一個報文。這個報文在D處,即OUTPUT時刻點,會做一個DNAT。這樣這個報文不需要在“3”處,即POSTROUTING時刻點再做NAT,因為內核空間的IP源地址已經是公網IP,而目的地址已經在“2”處,即D處/OUTPUT時刻點已經做了DNAT。

      (4)小結

      Linux內核空間Netf?ilter模塊的NAT處理,一共有三個Chain(處理時刻點),如表2-5所示。

      表2-5 Linux內核空間Netfilter模塊的NAT處理

      OpenStack 云計算

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:企業生產管理能力(企業生產管理能力分析包括)
      下一篇:圖表之折線圖(圖表 折線圖)
      相關文章
      亚洲一级片免费看| www国产亚洲精品久久久日本| 国内精品久久久久久久亚洲| 亚洲av成人一区二区三区在线播放 | 亚洲精品动漫免费二区| 亚洲综合中文字幕无线码| 亚洲中字慕日产2020| 亚洲精品自在线拍| 亚洲国产成人超福利久久精品| 亚洲黄色在线播放| 亚洲嫩草影院在线观看| 亚洲春色另类小说| 亚洲高清免费在线观看| 亚洲大香人伊一本线| 亚洲免费在线视频播放| 久久精品国产亚洲AV久| 亚洲精品美女网站| 亚洲精品国产高清在线观看| 亚洲6080yy久久无码产自国产| 婷婷国产偷v国产偷v亚洲| 亚洲成?Ⅴ人在线观看无码| 亚洲日韩人妻第一页| 亚洲熟妇中文字幕五十中出| 亚洲AV无码精品色午夜果冻不卡| 亚洲AV无码精品色午夜果冻不卡 | 亚洲一区二区三区写真| 亚洲丁香婷婷综合久久| 九月婷婷亚洲综合在线| 亚洲综合伊人久久大杳蕉| 欧洲亚洲国产清在高| 久久亚洲精品无码AV红樱桃| 亚洲午夜精品一区二区公牛电影院 | 亚洲精品宾馆在线精品酒店| 一本色道久久88亚洲综合| 国产亚洲精品无码专区| 亚洲s色大片在线观看| 亚洲高清资源在线观看| 日本亚洲色大成网站www久久| 精品亚洲国产成人av| 国产亚洲精品不卡在线| 久久国产精品亚洲一区二区|