人類如今對計算機網絡的使用已經擴展到各個領域,而計算機網絡的設計者當時沒法想象互聯網能有今天這樣的規模。任何一個接入互聯網的計算機、手機以及智能電視,要想在互聯網中暢遊,必須有一個合法的IP地址。而IP地址,曾經覺得足以容納全球的計算機,可是在今天看來,已經嚴重枯竭。IPV6的出現就是爲了解決地址不足的問題,但在IPV6普及以前,須要有一個過渡技術——NAT。NAT的出現緩解了地址不足的問題,它可讓同一局域網內60000多用戶能夠同時使用一個合法IP地址訪問互聯網。關於Cisco設備的NAT技術,不清楚的朋友本人推薦博文——網絡地址轉換——NAT技術 今天主要介紹華爲設備的NAT技術。安全
博文大綱:
1、華爲設備NAT的分類;
2、如何解決源地址轉換場景下的環路和無效ARP問題;
3、Server-map表的做用;
1.經過Server-map表來解決FTP數據傳輸的問題;
2.Server-map表在NAT中的做用;
4、NAT對報文的處理流程;
5、各類經常使用的NAT的配置方法;
1.NAT NO-PAT配置方式;
2.NAPT配置方式;
3.Easy-IP配置方式;
4.NAT server配置方式;服務器
在內外網的邊界,流量有出、入兩個方向,因此NAT技術包含源地址轉換和目標地址轉換兩類。通常狀況下,源地址轉換主要用於解決內部局域網計算機訪問Internet的場景;而目標地址轉換主要是用於解決Internet用戶訪問局域網服務器的場景,目標地址轉換一般被稱爲服務器地址映射。網絡
華爲設備支持的源地址轉換方式有:session
- NAT NO-PAT:相似於Cisco的動態轉換,只轉換源IP地址,不轉換端口,屬於多對多轉換,不能節約公網地址,實際狀況下使用不多,主要適用於須要上網的用戶較少,且公網地址足夠的狀況下;
- NAPT:相似於Cisco的PAT轉換,NAPT既轉換報文的源地址,又轉換源端口。轉換後的地址不能是外網接口的IP地址,屬於多對多或多對一轉換,能夠節約IP地址,使用場景較多,主要適用於內部大量用戶須要上網,同時僅有少數幾個公網IP地址可用的場景下;
- 出接口地址:因其轉換方式很是簡單,因此也稱爲Easy-IP,和NAPT同樣,既轉換源IP地址,又轉換源端口。區別是出接口地址方式轉換後的地址只能是NAT設備外網接口所配置的IP地址,屬於多對一轉換,能夠節約IP地址,主要適用於沒有額外的公網地址可用,內部上網用戶很是多的場景下,直接經過外網接口自己的IP地址做爲轉換目標;
- Smart NAT(智能轉換):經過預留一個公網地址進行NAPT轉換,而其餘的公網地址用來進行NAT NO-PAT轉換。其主要用戶平時上網用戶比較少,而申請的公網地址基本能夠知足這些少許用戶進行NAT NO_PAT轉換,可是偶爾會出現上網用戶倍增的狀況;
- 三元組NAT:與源IP地址、源端口和協議類型有關的一種轉換,將源IP地址和源端口轉換爲固定公網IP地址和端口,能解決一些特殊應用在普通NAT中沒法實現的問題。其主要用於外部用戶訪問局域網用戶的一些P2P應用。
本篇博文主要介紹前三種源地址轉換。tcp
華爲設備的目標地址轉換技術主要是NAT Server,能夠基於IP地址轉換,也能夠基於「IP+端口+協議」進行轉換。ide
在配置華爲NAT轉換時,常常會配置黑洞路由來解決路由環路和大量的無效ARP報文,關於其如何產生,大概就是,在有些NAT的轉換方式中,是爲了解決內網鏈接Internet,而映射出了一個公有IP,經過映射後的公網地址訪問互聯網。那麼,若此時有人經過internet來訪問這個映射出來的公有IP,就會產生路由環路及大量無效的ARP報文。若要詳細提及來,又是很麻煩,可是解決這兩個問題很簡單,就是配置黑洞路由(將internet主動訪問映射出來的地址的流量指定到空接口null 0)。這樣就不會造成路由環路和產生大量ARP報文的狀況。ui
須要配置黑洞路由的幾種常見的NAT轉換方式,如圖:
計算機網絡
華爲的防火牆時基於狀態化轉發數據包,針對首個包嚴格執行策略檢查,一旦被策略容許,將生成會話表,而同一個會話的後續包及返回報由於可以匹配會話表,將直接經過防火牆,不須要進行額外的策略檢查,從而提升了轉發效率。可是在有些狀況下,僅僅依懶會話表不能轉發某些特殊應用的流量。例如:FTP服務,其在主動模式下的工做流程圖,以下:
由此能夠看出,當客戶端要求主動鏈接FTP服務器時,一點問題都沒有;可是當FTP服務器主動發起請求時,就會發生FTP鏈接失敗的狀況。華爲防火牆就是經過Server-map表來解決相似問題的。Server-map表記錄應用層的關鍵信息,包括目標地址、目標端口和協議烈性,和會話表相似,匹配了Server-map表的數據流也可直接經過防火牆,如圖:
設計
這樣就能夠解決FTP服務器主動發起請求時,就不會致使FTP服務鏈接失敗的狀況。code
Server-map表和會話表的區別:
- 會話表記錄的是鏈接信息,包括鏈接狀態;
- Server-map表記錄的不是當前的鏈接信息,而是經過分析當前鏈接的報文後獲得的信息。該信息能夠解決接下來的數據流經過防火牆的問題。能夠將Server-map表的做用理解爲提早經過預判來解決未來可能發生的問題;
Server-map表除了解決相似FTP服務的問題外,Server-map表也被應用在NAT技術中。當在防火牆上配置某些類型的NAT後,在防火牆上會生成server-map表,默認生成兩個server-map條目,分別是正向條目和反向條目(Reverse),如圖:
Server-map表在NAT中的做用是:
- 正向條目:攜帶端口信息,用來使Internet用戶訪問內網中的服務器時直接經過server-map表來進行目標地址轉換。
- 反向條目(Reverse):不攜帶端口信息,且目標地址是任意的,用來使服務器能夠訪問Internet;
小結:
防火牆接口從收到一個保溫到最終發送出去須要經歷一系列的處理流程,而NAT只是其中一項任務。NAT的配置受到路由即安全策略的影響,因此瞭解NAT對報文的處理流程對配置NAT有很是大的幫助。NAT對報文的處理流程圖,以下:
NAT處理報文的流程以下:
(1)防火牆收到報文後,首先檢查報文是否匹配Server-map中的條目,若是是,則根據表項轉換報文的目標地址,而後進行步驟(3)處理;不然進行步驟(2)處理。
(2)查找是否存在目標NAT的相關配置,若是是,而且符合NAT條件,則轉換目標地址後進行步驟(3)處理;不然直接進行步驟(3)處理。
(3)根據報文的目標地址查找路由表,若是存在目標路由,則進行步驟(4)處理;不然丟棄報文。
(4)依次匹配安全策略中的規則,若是策略容許報文經過,則進行步驟(5)處理;不然丟棄報文。
(5)查找是否存在源NAT的相關配置及是否符合NAT條件,若是是,則轉換源地址後進行步驟(6)處理;不然直接進行步驟(6)處理。
(6)在發送報文以前建立會話,後續和返回的報文能夠直接匹配會話錶轉發。
(7)防火牆發送報文。
注意:由於防火牆處理報文的順序是目標地址轉換→安全策略→源地址轉換,因此在NAT環境中,安全策略的源地址應該是源地址轉換以前的地址,目標地址應該是目標地址轉換後的地址。
PC1經過202.106.0.20~21地址與PC2實現通訊!
建議:實驗環境儘可能不要使用防火牆的G0/0/0接口,該接口默認是管理接口,而且由大量的默認配置。
[FW1]int g1/0/0 [FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24 [FW1-GigabitEthernet1/0/0]undo shutdown [FW1-GigabitEthernet1/0/0]int g1/0/1 [FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24 [FW1-GigabitEthernet1/0/1]undo shutdown Info: Interface GigabitEthernet1/0/1 is not shutdown. [FW1-GigabitEthernet1/0/1]quit [FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2
[FW1]firewall zone trust [FW1-zone-trust]add int g1/0/0 [FW1-zone-trust]quit [FW1]firewall zone untrust [FW1-zone-untrust]add int g1/0/1 [FW1-zone-untrust]quit //將內外網接口加入防火牆的指定區域 [FW1]security-policy //配置安全策略 [FW1-policy-security]rule name sec_1 //配置規則並制定規則名爲sec_1 [FW1-policy-security-rule-sec_1]source-zone trust [FW1-policy-security-rule-sec_1]destination-zone untrust [FW1-policy-security-rule-sec_1]source-address 192.168.1.0 24 //指定條件 [FW1-policy-security-rule-sec_1]action permit //指定動做 [FW1-policy-security-rule-sec_1]quit [FW1-policy-security]quit [FW1]
[FW1]nat address-group natgroup //配置NAT地址組,指定名稱爲natgroup [FW1-address-group-natgroup]section 0 202.106.0.20 202.106.0.21 //經過section關鍵字指定地址組的起始地址和結束地址 [FW1-address-group-natgroup]mode no-pat local //指定地址組的模式爲no-pat。local關鍵字表示對本區域有效 [FW1-address-group-natgroup]quit [FW1]
[FW1]nat-policy //配置NAT策略 [FW1-policy-nat]rule name natpolicy //配置名稱爲natpolicy的NAT規則 [FW1-policy-nat-rule-natpolicy]source-zone trust [FW1-policy-nat-rule-natpolicy]source-address 192.168.1.0 24 [FW1-policy-nat-rule-natpolicy]destination-zone untrust //指定條件 [FW1-policy-nat-rule-natpolicy]action nat address-group natgroup //指定動做,知足條件的數據包將依據地址組作NAT NO-PAT方式的源地址轉換 [FW1-policy-nat-rule-natpolicy]quit [FW1-policy-nat]quit [FW1]
注意:NAT策略不一樣於安全策略,安全策略是針對通過的數據流作規則檢查:匹配的數據包或者轉發,或者丟棄,安全策略決定了流量可否經過防火牆;而NAT策略對通過的數據流作規則檢查,匹配的數據包或者作地址轉換,或者不作地址轉換,NAT策略決定了哪些流量須要NAT轉換。
[FW1]ip route-static 202.106.0.20 32 null 0 [FW1]ip route-static 202.106.0.21 32 null 0
[AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 202.106.0.2 24 [AR1-GigabitEthernet0/0/0]undo shutdown [AR1-GigabitEthernet0/0/0]int g0/0/1 [AR1-GigabitEthernet0/0/1]ip add 100.1.1.1 24 [AR1-GigabitEthernet0/0/1]undo shutdown [AR1-GigabitEthernet0/0/1]quit [AR1]ip route-static 202.106.0.0 24 202.106.0.1
PC進行驗證:
防火牆進行驗證:
[FW1]display firewall session table //查看防火牆的會話表 Current Total Sessions : 3 icmp : public --> public 192.168.1.2:13610[202.106.0.20:13610] --> 100.1.1 .2:2048 icmp : public --> public 192.168.1.2:13354[202.106.0.20:13354] --> 100.1.1 .2:2048 icmp : public --> public 192.168.1.2:13098[202.106.0.20:13098] --> 100.1.1 .2:2048 //由此能夠看出,內部地址192.168.1.2在通過防火牆以後更換爲202.106.0.20地址進行通訊 [FW1]display firewall server-map //查看防火牆Server-map表 Current Total Server-map : 2 Type: No-Pat Reverse, ANY -> 202.106.0.20[192.168.1.2], Zone: untrust Protocol: ANY, TTL:---, Left-Time:---, Pool: 0, Section: 0 : public Type: No-Pat, 192.168.1.2[202.106.0.20] -> ANY, Zone: untrust Protocol: ANY, TTL:360, Left-Time:360, Pool: 0, Section: 0 : public //能夠看出192.168.1.1.2與202.106.0.20造成映射關係
實驗拓補與NAT NO-PAT同樣!(在NAT NO-PAT基礎上也可),爲了初學者能夠看懂,本人就從新部署網絡設備了!
PC1經過202.106.0.100地址與PC2實現通訊!
[FW1]int g1/0/0 [FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24 [FW1-GigabitEthernet1/0/0]int g1/0/1 [FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24 [FW1-GigabitEthernet1/0/1]q [FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2 //配置防火牆網絡參數及路由 [FW1]firewall zone trust [FW1-zone-trust]add int g1/0/0 [FW1-zone-trust]quit [FW1]firewall zone untrust [FW1-zone-untrust]add int g1/0/1 [FW1-zone-untrust]quit [FW1]security-policy [FW1-policy-security]rule name sec_2 [FW1-policy-security-rule-sec_2]source-zone trust [FW1-policy-security-rule-sec_2]source-address 192.168.1.0 24 [FW1-policy-security-rule-sec_2]destination-zone untrust [FW1-policy-security-rule-sec_2]action permit [FW1-policy-security-rule-sec_2]quit [FW1-policy-security]quit //配置防火牆安全策略 [FW1]nat address-group natgroup1 [FW1-address-group-natgroup1]section 0 202.106.0.100 202.106.0.100 [FW1-address-group-natgroup1]mode pat //指定地址組的模式爲pat,即NAPT模式 [FW1-address-group-natgroup1]quit //配置NAT地址組 [FW1]nat-policy [FW1-policy-nat]rule name natpolicy1 [FW1-policy-nat-rule-natpolicy1]source-address 192.168.1.0 24 [FW1-policy-nat-rule-natpolicy1]source-zone trust [FW1-policy-nat-rule-natpolicy1]destination-zone untrust [FW1-policy-nat-rule-natpolicy1]action nat address-group natgroup1 //指定動做,知足條件的數據包將依據地址組作NAPT方式轉換 [FW1-policy-nat-rule-natpolicy1]quit [FW1-policy-nat]quit //配置防火牆NAT策略 [FW1]ip route-static 202.106.0.100 32 null 0 //配置黑洞路由 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 202.106.0.2 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 100.1.1.1 24 [R1-GigabitEthernet0/0/1]quit [R1]ip route-static 202.106.0.0 24 202.106.0.1 //配置路由器的IP地址及路由
PC1進行驗證:
防火牆進行驗證:
[FW1]display firewall session table //查看防火牆會話表 Current Total Sessions : 2 icmp : public --> public 192.168.1.2:12082[202.106.0.100:2058] --> 100.1.1 .2:2048 icmp : public --> public 192.168.1.2:12338[202.106.0.100:2059] --> 100.1.1 .2:2048 [FW1]display firewall server-map //查看防火牆的Server-map Current Total Server-map : 0 //NAPT方式進行NAT地址轉換時,並不會生成Server-map表
實驗拓補與NAT NO-PAT同樣!(在NAPT基礎上也可),爲了初學者能夠看懂,本人就從新部署網絡設備了!
PC1經過防火牆接口地址與PC2實現通訊!
[FW1]int g1/0/0 [FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24 [FW1-GigabitEthernet1/0/0]int g1/0/1 [FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24 [FW1-GigabitEthernet1/0/1]q [FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2 //配置防火牆網絡參數及路由 [FW1]firewall zone trust [FW1-zone-trust]add int g1/0/0 [FW1-zone-trust]quit [FW1]firewall zone untrust [FW1-zone-untrust]add int g1/0/1 [FW1-zone-untrust]quit [FW1]security-policy [FW1-policy-security]rule name sec_3 [FW1-policy-security-rule-sec_2]source-zone trust [FW1-policy-security-rule-sec_2]source-address 192.168.1.0 24 [FW1-policy-security-rule-sec_2]destination-zone untrust [FW1-policy-security-rule-sec_2]action permit [FW1-policy-security-rule-sec_2]quit [FW1-policy-security]quit //配置防火牆安全策略 [FW1]nat-policy [FW1-policy-nat]rule name natpolicy2 [FW1-policy-nat-rule-natpolicy2]source-address 192.168.1.0 24 [FW1-policy-nat-rule-natpolicy2]source-zone trust [FW1-policy-nat-rule-natpolicy2]destination-zone untrust [FW1-policy-nat-rule-natpolicy2]action nat easy-ip //配置知足條件的數據包根據地址組作出接口方式轉換 [FW1-policy-nat-rule-natpolicy2]quit [FW1-policy-nat]quit [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 202.106.0.2 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 100.1.1.1 24 [R1-GigabitEthernet0/0/1]quit [R1]ip route-static 202.106.0.0 24 202.106.0.1 //配置路由器的IP地址及路由
PC1進行驗證:
防火牆進行驗證:
[FW1]display firewall session table //查看防火牆會話表 Current Total Sessions : 2 icmp : public --> public 192.168.1.2:12082[202.106.0.1:2073] --> 100.1.1 .2:2048 icmp : public --> public 192.168.1.2:12338[202.106.0.1:2074] --> 100.1.1 .2:2048 [FW1]display firewall server-map //查看防火牆的Server-map Current Total Server-map : 0 /Easy-IP方式進行NAT地址轉換時,並不會生成Server-map表
互聯網用戶經過202.106.0.20訪問DMZ區域中的FTP服務器。
[FW1]int g1/0/0 [FW1-GigabitEthernet1/0/0]ip add 192.168.1.1 24 [FW1-GigabitEthernet1/0/0]int g1/0/1 [FW1-GigabitEthernet1/0/1]ip add 202.106.0.1 24 [FW1-GigabitEthernet1/0/1]quit [FW1]ip route-static 0.0.0.0 0.0.0.0 202.106.0.2 //配置防火牆網絡參數及路由 [FW1]firewall zone dmz [FW1-zone-dmz]add int g1/0/0 [FW1-zone-dmz]quit [FW1]firewall zone untrust [FW1-zone-untrust]add int g1/0/1 [FW1-zone-untrust]quit //將防火牆接口加入相應的區域中 [FW1]security-policy [FW1-policy-security]rule name sec_4 [FW1-policy-security-rule-sec_4]source-zone untrust [FW1-policy-security-rule-sec_4]destination-zone dmz [FW1-policy-security-rule-sec_4]destination-address 192.168.1.0 24 [FW1-policy-security-rule-sec_4]service ftp //配置條件爲ftp協議,這屬於精細NAT-server;若是是粗泛NAT-server,這步能夠省略 [FW1-policy-security-rule-sec_4]action permit [FW1-policy-security-rule-sec_4]quit [FW1-policy-security]quit //防火牆配置安全策略 [FW1]firewall interzone dmz untrust [FW1-interzone-dmz-untrust]detect ftp [FW1-interzone-dmz-untrust]quit //.配置FTP應用層檢測,默認已經開啓,能夠省略 [FW1]nat server natserver_ftp protocol tcp global 202.106.0.20 21 inside 192.168.1.2 21 //配置NAT server,natserver_ftp爲策略名稱,global後爲全局地址和端口 <內部地址的端口轉化爲外部不一樣的端口> <也可添加no-reverse參數,表示再也不產生server-map表內容> <也能夠不配置端口信息> [FW1]ip route-static 202.106.0.20 32 null 0 <配置黑洞路由> [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 202.106.0.2 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 100.1.1.1 24 [R1-GigabitEthernet0/0/1]quit [R1]ip route-static 202.106.0.20 24 202.106.0.1 //配置路由器接口地址及路由
驗證效果:
[FW1]display firewall session table Current Total Sessions : 1 ftp : public --> public 100.1.1.2:49160 +-> 202.106.0.20:21[192.168.1.2:21] [FW1]display firewall server-map Current Total Server-map : 2 Type: Nat Server, ANY -> 202.106.0.20:21[192.168.1.2:21], Zone:---, protocol :tcp : public -> public Type: Nat Server Reverse, 192.168.1.2[202.106.0.20] -> ANY, Zone:---, protocol:tcp : public -> public, counter: 1
自行進行驗證!從防火牆的會話表中,能夠看出效果!
———————— 本文至此結束,感謝閱讀 ————————