NAT(Network Address Translation,網絡地址轉換)是1994年提出的。當在專用網內部的一些主機原本已經分配到了本地IP地址(即僅在本專用網內使用的專用地址),但如今又想和因特網上的主機通訊(並不須要加密)時,可以使用NAT方法html
藉助於NAT,私有(保留)地址的"內部"網絡經過路由器發送數據包時,私有地址被轉換成合法的IP地址,一個局域網只需使用少許IP地址(甚至是1個)便可實現私有地址網絡內全部計算機與Internet的通訊需求。web
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的***。所以,目前網絡中應用最多的就是端口多路複用方式。vim
(1)NAT的優勢
節省共有合法IP地址
處理地址重疊
加強靈活性
安全性安全(2)NAT缺點
延遲增大
配置和維護的複雜性
不支持某些應用,能夠經過靜態NAT映射來避免服務器
內部局部地址 外部局部地址 內部全局地址 外部全局地址
簡單轉換條目 擴輾轉換條目
SW#conf t SW(config)#no ip routing //關閉路由功能 SW(config)#int f1/0 //進入端口f1/0 SW(config-if)#speed 100 //配置速率 SW(config-if)#dup full //配置全雙工模式 SW(config-if)#ex
R1#conf t R1(config)#int f0/0 R1(config-if)#ip add 192.168.100.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#int f0/1 R1(config-if)#ip add 12.0.0.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#ex R1(config)#ip route 0.0.0.0 0.0.0.0 12.0.0.2 ##配置爲默認路由
R2#conf t R2(config)#int f0/0 R2(config-if)#ip add 12.0.0.2 255.255.255.0 R2(config-if)#no shut R2(config-if)#int f0/1 R2(config-if)#ip add 13.0.0.1 255.255.255.0 R2(config-if)#no shut R2(config-if)#ex R2(config)#ip route 0.0.0.0 0.0.0.0 12.0.0.1 //配置默認路由
配置pc機的ip地址
測試全網互通性
R1(config)#ip nat inside source static 192.168.100.10 12.0.0.10 R1(config)#ip nat inside source static 192.168.100.20 12.0.0.20 R1(config)#int f0/0 R1(config-if)#ip nat inside //將NAT應用於內部 R1(config)#int f0/1 R1(config-if)#ip nat out //將NAT應用於內部 R1#debug ip nat //測試NAT地址 IP NAT debugging is on
PC1> ping 13.0.0.13 13.0.0.13 icmp_seq=1 timeout 13.0.0.13 icmp_seq=2 timeout 84 bytes from 13.0.0.13 icmp_seq=3 ttl=62 time=41.886 ms 84 bytes from 13.0.0.13 icmp_seq=4 ttl=62 time=38.922 ms R1# *Mar 1 00:30:38.259: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1514] R1# *Mar 1 00:30:40.259: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1515] R1# *Mar 1 00:30:42.263: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1516] *Mar 1 00:30:42.291: NAT*: s=13.0.0.13, d=12.0.0.10->192.168.100.10 [1516] R1# *Mar 1 00:30:43.307: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1517] *Mar 1 00:30:43.335: NAT*: s=13.0.0.13, d=12.0.0.10->192.168.100.10 [1517] R1# *Mar 1 00:30:44.347: NAT*: s=192.168.100.10->12.0.0.10, d=13.0.0.13 [1518] *Mar 1 00:30:44.379: NAT*: s=13.0.0.13, d=12.0.0.10->192.168.100.10 [1518] //出方向將源地址s=192.168.100.10轉換成12.0.0.10,回方向將 目標地址d=12.0.0.10轉換成192.168.100.10
一臺Linux做爲提供服務的服務器 一臺win7做爲公網的客戶端
[root@192 ~]# yum install httpd -y //安裝服務 [root@192 ~]# vim /var/www/html/index.html //編輯測設網頁 <hl>this is inside web</hl> [root@192 ~]# systemctl start httpd //開啓服務 [root@192 ~]# systemctl stop firewalld.service //關閉防火牆 [root@192 ~]# setenforce 0 //關閉加強型安全功能
[root@192 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 ##修改固定ip [root@192 ~]# service network restart ##重啓網卡服務
R1#conf t ##全局模式 R1(config)#int f0/0 ##進入接口 R1(config-if)#ip add 192.168.100.1 255.255.255.0 ##配置網關 R1(config-if)#no shut ##開啓 R1(config-if)#ex R1(config)#int f0/1 R1(config-if)#ip add 12.0.0.1 255.255.255.0 R1(config-if)#no shut R1(config-if)#ex
R1#conf t R1(config)#ip nat inside source static tcp 192.168.100.100 80 12.0.0.100 8080 extendable //內部端口啓用NAT,tcp協議,IP地址加端口,映射外部網地址加端口,後面必定要加個擴展extendable on Interface NVI0, changed state to up R1(config)#int f0/0 ##進入接口f0/0 R1(config-if)#ip nat inside //設置爲內部 R1(config-if)#int f0/1 ##進入接口f0/1 R1(config-if)#ip nat outside //設置爲外部 R1(config-if)#end R1#debug ip nat //測試啓動端口映射 IP NAT debugging is on
R1# *Mar 1 00:09:18.395: NAT*: TCP s=49163, d=8080->80 *Mar 1 00:09:18.395: NAT*: s=12.0.0.12, d=12.0.0.100->192.168.100.100 [119] //抓取到端口與地址轉換的過程,實現NAT端口映射