博文大綱:
一、華為防火牆NAT的六個分類;
二、解決NAT轉換時的環路及無效ARP;
三、server-map表的作用;
四、NAT對報文的處理流程;
五、各種常用NAT的配置方法;
一、華為防火牆NAT的六個分類
華為防火牆的NAT分類:
- NAT No-PAT:類似於Cisco的動態轉換,只轉換源IP地址,不轉換端口,屬於多對多轉換,不能節約公網IP地址,使用情況較少。
- NAPT(Network Address and Port Translation,網絡地址和端口轉換):類似於Cisco的PAT轉換,NAPT即轉換報文的源地址,又轉換源端口。轉換后的地址不能是外網接口IP地址,屬於多對多或多對一轉換,可以節約公網IP地址,使用場景較多。
- 出接口地址(Easy-IP):因其轉換方式非常簡單,所以也被稱為Easy-IP、和NAPT一樣,即轉換源IP地址,又轉換源端口。區別是出接口地址方式轉換后的地址只能是NAT設備外網接口所配置的IP地址,屬於多對一轉換,可以節約IP地址。
- NAT Server:靜態一對一發布,主要用於內部服務器需要對Internet提供服務時使用,。
- Smart NAT(智能轉換):通過預留一個公網地址進行NAPT轉換,而其他的公網地址用來進行NAT No-PAT轉換,該方式不太常用。
- 三元組NAT:與源IP地址、源端口和協議類型有關的一種轉換,將源IP地址和源端口轉換為固定公網IP地址和端口,能解決一些特殊應用在普遍NAT中無法實現的問題。主要應用於外部用戶訪問局域網的一些P2P應用。
二、解決NAT轉換時的環路及無效ARP
在特定的NAT轉換時,可能會產生環路及無效ARP,關於其如何產生,大概就是,在有些NAT的轉換方式中,是為了解決內網連接Internet,而映射出了一個公有IP,那么,若此時有人通過internet來訪問這個映射出來的公有IP,就會產生這兩種情況。若要詳細說起來,又是很麻煩,但是解決這兩個問題很簡單,就是配置黑洞路由(將internet主動訪問映射出來的地址的流量指定到空接口null0),關於如何配置,將在過后的配置中展示出來,我總結了以下需要配置黑洞路由的場景,如下表所示:
表中的前三個可以對應到文章開始的幾個NAT類型中,那么NAT Server(粗泛)、NAT Server(精細)又是什么鬼呢?
-
NAT Server(粗泛):是NAT Server轉換類型中的一種,表示源地址和轉換后的地址只有簡單的映射關系,沒有涉及端口等映射,如源地址為192.168.1.2,轉換后的地址為33.2.55.6,如果做的是NAT Server(粗泛)這種類型的NAT,那么所有訪問33.2.55.6的數據包都將轉發給192.168.1.2這個地址。
- NAT Server(精細):也是NAT Server轉換類型中的一種,表示源地址和轉換后的地址映射關系,已經具體定位到某個端口,如:源地址為192.168.1.2,轉換后的地址為33.2.55.6,做了NAT Server(精細)的NAT轉換,那么可能是訪問33.2.55.6的FTP流量(21端口)會轉發到192.168.1.2這個地址,但若訪問33.2.55.6的Web流量(80/443端口),就不一定還是轉發到192.168.1.2這個地址,可以說NAT Server(精細)是基於端口的NAT轉換。
三、server-map表的作用
我們都知道,狀態化防火牆中會有一張表叫做會話表,用來記錄的是內網訪問外網時的一個連接信息,當外網返回的數據匹配到會話表的記錄時,直接放行相關返回流量。
那么server-map表又是什么呢?具體解釋其原理的話,可能又是一大篇,寫了也不一定能寫明白,寫明白了你們也不一定看懂,看懂了你們也不一定會打賞,哈哈,不開玩笑了,直接總結對比一下server-map表和會話表的區別吧,
區別如下:
- 會話表記錄的是連接信息,包括連接狀態。
- server-map表記錄的不是當前的連接信息,而是通過分析當前連接的報文后得到的信息,該信息用來解決接下來的數據流通過防火牆的問題。可以將server-map表的作用理解為通過未雨綢繆解決將來的問題,如像FTP這種的多端口協議,在從一開始的三次握手,到最后完成數據的傳輸,其過程中,可能端口會發生改變等問題,server-map正好可以解決這種問題。
然而在NAT中也需要這個server-map表,就是在有數據流量通過NAT的方式穿越防火牆時,server-map表會記錄其源地址和轉換后地址的對應關系,從而使后續流量可以不用查看NAT策略,直接匹配到server-map表,從而實現高效的NAT轉換。若用戶通過互聯網訪問轉換后的地址時,也可以匹配到server-map表,從而高效的將數據轉發到內網真實主機(必須保證安全策略允許通過)。
server-map表不用手動配置,是自動生成的,這里只是簡單介紹下server-map表是個什么鬼。
在NAT中,不是所有的表都可以生成server-map表的,我簡單總結了一下,如下:
當在防火牆上配置某些類型的NAT后,在防火牆上會生成server-map表,默認生成兩個server-map條目,分別是正向條目和反向條目(Reverse),如下:
此時Server-map表的作用是:
- 正向條目攜帶端口信息,用來使Internet用戶訪問內網中的服務器時直接通過server-map表來進行目標地址轉換。
- 反向條目(Reverse):不攜帶端口信息,且目標地址是任意的,用來使服務器可以訪問Internet。
四、NAT對報文的處理流程
原諒我懶癌晚期,給大家上個圖,自己悟吧,能理解到什么地步,全看天意咯,如下:
從上圖中可以看出來,因為防火牆處理報文的順序是目標地址轉換→安全策略→源地址轉換,所以在NAT環境中,安全策略的源地址應該是源地址轉換之前的地址,目標地址應該是目標地址轉換之后的地址。
一個報文,一般在同一個網絡設備上,只會存在一種轉換條目,即要么轉換源地址(除NAT-Server類型的NAT轉換之外),要么轉換目的地址(NAT-Server類型的NAT轉換)。源地址和目的地址的轉換不會同時存在同一個網絡設備上。
五、各種NAT類型的配置方法
在文章開頭的NAT分類中,Smart NAT(智能轉換)和三元組NAT這兩種NAT類型我也沒有配置過,不太了解,所以無法將這兩種的配置寫下來,只能將前四種NAT類型寫下來咯!一般夠用了(前面介紹的黑洞路由及查看一些相關表的命令都將在配置過程中,寫下來,請仔細看注釋)。
環境如下(不以實際環境為准,主要目的是將多種類型NAT的配置寫下來):
需求如下:
1、ISP為公司分配的公網地址為100.2.2.8/29。
2、技術部屬於trust區域,通過Easy-ip訪問Internet。
3、行政部屬於trust區域,通過NAPT訪問internet(使用100.2.2.12/29)。
4、財務部屬於trust區域,通過no-pat訪問internet(使用100.2.2.10/29-100.2.2.11/29)
5、DMZ區域中的兩台服務器配置NAT-Server發布,分別提供FTP服務及web服務(使用100.2.2.9/29)
6、防護牆的GE1/0/0屬於UNtrust區域。
開始配置基礎部分(IP地址、路由條目和防火牆接口添加到指定區域等):
我這里只寫了路由器及防火牆的配置,關於各個PC及server的IP配置,請自行配置。基礎部分就不注釋了,若不懂,可以參考我之前的博文:華為網絡設備基本配置 ,若需要在eNSP上驗證效果,需要給模擬器上的防火牆導入系統,我這里使用的是USG6000的防火牆,可以下載我提供的防火牆系統文件。
1、R1路由器配置如下:
<Huawei>sys
[Huawei]in g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 100.1.1.1 30 [Huawei-GigabitEthernet0/0/0]in g0/0/1 [Huawei-GigabitEthernet0/0/1]ip add 200.1.1.1 24 [Huawei-GigabitEthernet0/0/1]quit [Huawei]ip route-static 100.2.2.8 29 100.1.1.2 <!-100.2.2.8/29為匯總后的地址-->
2、防火牆配置如下:
<USG6000V1>sys
[USG6000V1]in g1/0/0 [USG6000V1-GigabitEthernet1/0/0]ip add 100.1.1.2 30 [USG6000V1-GigabitEthernet1/0/0]in g1/0/4 [USG6000V1-GigabitEthernet1/0/4]ip add 192.168.3.1 24 [USG6000V1-GigabitEthernet1/0/4]in g1/0/3 [USG6000V1-GigabitEthernet1/0/3]ip add 192.168.2.1 24 [USG6000V1-GigabitEthernet1/0/3]in g1/0/2 [USG6000V1-GigabitEthernet1/0/2]ip add 192.168.1.1 24 [USG6000V1-GigabitEthernet0/0/0]in g1/0/1 [USG6000V1-GigabitEthernet1/0/1]ip add 192.168.0.1 24 [USG6000V1-GigabitEthernet1/0/1]quit [USG6000V1]ip route-static 0.0.0.0 0.0.0.0 100.1.1.1 [USG6000V1]firewall zone trust [USG6000V1-zone-trust]add in g1/0/4 [USG6000V1-zone-trust]add in g1/0/3 [USG6000V1-zone-trust]add in g1/0/2 [USG6000V1-zone-trust]quit [USG6000V1]firewall zone dmz [USG6000V1-zone-dmz]add in g1/0/1 [USG6000V1-zone-dmz]quit [USG6000V1]firewall zone untrust [USG6000V1-zone-untrust]add in g1/0/0
基礎部分的配置至此結束。
開始配置各種類型的NAT:
1、技術部屬於trust區域,通過Easy-ip訪問Internet。
(1)防火牆配置如下:
1)配置安全策略:
[USG6000V1]security-policy
[USG6000V1-policy-security]rule name easy <!--定義安全策略名字--> [USG6000V1-policy-security-rule-easy]source-zone trust <!--源區域為trust--> [USG6000V1-policy-security-rule-easy]destination-zone untrust <!--目標區域為untrust--> [USG6000V1-policy-security-rule-easy]action permit <!--動作為允許--> [USG6000V1-policy-security-rule-easy]quit [USG6000V1-policy-security]quit
2)配置NAT策略:
[USG6000V1]nat-policy
[USG6000V1-policy-nat]rule name easypolicy <!--定義NAT策略名字--> [USG6000V1-policy-nat-rule-easypolicy]source-address 192.168.1.0 24 <!--定義源地址--> [USG6000V1-policy-nat-rule-easypolicy]source-zone trust <!--定義源區域--> [USG6000V1-policy-nat-rule-easypolicy]destination-zone untrust <!--定義目標區域--> [USG6000V1-policy-nat-rule-easypolicy]action nat easy-ip <!--配置出接口方式--> [USG6000V1-policy-nat-rule-easypolicy]quit [USG6000V1-policy-nat]quit
現在就可以使用PC4 ping外網的200.1.1.2進行驗證了,在ping的過程中查看會話表(時間長了該會話表將沒有任何內容),可以看到具體的轉換條目。
[USG6000V1]dis firewall session table <!--查看會話表--> Current Total Sessions : 5 icmp ×××: public --> public 192.168.3.2:28884[100.1.1.2:2051] --> 200.1.1.2:2:048 ..............................
注:Easy-ip類型的NAT不會產生server-map。
2、配置行政部屬於trust區域,通過NAPT訪問internet(使用100.2.2.12/29)。
由於在上面配置Easy-ip的NAT類型時,配置了安全策略,所以接下來trust區域訪問untrust區域的流量就不用配置安全策略了。
(1)防火牆配置如下:
1)配置NAT地址組,地址組中的地址對應的是公網地址100.2.2.12/29。
[USG6000V1]nat address-group napt <!--定義nat地址組名--> [USG6000V1-address-group-napt]section 0 100.2.2.12 <!--定義組中的地址--> [USG6000V1-address-group-napt]mode pat <!--配置為NAPT方式--> [USG6000V1-address-group-napt]quit
2)配置NAT策略
[USG6000V1]nat-policy
[USG6000V1-policy-nat]rule name napt <!--自定義nat策略的組名--> [USG6000V1-policy-nat-rule-napt]source-address 192.168.2.0 24 <!--定義需要轉換的源地址--> [USG6000V1-policy-nat-rule-napt]source-zone trust <!--定義源區域--> [USG6000V1-policy-nat-rule-napt]destination-zone untrust <!--定義目標區域--> [USG6000V1-policy-nat-rule-napt]action nat address-group napt <!--關聯地址組-->
3)NAPT的NAT類型要配置黑洞路由,所以要針對轉換后的全局地址100.2.2.12/32配置黑洞路由。
[USG6000V1]ip route-static 100.2.2.12 32 NULL 0
4)NAPT配置至此就完成了,可以自行驗證,並查看會話表,查看是否轉換為指定的地址。
3、配置財務部屬於trust區域,通過no-pat訪問internet(使用100.2.2.10/29-100.2.2.11/29)
(1)防火牆配置如下:
1)配置NAT地址組,地址組中的地址對應的是公網地址100.2.2.10--100.2.2.11:
[USG6000V1]nat address-group natnopat <!--定義nat地址組名--> [USG6000V1-address-group-natnopat]section 0 100.2.2.10 100.2.2.11 <!--定義組中的地址--> [USG6000V1-address-group-natnopat]mode no-pat local <!--配置為NAT No-PAT方式--> [USG6000V1-address-group-natnopat]quit
2)配置NAT策略:
[USG6000V1]nat-policy
[USG6000V1-policy-nat]rule name nopat <!--自定義nat策略的組名--> [USG6000V1-policy-nat-rule-nopat]source-address 192.168.1.0 24 <!--定義需要轉換的源地址--> [USG6000V1-policy-nat-rule-nopat]source-zone trust <!--定義源區域--> [USG6000V1-policy-nat-rule-nopat]destination-zone untrust <!--定義目標區域--> [USG6000V1-policy-nat-rule-nopat]action nat address-group natnopat <!--關聯地址組--> [USG6000V1-policy-nat-rule-nopat]quit [USG6000V1-policy-nat]quit
3)針對轉換后的全局地址(NAT地址組中的地址)配置黑洞路由:
[USG6000V1]ip route-static 100.2.2.10 32 NULL 0 [USG6000V1]ip route-static 100.2.2.11 32 NULL 0
至此,NAT No-PAT配置完成了,可以自行驗證,並且會產生server-map表:
[USG6000V1]dis firewall server-map <!--查看server-map表--> [USG6000V1]dis firewall session table <!--查看會話表-->
4、配置DMZ區域中的兩台服務器配置NAT-Server發布,分別提供FTP服務及web服務(使用100.2.2.9/29)
1)配置安全策略:
由於之前配置的是trust訪問untrust區域的安全策略,所以對DMZ區域沒關系,這里是要將DMZ區域的服務器發布出去,使Internet用戶可以訪問到這些服務器,所以應該放行UNtrust到DMZ區域相關服務的流量。
[USG6000V1-policy-security]rule name todmz [USG6000V1-policy-security-rule-todmz]source-zone untrust [USG6000V1-policy-security-rule-todmz]destination-zone dmz [USG6000V1-policy-security-rule-todmz]destination-address 192.168.0.0 24 [USG6000V1-policy-security-rule-todmz]service ftp [USG6000V1-policy-security-rule-todmz]service http [USG6000V1-policy-security-rule-todmz]action permit
2)配置NAT server:
[USG6000V1]nat server ftp protocol tcp global 100.2.2.9 21 inside 192.168.0.2 21 [USG6000V1]nat server http protocol tcp global 100.2.2.9 80 inside 192.168.0.3 80
3)使用外網客戶端client1進行訪問驗證即可,訪問以后趕緊查看會話表及server-map表(因為怕到了老化時間,會看不到任何條目),會看到如下結果:
配置至此,所有需求均已實現,完活。
1、擴展一些NAT Server的其他配置類型:
[USG6000V1]nat server ftp1 protocol tcp global 100.2.2.14 2121 inside 192.168.0.2 21 <!-- 配置不同端口映射,其效果是外網用戶訪問100.2.2.14的2121端口, 將轉換地址和端口為192.168.0.2的21端口。 --> [USG6000V1]nat server ftp1 protocol tcp global 100.2.2.14 21 inside 192.168.0.2 21 no-reverse <!-- 其效果就是不再生成反向的server-map表, 只能Internet訪問內部的ftp服務,而內部服務器不能主動訪問互聯網。 --> [USG6000V1]nat server natserver global 100.2.2.19 inside 100.2.2.9 <!-- 真正一對一的映射,一個公網IP對應一個內部服務器, 當Internet用戶訪問100.2.2.19的任意端口,都將轉發到內部100.2.2.9服務器上, 該配置方法不常用,也不推薦使用。 -->
2、如何刪除NAT Server:
那么我們在配置NAT Server時,配置錯誤的話,想要刪除掉,與別的配置刪除不太一樣,需要使用以下命令刪除配置錯誤的NAT Server:
[USG6000V1]undo nat server name http
[USG6000V1]undo nat server ID 0
<!-- 以上命令是刪除NAT server的配置, 第一個是基於名字刪除,第二個是基於ID號刪除, 在系統視圖,使用“dis this”,然后翻到最后,可以看到name及ID號 -->
轉自:https://blog.51cto.com/u_14154700/2426966