網絡基本功(十九):細說NAT原理與配置安全
轉載請在文首保留原文出處:EMC中文支持論壇https://community.emc.com/go/chinese 服務器
NAT技術讓少數公有IP地址被使用私有地址的大量主機所共享。這一機制容許遠多於IP地址空間所支持的主機共享網絡。同時,因爲NAT屏蔽了內部網絡,也爲局域網內的機器提供了安全保障。網絡
NAT的基本實施過程包括使用一個預留給本地IP網絡的私有地址成立組織的內部網絡,同時分配給組織一個或多個公網IP地址,並在本地網絡與公網之間安裝一個或多個具備NAT功能的路由器。NAT路由器實現的功能包括將數據報中私網地址轉換成公網地址,反向亦然。當有報文經過時,網絡地址轉換其不只檢查報文信息,還將報文頭中的IP地址和端口信息進行修改,以使處於NAT以後的機器共享少數公網IP地址。ide
什麼時候使用NAT?工具
由於NAT可以減小在網絡環境中所需的公共IP地址需求,所以當兩家公司重複內部地址合併時,這一技術是頗有幫助的。當組織改變其Internet服務供應商(ISP),但網絡管理員不想改變內部地址方案時,NAT也是一個很好用的工具。spa
如下是應用NAT的場景:blog
用戶須要訪問Internet但主機沒有全球惟一的IP地址接口
用戶更改ISP須要對網絡從新編號進程
用戶須要合併地址重複的內網ip
一般NAT應用於邊界路由器。例如,下圖中NAT應用於企業鏈接到Internet的路由器上:
NAT的優點與不足:
優點 |
不足 |
節約合法註冊地址 |
轉換致使交換路徑延時 |
解決地址重疊問題 |
致使端到端IP地址沒法追溯 |
提升訪問Internet靈活性 |
某些應用程序沒法使用 |
網絡變更無需地址從新編號 |
網絡地址轉換類型:
靜態NAT:此類NAT在本地和全局地址之間作一到一的永久映射。須注意靜態NAT要求用戶對每一臺主機都有一個真實的Internet IP地址。
動態NAT:容許用戶將一個未登記的IP地址映射到一個登記的IP地址池中的一個。採用動態分配的方法將外部合法地址映射到內部網絡,無需像靜態NAT那樣,經過對路由器進行靜態配置來將內部地址映射到外部地址,可是必須有足夠的真正的IP地址來進行收發包。
端口NAT(PAT):最爲流行的NAT配置類型。經過多個源端口,將多個未登記的IP地址映射到一個合法IP地址(多到一)。使用PAT可以使上千個用戶僅使用一個全局IP地址鏈接到Internet。
NAT術語:
NAT術語仍是比較直觀的。NAT地址轉換以後成爲全局地址。一般是Internet上使用的公網地址。若是不訪問Internet的話就不須要用到。
本地地址:NAT地址轉換以前用到的地址。內部本地地址其實是嘗試訪問Internet的發送主機的私有地址。外部本地地址一般是鏈接到用戶ISP的路由器接口,也是報文開始傳輸的公有地址。
轉換以後,內部本地地址以後被稱爲內部全局地址,而外部全局地址成爲目標主機的地址。以下表所示:
名稱 |
含義 |
內部本地 |
轉換前的源主機內部地址 |
外部本地 |
Internet上識別到源主機的地址。一般是鏈接到ISP的路由器接口——真實的Internet地址。 |
內部全局 |
轉換後鏈接到Internet的源主機地址。也是真實的Internet地址 |
外部全局 |
外部目標主機地址,一樣是真實的Internet地址 |
NAT實現細節:
下圖中,主機10.1.1.1將報文發送到有NAT功能的邊界路由器。路由器將源IP地址識別爲內部本地IP地址,在報文中轉換源IP地址,並在NAT表中記錄這次轉換。
配有新轉換源地址的報文發送到外部接口。外部主機將報文發送給目的主機而且NAT路由器經過NAT表將內部全局IP地址轉換回內部本地IP地址。
PAT方式中,全部內部主機都轉換爲一個IP地址。以下圖所示,除了內部本地IP地址和內部全局IP地址之外,還多了一個端口號。端口號幫助路由器識別哪一臺主機應當收到返回數據。路由器使用來自各主機的源端口好來區別他們各自發出的數據。注意當報文離開路由器時有一個目標端口號80,而HTTP服務器將報文發回時目的端口號爲1026。從而容許NAT轉換路由器區別NAT表中的主機而後將目的IP地址轉換回內部本地地址。
本例中,端口號在傳輸層用戶識別本地主機。若是必需要使用真實全局IP地址來識別源主機,那就只能經過靜態NAT,而且會用光全部地址。PAT容許咱們在傳輸層識別主機,從而理論上一個真實IP地址可被65,000臺主機共享。
靜態NAT配置:
ip nat inside source static 10.1.1.1 170.46.2.2
!
interface Ethernet0
ip address 10.1.1.10 255.255.255.0
ip nat inside
!
interface Serial0
ip address 170.46.2.1 255.255.255.0
ip nat outside
!
在第一個路由器輸出中, ip nat inside source 命令指定須要轉換的IP地址。本例中,此命令配置了內部本地IP地址10.1.1.1到外部全局IP地址170.46.2.2的靜態配置。
在各接口下都有一條ip nat命令。ip nat inside命令將該接口識別爲內部接口,ip nat outside命令將該接口識別爲外部接口。回頭看 ip nat inside source 命令,該命令將內部接口做爲轉換的源或起點。也能夠這樣使用:ip nat outside source。該選項代表指定的外部接口會成爲轉換的源或起點。
動態NAT配置:
動態NAT表示將一個地址池看成真實IP地址提供給內部一組用戶。因爲不使用端口號,對於同時嘗試訪問外部網絡的用戶必須提供真實的IP地址。
如下是動態NAT配置的示例輸出:
ip nat pool todd 170.168.2.3 170.168.2.254
netmask 255.255.255.0
ip nat inside source list 1 pool todd
!
interface Ethernet0
ip address 10.1.1.10 255.255.255.0
ip nat inside
!
interface Serial0
ip address 170.168.2.1 255.255.255.0
ip nat outside
!
access-list 1 permit 10.1.1.0 0.0.0.255
!
ip nat inside source list 1 pool todd 命令告知路由器將匹配access-list 1的IP地址轉換到名爲todd的IP NAT池中的一個地址。這裏ACL並非出於安全因素經過容許或拒絕數據來過濾報文。本例中,它是用來選擇或指定咱們感興趣的數據流。當數據流與接入列表相匹配,就被拉入NAT進程轉換。
命令 ip nat pool todd 170.168.2.3 192.168.2.254 netmask 255.255.255.0用來建立地址池,以後被分配給請求全局地址的主機。作Cisco NAT故障排查時,必定要檢查池中確保有足夠地址提供轉換給內部主機。最後,確保池名匹配,注意區分大小寫。
端口NAT配置:
如下是端口NAT配置的示例輸出:
ip nat pool globalnet 170.168.2.1 170.168.2.1 netmask 255.255.255.0
ip nat inside source list 1 pool globalnet overload
!
interface Ethernet0/0
ip address 10.1.1.10 255.255.255.0
ip nat inside
!
interface Serial0/0
ip address 170.168.2.1 255.255.255.0
ip nat outside
!
access-list 1 permit 10.1.1.0 0.0.0.255
端口NAT與動態NAT配置的不一樣之處在於:
地址池變爲只有一個IP地址
在ip nat inside source命令最後加入overload關鍵字。
本例中一個關鍵元素是使用了池中的一個IP地址做爲外部接口IP地址。若是有其餘可用地址如170.168.2.2可做爲額外地址,這樣作在內部大量用戶同時爲活躍狀態,須要不止一個重載IP地址時頗有幫助