在企業網路中,防火牆一般用於不同企業網路間的訪問控制及網路地址轉換(NAT),防火牆的地址轉換轉換的方式不同可以分為源地址轉換(轉換報文的源地址)、目的地址轉換(轉換報文的目的地址)和雙向地址轉換(同時轉換報文的源和目的地址)。
華為防火牆的NAT策略流程圖如下:
華為防火牆策略流程圖
此處使用以下拓撲進行NAT的測試,拓撲圖如下:
根據拓撲,分別進行目的地址轉換、源地址轉換和雙向地址轉換的測試。
目的地址轉換:當防火牆接收到資料包時,如果匹配到相關的目的地址轉換,則防火牆會根據配置資訊把資料包的目的地址進行替換,目的地址轉換可以基於server map、acl以及NAT策略,其中,優先順序關係為servermap>acl>nat策略。
NAT測試拓撲
①基於server map的地址轉換:在防火牆FW1區域的網路中配置有telnet伺服器,在內部地址為10.0.1.1,當客戶端192.168.1.1訪問100.0.13.2時透過servermap把目的地址轉換為10.0.1.1,防火牆配置如下:
nat server 0 protocol tcp global 100.0.13.2 inside 10.0.1.1 no-reverse unr-route
當在telnet_client上telnet登入100.0.13.2時相當於登入到了10.0.1.1裝置上
測試登入情況
②基於ACL的地址轉換:在防火牆上建立ACL匹配目的地址為100.0.13.2這個地址,
acl number 3000
rule 1 permit ip destination 100.0.13.2 0
在防火牆資料包的入方向區域裡進行nat轉換
firewall zone name extra id 4
destination-nat 3000 address 10.0.1.1
基於ACL的NAT
nat-policy
rule name test
source-zone extra
destination-address 100.0.13.2 mask 255.255.255.255
action destination-nat address 10.0.1.1
基於nat策略的NAT
目的NAT策略的優先順序對比:此處使用servermap把100.0.13.2轉換為10.0.1.10,使用ACL把100.0.13.2轉換為10.0.1.11,使用NAT策略把目的轉換為10.0.1.1,在防火牆的出介面進行抓包,並根據轉換後的目的地址確定三種轉換方法的優先順序,配置如下:
基於servermap:
nat server global 100.0.13.2 inside 10.0.1.10 no-reverse unr-route
基於ACL:
acl number 3000
rule 1 permit ip destination 100.0.13.2 0
在防火牆資料包的入方向區域裡進行nat轉換
firewall zone name extra id 4
destination-nat 3000 address 10.0.1.11
基於nat-policy:
nat-policy
rule name test
source-zone extra
destination-address 100.0.13.2 mask 255.255.255.255
action destination-nat address 10.0.1.1
訪問情況:
servermap訪問抓包
在telnet_client上telnet 100.0.13.2時,透過抓包可以看到第770到771個數據包的目的被轉換為10.0.1.10,而10.0.1.10對應的是server map的nat配置,所以最優先選擇的是servermap的轉換。把server map的nat配置刪除,繼續測試:
acl訪問抓包
nat-policy訪問抓包
透過抓包可以看到第775之後的資料包的目的地址被轉換為10.0.1.1,而10.0.1.1對應的是nat-policy的nat配置,所以目的nat的轉換優先順序為server map>acl>nat-policy。
源地址轉換:
源NAT根據是否需要轉換源埠可以分為僅地址轉換的nat(NAT NO-PAT)和源地址和埠同時轉換的NAT(NAPT/SMART NAT/EASY IP/三元組NAT),環境說明:使用三臺telnet_client(IP地址為192.168.1.1,192.168.1.2,192.168.1.3)登入10.0.1.1時,把源地址轉換為指定源。
①NAT NO-PAT,這種轉換方式只轉換源地址,不轉換埠,實現了私網到公網一對一地址轉換,這種方式同時只能轉換極少的私網地址,如果轉換地址池中的公網地址被消耗完,則後面的裝置不會再進行轉換,測試中試圖把三臺telnet_client的源地址轉換為100.0.13.5。
配置:
建立地址池
nat address-group NAT-NOPAT 0
mode no-pat global
section 0 100.0.13.5 100.0.13.5 //地址池中只有一個地址
配置nat策略
nat-policy
rule name test
source-zone extra
destination-zone intra
source-address 192.168.1.0 mask 255.255.255.0
destination-address 10.0.1.1 mask 255.255.255.255
action source-nat address-group NAT-NOPAT
使用其中一臺進行測試
使用192.168.1.2測試時可以看到業務正常使用,抓包可以看到源地址已被轉換為100.0.13.5
抓包結果
但是後面的裝置無法正常使用
其它client無法訪問
從這個結果來看,NO-PAT的方式只能允許很少部分私網地址進行源地址轉換,允許的數量取決於地址池中的地址數量,當大部分私網地址需要轉換源地址(比如正常訪問外網的情況)時不適用NO-PAT的方式。
②NAPT,NAPT同時轉換地址和埠,這種方式可以實現多個私網共用同一個地址進行訪問,測試使用NAPT方式把源地址轉換為100.0.13.6進行訪問
配置:
建立地址池
nat address-group NAPT 2
mode pat //模式PAT
section 0 100.0.13.6 100.0.13.6 //同樣地址池中只有一個地址
nat-policy配置
nat-policy
rule name test
source-zone extra
destination-zone intra
source-address 192.168.1.0 mask 255.255.255.0
destination-address 10.0.1.1 mask 255.255.255.255
action source-nat address-group NAPT
測試結果如下:
telnet_server檢視登入情況
telnet_server上檢視登入情況可以看到同一個源地址100.0.13.6登入到了裝置上,從防火牆會話表可以看到三個客戶端的源地址被轉換為100.0.13.6,埠也被轉換為其它埠。
防火牆會話表
從測試結果來看,NAPT可以支援多個源地址轉換為同一個源地址進行訪問,所以在訪問網際網路的配置中,經常使用NAPT的轉換方式進行地址轉換。
配置
nat address-group smart-nat 3
mode no-pat global
smart-nopat 100.0.13.8
section 0 100.0.13.7 100.0.13.7
nat-policy配置
nat-policy
rule name test
source-zone extra
destination-zone intra
source-address 192.168.1.0 mask 255.255.255.0
destination-address 10.0.1.1 mask 255.255.255.255
action source-nat address-group smart-nat
測試結果如下:
在telnet_server上檢視登入情況可以看到登入使用者有一個100.0.13.7(NO-PAT使用者),之後的100.0.13.8是使用的預留地址做的NAPT,從防火牆會話表可以看到客戶端192.168.1.1使用了NO-PAT轉換,埠沒變,其餘的兩個使用了smart的地址進行NAPT轉換,連埠一起轉換。
server上檢視登入情況
防火牆會話表
④easy NAT可以把源地址轉換為出介面的地址,主要用於動態獲取地址的場景,如果介面是透過pppoe獲得的動態地址,每一次撥號獲得的地址可能不一樣,所以無法固定介面地址,此時可使用easy NAT進行地址轉換。
配置
nat-policy配置
nat-policy
rule name test
source-zone extra
destination-zone intra
source-address 192.168.1.0 mask 255.255.255.0
destination-address 10.0.1.1 mask 255.255.255.255
action source-nat easy-ip
測試結果如下:
在telnet_server上檢視登入情況可以看到登入的裝置的源地址為200.0.23.3,這個地址是防火牆的G1/0/1介面的地址,也就是說轉換後的源地址是出介面的介面地址。
easy ip登入情況
雙向地址轉換:雙向地址轉換指的是在轉換過程中同時轉換資料包的源地址和目的地址,針對的是同一條流,它並不是單獨的功能,而是源地址與目的地址轉換的組合,在配置目的NAT時不要配置目的區域。
場景說明:客戶端192.168.1.0/24訪問100.0.13.111時把目的轉換為10.0.1.1,同時把源轉換為200.0.23.111
配置
配置源地址轉換的地址池
nat address-group S-NAT
mode pat
section 0 200.0.23.111 200.0.23.111
配置nat-policy
nat-policy
rule name test
source-zone extra
source-address 192.168.1.0 mask 255.255.255.0
destination-address 100.0.13.111 mask 255.255.255.255
action source-nat address-group S-NAT
action destination-nat address 10.0.1.1
測試結果:
在telnet_server上檢視登入裝置情況可以看到有三個源地址為200.0.23.111的裝置進行登入,透過防火牆的會話表可以看到客戶端192.168.1.1/192.168.1.2和192.168.1.3訪問100.0.13.111時把源轉換為200.0.23.111,把目的轉換為10.0.1.1
server上檢視登入裝置
雙向NAT會話表