一、前言

ADC的主要作用是作為伺服器的反向代理來進行應用發布的,介於客戶端和伺服器端之間,那麼NAT就是它必然要面臨的工作。歸根結底,NAT就是ADC的數據轉發立身之本。能否支持更多、更靈活、控制力更強的NAT轉換就是衡量一個ADC是否合格的關鍵因素之一。這也對工程師提出了最基本的要求,如果連如何控制NAT都不清楚,那麼遇到各種不同的場景就無法做出對應的方案。

二、什麼是NAT

1.NAT簡介

藉助於NAT,私有(保留)地址的"內部"網路通過路由器發送數據包時,私有地址被轉換成合法的IP地址,一個區域網只需使用少量IP地址(甚至是1個)即可實現私有地址網路內所有計算機與Internet的通信需求。

NAT將自動修改IP報文的源IP地址和目的IP地址,Ip地址校驗則在NAT處理過程中自動完成。有些應用程序將源IP地址嵌入到IP報文的數據部分中,所以還需要同時對報文進行修改,以匹配IP頭中已經修改過的源IP地址。否則,在報文數據都分別嵌入IP地址的應用程序就不能正常工作。

2.NAT實現方式

NAT的實現方式有三種,即靜態轉換Static Nat、動態轉換Dynamic Nat 和 埠多路復用OverLoad。

靜態轉換是指將內部網路的私有IP地址轉換為公有IP地址,IP地址對是一對一的,是一成不變的,某個私有IP地址只轉換為某個公有IP地址。藉助於靜態轉換,可以實現外部網路對內部網路中某些特定設備(如伺服器)的訪問。

動態轉換是指將內部網路的私有IP地址轉換為公用IP地址時,IP地址是不確定的,是隨機的,所有被授權訪問上Internet的私有IP地址可隨機轉換為任何指定的合法IP地址。也就是說,只要指定哪些內部地址可以進行轉換,以及用哪些合法地址作為外部地址時,就可以進行動態轉換。動態轉換可以使用多個合法外部地址集。當ISP提供的合法IP地址略少於網路內部的計算機數量時。可以採用動態轉換的方式。

埠多路復用(Port address Translation,PAT)是指改變外出數據包的源埠並進行埠轉換,即埠地址轉換(PAT,Port Address Translation).採用埠多路復用方式。內部網路的所有主機均可共享一個合法外部IP地址實現對Internet的訪問,從而可以最大限度地節約IP地址資源。同時,又可隱藏網路內部的所有主機,有效避免來自internet的攻擊。因此,目前網路中應用最多的就是埠多路復用方式。

3.Netscaler的NAT

下面我們主要討論netscaler的NAT是如何做的,哪些參數影響到netscaler的NAT動作。

影響netscaler做NAT的參數主要分為以下8類:

ü RNAT

ü INAT

ü IP mode

ü Netprofile

ü USIP

ü MAC mode

ü Service port=*

ü Service use proxy port

我們分別針對每個參數做測試和理解,以下是環境概述

實驗環境:

Client ip:192.168.20.1

SNIP:192.168.20.11

192.168.0.21

192.168.10.11

VIP:172.16.10.10

172.16.10.11

10.10.1.2

Server ip:192.168.0.50

10.10.1.1

三、影響NAT的參數測試

1.RNAT

客戶端的網關是netscaler,但伺服器沒有客戶端的回程路由

客戶端直接訪問伺服器,網路不通

抓包情況:

因為伺服器沒有客戶端192.168.20.1的回程路由,所以ICMP無響應

Netscaler上配置RNAT

客戶端的地址由192.168.20.1被netscaler替換為192.168.10.11,遂可以訪問伺服器資源

抓包情況:

2.INAT

在netscaler上配置INAT策略,將10.10.1.2轉換為192.168.0.50

Netscaler中沒有建立10.10.1.2的vserver

抓包情況:

用戶端192.168.20.1訪問10.10.1.2被netscaler轉換為192.168.0.21訪問192.168.0.50.

用戶成功打開頁面,在INAT中也可以靈活控制源埠、源地址、目的埠等是否轉換。

3.IP mode

IP mode的工作機制是默認同時做源地址和目的地址的替換,即相當於靜態NAT

抓包情況:

用戶端192.168.20.1訪問172.16.10.10,被Netscaler替換為192.168.0.21訪問192.168.0.50

4.Netprofile

建立兩個Netprofile

將Netprofile_vs綁定到Vserver

抓包情況:

客戶端192.168.20.1訪問172.16.10.10被Netscaler替換為192.168.10.11訪問192.168.0.50,源地址不是snip:192.168.0.21而是Netprofile_vs的地址192.168.10.11

將Netprofile_vs綁定到Vserver同時將Netprofile_service綁定到service

Vserver

Service

抓包情況:

客戶端192.168.20.1訪問172.16.10.10被Netscaler替換為192.168.10.22訪問192.168.0.50,源地址而非Netprofile_vs中的192.168.10.11

通過Netprofile測試說明瞭Netprofile綁在service的優先順序高於vserver

5.USIP

保留Netprofile在service上開啟USIP,並將伺服器的網關指向netscaler

抓包情況:

用戶端192.168.20.1訪問172.16.10.10,只有目的地址被Netscaler替換為192.168.0.50,源地址不變。

此項說明一旦啟用USIP,netscaler所有基於源地址替換的操作全部禁用,不管是默認用SNIP輪訓還是指定Netprofile都不生效。

6.MAC mode

MAC mode不做目的地址替換,必須是any的協議才能啟用,主要用在LLB。

配置mac mode的VS、servicegroup、member

10.10.1.1是伺服器的第二IP

抓包情況:

客戶端192.168.20.1訪問10.10.1.1,被netscaler替換源地址192.168.10.11後直接訪問10.10.1.1,目的地址不做替換。

當然如果需要也可以控制是否做源地址、源埠、目的埠的替換。

7.Service port=*

伺服器同時開啟8000口的服務

建立兩個service

http協議的8000口和TCP協議的any口

建立兩個vserver

抓包情況:

用戶端192.168.20.1帶埠訪問172.16.10.10:3000

被NS同時替換源IP+埠和目的IP+埠,源地址變為192.168.0.21:30748目的地址變為192.168.0.50:8000.

但如果用戶訪問的是any的Vserver話目的埠不會改變

抓包情況:

用戶端192.168.20.1訪問172.16.10.11:8000

被netscaler替換為192.168.0.21:40948訪問192.168.0.50:8000

訪問過程目的埠不會改變。

8.Service use proxy port

如果想源埠也不變需要去掉use proxy port選項,同時開啟USIP

抓包情況:

用戶端192.168.20.1:4503訪問172.16.10.10:3000

被netscaler替換為192.168.20.1:4503訪問192.168.0.50:8000,源地址和源埠不做替換

四、總結:

以上展示了可以控制netscaler NAT行為的所有參數,可知netscaler有非常豐富的參數來根據需要靈活控制NAT行為(對於INAT部分有另一篇文章做詳細討論)根據數通設備習慣的NAT術語,總結了netscaler各個參數對應的NAT類型。

項目

Netscaler默認情況

Netscaler可調整情況

RNAT

動、靜態SNAT

動、靜態PNAT

INAT

靜態DNAT

靜態PNAT

IP mode

動、靜態SNAT+DNAT

動、靜態PNAT

Netprofile

動、靜態SNAT

動、靜態PNAT

USIP

靜態SNAT

靜態PNAT

MAC mode

動態SNAT(固定目的IP)

Service port=*

目的埠不變PNAT

Service use proxy port

源埠不變PNAT

動、靜PNAT


推薦閱讀:
相关文章