一、NAT基本概念
1)技術背景
- IPv4地址已經耗盡。
- 局域網用戶普遍使用私有IPv4地址,如何訪問公網。
- 局域網中使用私有IPv4地址的服務器如何對公網提供服務。
- 若需要對外隱藏內網的IP,同時內網的特定服務器又需對外提供服務該如何實現。
2)公網IP地址及私有IP地址
公網地址:
公網地址是指可以在Internet上使用的地址。為保證整個Internet內的IP地址的 唯一性,公網地址由IANA(Internet Assigned Number Authority)這個國際組 織負責分配。一台網絡設備如果需要使用公網地址,就必須向ISP(Internet Service Provider)或注冊中心申請。
私有地址:
為了滿足一些實驗室、公司或其他組織的獨立於Internet之外的私有網絡的需求,RFCA(Requests For Comment)1918為私有使用留出了三個IP地址段。私有地址不能在Internet上被分配,因而可以不必申請就可以自由使用。
私有IPv4地址空間 | ||
---|---|---|
A類 | 10.0.0.0 | 10.255.255.255(10.0.0.0/8) |
B類 | 172.16.0.0 | 172.31.255.255(172.16.0.0/12) |
C類 | 192.168.0.0 | 192.168.255.255(192.168.0.0/16) |
3)什么是NAT
NAT(Network Address Translator)的主要原理是通過解析IP報文頭部,自動替換報文頭中的源地址或目的地址,實現私網用戶通過私網IP訪問公網的目的。私網IP轉換為公網IP的過程對用戶來說是透明的。
4)NAT的優缺點
優點 | 缺點 |
---|---|
緩解公網地址緊缺問題 | 存在轉發延遲 |
解決IP地址沖突或重疊的問題 | 端到端尋址變得困難 |
網絡擴展性更高,本地控制也更容易 | 某些應用不支持NAT |
內網結構及相關操作對外變得不可見 | NAT產生的表項需占用設備的內存空間 |
增加了安全性 | 設備性能問題 |
5)NAT類型
源IP地址轉換(Source IP address-based NAT)
- No-Port 地址轉換(No-PAT)
- 網絡地址及端口轉換(NAPT)
目的IP地址轉換(Destination IP address-based NAT): - NAT Server
- 目的NAT
(5.1)NAT類型1:No-PAT
- NAT No-PAT也可以稱為“一對一地址轉換”,在地址轉換過程中,數據包的源IP地址由私網地址轉換為公網地址,但端口號不做轉換。
- 配置No-pat參數后,設備會將轉換前后的地址的所有端口進行一一對應的。這種應用的優點是內網地址的所有端口不做轉換,缺點是該公網地址不能被其他內網地址使用。
- 例如,地址池中的公網IP地址只有兩個。由於一台私網主機在借用其中的一個公網IP訪問公網時,會占用這個IP的所有端口。因此,這種情況只允許最多有兩台私網主機同時訪問公網,其他的私網主機要等到其中一台主機不再訪問公網,它占用的公網IP地址被釋放后,才可以再進行NAT訪問公網。
(5.2)類型2:NAPT
- NAPT是指在進行NAT轉換IP地址的同時,還對端口號進行轉換。這種應用可以實現多個內網用戶共用一個公網IP。在NAPT方式中,還可以直接借用設備與外網相連的接口的IP地址作為轉換后的IP地址,這種借用接口IP做NAT的應用又稱為easy-ip。
- NAPT也可以稱之為“地址復用”。通過配置NAPT功能,設備將同時對端口號和IP地址進行映射,允許多個私網IP地址同時映射到同一個公網IP地址,相同的公網IP地址通過不同的端口號區分映射不同的私網IP地址,從而實現多對一或多對多的地址轉換。
- Easy IP
- EASY IP方式是指直接使用接口的公網IP地址作為轉換后的源地址進行地址轉換,它可以動態獲取出接口地址,從而有效支持出接口通過撥號或DHCP方式獲取公網IP地址的應用場景。同時,EASY IP方式也可以利用訪問控制列表來控制哪些內部地址可以進行地址轉換。
- EASY IP方式特別適合小型局域網訪問Internet的情況。這里的小型局域網主要指中小型網吧、小型辦公室等環境,一般具有以下特點:內部主機較少、出接口通過撥號方式獲得臨時公網IP地址以供內部主機訪問Internet。對於這種情況,可以使用EASY IP方式使局域網用戶都通過這個IP地址接入
Internet。
(5.3)NAT類型3:NAT Server
- NAT Server是最常用的基於目的地址的NAT。當內網部署了一台服務器,其真實IP是私網地址,但是公網用戶只能通過一個公網地址來訪問該服務器,這時可以配置NAT Server,使設備將公網用戶訪問該公網地址的報文自動轉發給內網服務器。
- NAT Server功能使得內部服務器可以供外部網絡訪問。外部網絡的用戶訪問內部服務器時,NAT將請求報文的目的地址轉換成內部服務器的私有地址。對內部服務器回應報文而言,NAT還會自動將回應報文的源地址(私網地址)轉換成公網地址。
二、配置NAT
1)NAT類型1:No-PAT
- 要求Trust區域的192.168.1.0/24網段的用戶可以訪問Internet,該安全區域其
它網段的用戶不能訪問。提供的訪問Internet的公網IP地址范圍為200.1.1.10 – 200.1.1.20。 - 采用No-PAT的方式,也即只做IP地址轉換,而端口不轉換,一個私有IP獨占一個公網IP地址。
- 完成接口IP地址的配置,並將接口添加到相應安全區域。
- 配置去往Internet的默認路由:
[FW] ip route-static 0.0.0.0 0 200.1.1.254
- 配置區域間安全策略,使得192.168.1.0/24用戶能夠訪問Internet:
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 10
[FW-policy-interzone-trust-untrust-outbound-10] policy source 192.168.1.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-10] action permit
[FW-policy-interzone-trust-untrust-outbound-10] quit
[FW-policy-interzone-trust-untrust-outbound] quit
- 創建NAT地址池:
[FW] nat address-group 1 200.1.1.10 200.1.1.20
- 配置NAT策略,使得Trust區域內的192.168.1.0/24用戶訪問Internet時進行源地址換,使用NAT地址池1中的公網地址,采用No-PAT的方式:
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 10
[FW-nat-policy-interzone-trust-untrust-outbound-10] policy source 192.168.1.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-10] action source-nat
[FW-nat-policy-interzone-trust-untrust-outbound-10] address-group 1 no-pat
[FW-nat-policy-interzone-trust-untrust-outbound-10] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
配置驗證
3)NAT類型2:NAPT
- 要求Trust區域的192.168.1.0/24網段的用戶可以訪問Internet,該安全區域其
它網段的用戶不能訪問。提供的訪問Internet的公網IP地址范圍為200.1.1.10 – 200.1.1.20。 - 采用NAPT的方式,使得多個私有IP地址可共用一個公網IP地址。完成接口IP地址的配置,並將接口添加到相應安全區域。
- 配置去往Internet的默認路由:
[FW] ip route-static 0.0.0.0 0 200.1.1.254 - 配置區域間安全策略,使得192.168.1.0/24用戶能夠訪問Internet:
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 10
[FW-policy-interzone-trust-untrust-outbound-10] policy source 192.168.1.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-10] action permit
[FW-policy-interzone-trust-untrust-outbound-10] quit
[FW-policy-interzone-trust-untrust-outbound] quit
- 創建NAT地址池:
[FW] nat address-group 1 200.1.1.10 200.1.1.20 - 配置NAT策略,使得Trust區域內的192.168.1.0/24用戶訪問Internet時進行源地址換,使用NAT地址池1中的公網地址,采用NAPT的方式:
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 10
[FW-nat-policy-interzone-trust-untrust-outbound-10] policy source 192.168.1.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-10] action source-nat
[FW-nat-policy-interzone-trust-untrust-outbound-10] address-group 1 注:此處沒有使用nopat關鍵字。
[FW-nat-policy-interzone-trust-untrust-outbound-10] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
配置驗證
3)NAT類型3:NAT Server
- Internet 用 戶能 夠 訪問 處 於DMZ 區 域中 的 Server ( 真實IP地址為172.16.1.1,真實端口號為80),當Internet用戶訪問該服務器時,使用目的IP地址200.1.1.222、目的端口號8080。
- 完成接口IP地址的配置,並將接口添加到相應安全區域。
- 配置去往Internet的默認路由:
[FW] ip route-static 0.0.0.0 0 200.1.1.254
- 配置區域間安全策略,使得Internet用戶能夠訪問處於DMZ的服務器172.16.1.1的WEB服務:
[FW] policy interzone dmz untrust inbound
[FW-policy-interzone-dmz-untrust-inbound] policy 10
[FW-policy-interzone-dmz-untrust-inbound-10] policy destination 172.16.1.1 0
[FW-policy-interzone-dmz-untrust-inbound-10] policy service service-set http 注意,在配置區域間全策略時,服務類型指定的端口號為內網服務器的真實端口號,而不是映射出去的公網端口號。
[FW-policy-interzone-dmz-untrust-inbound-10] action permit
[FW-policy-interzone-dmz-untrust-inbound-10] quit
[FW-policy-interzone-dmz-untrust-inbound] quit
- 配置NAT server,將公網地址200.1.1.222的TCP端口號8080映射到私有地址172.16.1.1的TCP端口號80:
[FW] nat server protocol tcp global 200.1.1.222 8080 inside 172.16.1.1 80
如此一來,當Internet用戶訪問200.1.1.222:8080服務時,報文的目的IP地址會被轉換成172.16.1.1,同時目的TCP端口號被轉換成80。
配置驗證
(3.1)NAT Server場景及配置1
[FW] nat server global 200.1.1.100 inside 172.16.1.1
相當於IP一對一映射,也即當FW收到發往200.1.1.100的報文(任意目的端口號),都會將其目的地址轉換成172.16.1.1。
而當防火牆收到Server1(172.16.1.1)主動發出的、訪問Client的報文,也會將源地址轉換成200.1.1.100。
所以采用這種配置方式,Internet用戶能夠訪問Server,而Server也能夠主動訪問Internet。
(3.2)NAT Server場景及配置2
[FW] nat server zone untrust global 200.1.1.100 inside 172.16.1.1
增加了zone關鍵字和參數untrust,則該條nat server只向untrust區域產生作
用,也就是只有在該區域的接口上收到的報文,才會進行目的地址轉換。
(3.3)NAT Server場景及配置3
[FW] nat server zone untrust protocol tcp global 200.1.1.200 22323 inside 172.16.1.1 23
增加了protocol關鍵字及tcp參數,則當FW在其untrust接口收到發往200.1.1.200:22323的TCP流量時,它將報文的目的IP地址轉換成172.16.1.1、將目的TCP端口號轉換成23。
注:在該場景中,如果22323替換成知名端口(如23),也是可行的。
(3.4)NAT Server場景及配置4
[FW] nat server zone untrust protocol tcp global 200.1.1.200 21111 inside 172.16.1.1 23
[FW] nat server zone untrust protocol tcp global 200.1.1.200 21112 inside 172.16.1.2 23
多個不同內部服務器使用一個公網IP地址對外發布時,可以多次使用natserver命令對其進行配置,但是global-port不能相同。
(3.5)NAT Server場景及配置5
[FW] nat server zone untrust1 protocol tcp global 200.1.1.200 21111 inside 172.16.1.1 23
[FW] nat server zone untrust2 protocol tcp global 200.2.2.200 21111 inside 172.16.1.1 23
對於同一個內部服務器發布多個公網IP供外部網絡訪問的場景,如果不同公網IP所在的鏈路規划在不同的安全區域,可以通過配置針對不同的安全區域發布不同的公網IP的NAT Server來實現。
(3.6)NAT Server場景及配置6
[FW] nat server zone untrust protocol tcp global 200.1.1.200 21111 inside 172.16.1.1 23 no-reverse
[FW] nat server zone untrust protocol tcp global 200.2.2.200 21111 inside 172.16.1.1 23 no-reverse
對於同一個內部服務器發布多個公網IP供外部網絡訪問的場景,如果不同公網IP所在的鏈路規划在同一個安全區域,可以通過配置指定no-reverse參數的NAT Server來實現。指定no-reverse參數后,可以配置多個global地址和同一個inside地址建立映射關系。
指定no-reverse參數后,內部服務器主動訪問外部網絡時,設備無法將內部服務器的私網地址轉換成公網地址,內部服務器也就無法主動向外發起連接。因此,通過指定no-reverse參數可以禁止內部服務器主動訪問外部網絡。
由於配置了no-reverse參數,內部服務器將無法主動訪問外部網絡。此時,如果內部服務器想要訪問外部網絡,需要在內部服務器所在區域和外部網絡所在區域的域間配置源NAT策略,將服務器的私網地址轉換為公網地址。源NAT策略中引用的地址池可以是global地址也可以是其他的公網地址。
三、配置選項
1)靜態NAT配置
出站方向轉換
[system] natstatic outbound ip-addr1 ip-addr2
入站方向轉換
[system] natstatic inbound ip-addr1 ip-addr2
2)配置Basic NAT
- 配置ACL
用於判斷哪些數據包的地址應被轉換
被ACL允許(permit)的報文將被進行NAT轉換,被拒絕(deny)的
報文將不會被轉換 - 配置地址池
nataddress-group group-number
address start-address end-address
- 配置地址轉換
natoutbound acl-number address-group group-number no-pat
3)配置NAPT
- 配置ACL
用於判斷哪些數據包的地址應被轉換
被ACL允許(permit)的報文將被進行NAT轉換,
被拒絕(deny)的報文將不會被轉換 - 配置地址池
nataddress-group group-number
address start-address end-address
- 配置地址轉換
nat outbound acl-number address-group group-number
4)配置Easy IP
- 配置ACL
用於判斷哪些數據包的地址應被轉換
被ACL允許(permit)的報文將被進行NAT轉換,被拒絕(deny)的報文將不會被轉換 - 配置地址轉換
nat outbound acl-number
5)配置NAT Server
- NAT Server配置命令
nat server protocol pro-type global global-addr[global-port]
inside host-addr[host-port]
6)NAT的信息顯示和調試
- 顯示地址轉換信息
display nat{ address-group group-number | all |outbound port-block-group |server |statistics |session}
- 調試地址轉換過程
debugging nat{ alg|config| event |packet aclnumber }
- 清除地址轉換連接
reset natsession
四、FAQs
1)問題1 無法使用NAT公網IP訪問內網服務器
- 解決方法
2)問題2 NAT ALG
- 防火牆配置policy interzone,允許FTP Client訪問Server的TCP 21端口
- 防火牆配置NAT Server,將172.16.1.1的TCP 21端口映射到200.1.1.100的TCP 21端口
- Client無法正常訪問FTP Servre,為何?
- 解決方法
- 通常NAT只能對IP報文的頭部地址和TCP/UDP頭部的端口信息進行轉換,但是對於一些特殊的協議,比如FTP等協議,則需要由數據連接和控制連接共同完成,而且數據連接的建立要由控制連接載荷字段中的報文信息動態的決定,這就需要能夠根據控制連接的載荷字段中的報文解析出數據連接要使用的地址和端口號,也就是說設備必須能夠辨識FTP應用載荷字段中包含的端口號和地址信息,才能進行有效的NAT處理,否則可能導致NAT功能失敗。
- 為解決這一問題,當NAT功能與FTP、MSN、PPTP、QQ、RTSP、TFTP等協議共同使用時,需要在設備上配置NAT ALG(Application Level Gateway)功能,通過配置NAT ALG功能,設備對數據包進行深度解析,並改變封裝在IP報文數據部分中的IP地址和端口號信息,從而實現NAT功能。
3)問題3 防火牆雙機熱備的組網中NAT問題
- 在雙機熱備的組網環境下,兩台Eudemon的NAT配置是一致的。若NAT地址池中的地址與VRRP組的虛擬IP地址在同一網段,當上下行設備需要請求NAT地址池的ARP時,兩台Eudemon都會回應ARP報文,從而造成沖突,影響正常業務的運行。
- 在這種情況下,需要在主用設備上將NAT地址池與連接外網的接口上的VRRP組進行綁定,使業務流量能送到主用設備。因為只有主用設備NAT地址池中的IP地址會應答ARP請求,並且應答報文中攜帶的MAC地址為VRRP組的虛擬MAC地址。
- 因此配置NAT地址池時要關聯VRRP的組ID:nat address-group 1 10.1.1.10 10.1.1.20 vrrp 3
- 由於部署了防火牆雙機熱備,因此在主設備FW1上所配置的上述策略會同步到備份設備FW2上。