NAT协议详解
NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換)是將IP數(shù)據(jù)報頭中的IP地址轉(zhuǎn)換為另一個IP地址的過程。在實際應(yīng)用中,NAT主要用于實現(xiàn)私有網(wǎng)絡(luò)訪問公共網(wǎng)絡(luò)的功能。這種通過使用少量的公網(wǎng)IP地址代表較多的私網(wǎng)IP地址的方式,將有助于減緩可用IP地址空間的枯竭。
私網(wǎng)IP地址是指內(nèi)部網(wǎng)絡(luò)或主機的IP地址,公網(wǎng)IP地址是指在因特網(wǎng)上全球唯一的IP地址。
RFC 1918為私有網(wǎng)絡(luò)預(yù)留出了三個IP地址塊,如下:
A類:10.0.0.0~10.255.255.255
B類:172.16.0.0~172.31.255.255
C類:192.168.0.0~192.168.255.255
(上述三個范圍內(nèi)的地址不會在因特網(wǎng)上被分配,因此可以不必向ISP或注冊中心申請而在公司或企業(yè)內(nèi)部自由使用。)
NAT最初的設(shè)計目的是用于實現(xiàn)私有網(wǎng)絡(luò)訪問公共網(wǎng)絡(luò)的功能,后擴展到實現(xiàn)任意兩個網(wǎng)絡(luò)間進行訪問時的地址轉(zhuǎn)換應(yīng)用,本文中將這兩個網(wǎng)絡(luò)分別稱為內(nèi)部網(wǎng)絡(luò)(內(nèi)網(wǎng))和外部網(wǎng)絡(luò)(外網(wǎng)),通常私網(wǎng)為內(nèi)部網(wǎng)絡(luò),公網(wǎng)為外部網(wǎng)絡(luò)。
內(nèi)網(wǎng)用戶主機PC(192.168.1.3)向外網(wǎng)服務(wù)器(1.1.1.2)發(fā)送的IP報文通過NAT設(shè)備。
l
NAT設(shè)備查看報頭內(nèi)容,發(fā)現(xiàn)該報文是發(fā)往外網(wǎng)的,將其源IP地址字段的私網(wǎng)地址192.168.1.3轉(zhuǎn)換成一個可在Internet上選路的公網(wǎng)地址20.1.1.1,并將該報文發(fā)送給外網(wǎng)服務(wù)器,同時在NAT設(shè)備的網(wǎng)絡(luò)地址轉(zhuǎn)換表中記錄這一映射。
l
外網(wǎng)服務(wù)器給內(nèi)網(wǎng)用戶發(fā)送的應(yīng)答報文(其初始目的IP地址為20.1.1.1)到達NAT設(shè)備后,NAT設(shè)備再次查看報頭內(nèi)容,然后查找當前網(wǎng)絡(luò)地址轉(zhuǎn)換表的記錄,用內(nèi)網(wǎng)私有地址192.168.1.3替換初始的目的IP地址。
上述的NAT過程對終端(如圖中的Host和Server)來說是透明的。對外網(wǎng)服務(wù)器而言,它認為內(nèi)網(wǎng)用戶主機的IP地址就是20.1.1.1,并不知道有192.168.1.3這個地址。因此,NAT“隱藏”了企業(yè)的私有網(wǎng)絡(luò)。
地址轉(zhuǎn)換的優(yōu)點在于,在為內(nèi)部網(wǎng)絡(luò)主機提供了“隱私”保護的前提下,實現(xiàn)了內(nèi)部網(wǎng)絡(luò)的主機通過該功能訪問外部網(wǎng)絡(luò)的資源。但它也有一些缺點:
l
由于需要對數(shù)據(jù)報文進行IP地址的轉(zhuǎn)換,涉及IP地址的數(shù)據(jù)報報文的報頭不能被加密。在應(yīng)用協(xié)議中,如果報文中有地址或端口需要轉(zhuǎn)換,則報文不能被加密。例如,不能使用加密的FTP連接,否則FTP協(xié)議的port命令不能被正確轉(zhuǎn)換。
l
網(wǎng)絡(luò)調(diào)試變得更加困難。比如,某一臺內(nèi)部網(wǎng)絡(luò)的主機試圖攻擊其它網(wǎng)絡(luò),則很難指出究竟哪一臺主機是惡意的,因為主機的IP地址被屏蔽了。
地址轉(zhuǎn)換控制
在實際應(yīng)用中,我們可能希望某些內(nèi)部網(wǎng)絡(luò)的主機可以訪問外部網(wǎng)絡(luò),而某些主機不允許訪問,即當NAT設(shè)備查看IP數(shù)據(jù)報文的報頭內(nèi)容時,如果發(fā)現(xiàn)源IP地址屬于禁止訪問外部網(wǎng)絡(luò)的內(nèi)部主機,它將不進行地址轉(zhuǎn)換。另外,也希望只有指定的公網(wǎng)地址才可用于地址轉(zhuǎn)換。
設(shè)備可以利用ACL(Access Control Limit,訪問控制列表)和地址池來對地址轉(zhuǎn)換進行控制。
l
訪問控制列表可以有效地控制地址轉(zhuǎn)換的使用范圍,只有滿足訪問控制列表規(guī)則的數(shù)據(jù)報文才可以進行地址轉(zhuǎn)換。
l
地址池是用于地址轉(zhuǎn)換的一些連續(xù)的公網(wǎng)IP地址的集合,它可以有效地控制公網(wǎng)地址的使用。用戶可根據(jù)自己擁有的合法IP地址數(shù)目、內(nèi)部網(wǎng)絡(luò)主機數(shù)目以及實際應(yīng)用情況,定義合適的地址池。在地址轉(zhuǎn)換的過程中,NAT設(shè)備將會從地址池中挑選一個IP地址作為數(shù)據(jù)報文轉(zhuǎn)換后的源IP地址。
NAT實現(xiàn)
基本地址轉(zhuǎn)換
從的地址轉(zhuǎn)換過程可見,當內(nèi)部網(wǎng)絡(luò)訪問外部網(wǎng)絡(luò)時,地址轉(zhuǎn)換將會選擇一個合適的外部地址,來替代內(nèi)部網(wǎng)絡(luò)數(shù)據(jù)報文的源地址。中是選擇NAT設(shè)備出接口的IP地址(公網(wǎng)IP地址)。這樣所有內(nèi)部網(wǎng)絡(luò)的主機訪問外部網(wǎng)絡(luò)時,只能擁有一個外部網(wǎng)絡(luò)的IP地址,因此,這種情況同時只允許最多有一臺內(nèi)部網(wǎng)絡(luò)主機訪問外部網(wǎng)絡(luò)。
當內(nèi)部網(wǎng)絡(luò)的多臺主機并發(fā)的要求訪問外部網(wǎng)絡(luò)時,NAT也可實現(xiàn)對并發(fā)性請求的響應(yīng),允許NAT設(shè)備擁有多個公有IP地址。當?shù)谝粋€內(nèi)網(wǎng)主機訪問外網(wǎng)時,NAT選擇一個公有地址IP1,在地址轉(zhuǎn)換表中添加記錄并發(fā)送數(shù)據(jù)報;當另一內(nèi)網(wǎng)主機訪問外網(wǎng)時,NAT選擇另一個公有地址IP2,以此類推,從而滿足了多臺內(nèi)網(wǎng)主機訪問外網(wǎng)的請求。
NAT設(shè)備擁有的公有IP地址數(shù)目要遠少于內(nèi)部網(wǎng)絡(luò)的主機數(shù)目,因為所有內(nèi)網(wǎng)主機并不會同時訪問外網(wǎng)。公有IP地址數(shù)目的確定,應(yīng)根據(jù)網(wǎng)絡(luò)高峰期可能訪問外網(wǎng)的內(nèi)網(wǎng)主機數(shù)目的統(tǒng)計值來確定
NAPT
NAPT(Network Address Port Translation,網(wǎng)絡(luò)地址端口轉(zhuǎn)換)是基本地址轉(zhuǎn)換的一種變形,它允許多個內(nèi)部地址映射到同一個公有地址上,也可稱之為“多對一地址轉(zhuǎn)換”。
NAPT同時映射IP地址和端口號:來自不同內(nèi)部地址的數(shù)據(jù)報的源地址可以映射到同一外部地址,但它們的端口號被轉(zhuǎn)換為該地址的不同端口號,因而仍然能夠共享同一地址,也就是“私有地址+端口號”與“公網(wǎng)IP地址+端口號”之間的轉(zhuǎn)換
三個帶有內(nèi)部地址的數(shù)據(jù)報文到達NAT設(shè)備,其中報文1和報文2來自同一個內(nèi)部地址但有不同的源端口號,報文1和報文3來自不同的內(nèi)部地址但具有相同的源端口號。通過NAPT映射,四個數(shù)據(jù)報的源IP地址都被轉(zhuǎn)換到同一個外部地址,但每個數(shù)據(jù)報都被賦予了不同的源端口號,因而仍保留了報文之間的區(qū)別。當各報文的回應(yīng)報文到達時,NAT設(shè)備網(wǎng)關(guān)仍能夠根據(jù)回應(yīng)報文的目的地址和端口號來區(qū)別該報文應(yīng)轉(zhuǎn)發(fā)到的內(nèi)部主機。
采用NAPT可以更加充分地利用IP地址資源,實現(xiàn)更多內(nèi)部網(wǎng)絡(luò)主機對外部網(wǎng)絡(luò)的同時訪問。
3.內(nèi)部服務(wù)器NAT隱藏了內(nèi)部網(wǎng)絡(luò)的結(jié)構(gòu),具有“屏蔽”內(nèi)部主機的作用,但是在實際應(yīng)用中,可能需要給外部網(wǎng)絡(luò)提供一個訪問內(nèi)網(wǎng)主機的機會,如給外部網(wǎng)絡(luò)提供一臺Web服務(wù)器,或是一臺FTP服務(wù)器。
NAT設(shè)備提供的內(nèi)部服務(wù)器功能,就是通過靜態(tài)配置“公網(wǎng)IP地址+端口號”與“私網(wǎng)IP地址+端口號”間的映射關(guān)系,實現(xiàn)公網(wǎng)IP地址到私網(wǎng)IP地址的“反向”轉(zhuǎn)換。例如,可以將20.1.1.1:8080配置為內(nèi)網(wǎng)某Web服務(wù)器的外部網(wǎng)絡(luò)地址和端口號供外部網(wǎng)絡(luò)訪問。外部網(wǎng)絡(luò)用戶訪問內(nèi)部網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)報文經(jīng)過NAT設(shè)備時,NAT設(shè)備根據(jù)報文的目的地址查找地址轉(zhuǎn)換表項,將訪問內(nèi)部服務(wù)器的請求報文的目的IP地址和端口號轉(zhuǎn)換成內(nèi)部服務(wù)器的私有IP地址和端口號。當內(nèi)部服務(wù)器回應(yīng)該報文時,NAT設(shè)備再根據(jù)已有的地址映射關(guān)系將回應(yīng)報文的源IP地址和端口號轉(zhuǎn)換成公網(wǎng)IP地址和端口號。
4. DNS mapping一般情況下,DNS服務(wù)器和訪問私網(wǎng)服務(wù)器的用戶都在公網(wǎng),通過在NAT設(shè)備的公網(wǎng)接口上配置內(nèi)部服務(wù)器,可以將公網(wǎng)地址、端口等信息映射到私網(wǎng)內(nèi)的服務(wù)器上,使得公網(wǎng)用戶可以通過內(nèi)部服務(wù)器的域名或公網(wǎng)地址來訪問內(nèi)部服務(wù)器。但是,如果DNS服務(wù)器在公網(wǎng),私網(wǎng)用戶希望通過域名來訪問私網(wǎng)的Web服務(wù)器,則會由于DNS服務(wù)器向私網(wǎng)用戶發(fā)送的響應(yīng)報文中包含的是私網(wǎng)服務(wù)器的公網(wǎng)地址,而導(dǎo)致收到響應(yīng)報文的私網(wǎng)用戶無法利用域名訪問私網(wǎng)服務(wù)器。通過在設(shè)備上配置DNS mapping可以解決該問題。
DNS mapping功能是指,通過配置“域名+公網(wǎng)IP地址+公網(wǎng)端口號+協(xié)議類型”的映射表,建立內(nèi)部服務(wù)器域名與內(nèi)部服務(wù)器公網(wǎng)信息的對應(yīng)關(guān)系。在配置了NAT的接口上,設(shè)備檢查接收到的DNS響應(yīng)報文,根據(jù)報文中的域名查找用戶配置的DNS mapping映射表,并根據(jù)表項內(nèi)的“公網(wǎng)地址+公網(wǎng)端口+協(xié)議類型”信息查找內(nèi)部服務(wù)器地址映射表中該信息對應(yīng)的私網(wǎng)地址,替換DNS查詢結(jié)果中的公網(wǎng)地址。這樣,私網(wǎng)用戶收到的DNS響應(yīng)報文中就包含了要訪問的內(nèi)部服務(wù)器的私網(wǎng)地址,也就能夠使用內(nèi)部服務(wù)器域名訪問同一私網(wǎng)內(nèi)的內(nèi)部服務(wù)器。
5. Easy IPEasy IP功能是指進行地址轉(zhuǎn)換時,直接使用接口的外網(wǎng)IP地址作為轉(zhuǎn)換后的源地址,能夠最大程度的節(jié)省IP地址資源。它也可以利用訪問控制列表控制哪些內(nèi)部地址可以進行地址轉(zhuǎn)換。
6. NAT支持的特殊協(xié)議NAT不僅實現(xiàn)了一般的地址轉(zhuǎn)換功能,同時提供了完善的地址轉(zhuǎn)換ALG(Application Layer Gateway,應(yīng)用級網(wǎng)關(guān))機制,使其可以支持一些特殊的應(yīng)用協(xié)議,而不需要對NAT平臺進行任何的修改,具有良好的可擴充性。這些特殊協(xié)議的報文載荷里攜帶了地址或端口信息,該信息也可能需要進行地址轉(zhuǎn)換。
可支持的特殊協(xié)議包括:FTP(File Transfer Protocol,文件傳輸協(xié)議)、ICMP(Internet Control Message Protocol,因特網(wǎng)控制消息協(xié)議)、DNS(Domain Name System,域名系統(tǒng))、ILS(Internet Locator Service,Internet定位服務(wù))、H.323、SIP(Session Initiation Protocol,會話發(fā)起協(xié)議)、NetMeeting 3.01、NBT(NetBIOS over TCP/IP,基于TCP/IP的網(wǎng)絡(luò)基本輸入輸出系統(tǒng))等。
轉(zhuǎn)載于:https://www.cnblogs.com/dapaitou2006/p/5911418.html
總結(jié)
- 上一篇: java8--IO(java疯狂讲义3复
- 下一篇: 面向对象编程其实很简单——Python