转载自擒贼先擒王的博客NAT 详解
NAT英文全称是“Network Address Translation”;中文意思是“网络地址转换”;它是一个IETF(Internet Engineering Task Force, Internet工程任务组)标准;允许一个整体机构以一个公用IP;Internet Protocol;地址出现在Internet上。顾名思义;它是一种把内部私有网络地址;IP地址;翻译成合法网络IP地址的技术。NAT 可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上。NAT路由器在将内部网络的数据包发送到公用网络时;在IP包的报头把私有地址转换成合法的IP地址。
RFC1918规定了三块专有的地址;作为私有的内部组网使用;
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
这三块私有地址本身是可路由的;只是公网上的路由器不会转发这三块私有地址的流量;当一个公司内部配置了这些私有地址后;内部的计算机在和外网通信时;公司的边界路由会通过NAT或者PAT技术;将内部的私有地址转换成外网IP;外部看到的源地址是公司边界路由转换过的公网IP地址;这在某种意义上也增加了内部网络的安全性。
NAT有三种类型;
Basic NAT是一种把一组IP地址映射成另一组IP地址的方法;映射的过程在IP中继设备上完成;对用户完全透明。NAPT则要复杂一些;它把许多;不能太多;IP地址连同TCP/UDP端口号映射到单独一个IP地址和端口号上。无论是Basic NAT还是NAPT都提供一种把内部的私有地址转换成在公网上可用的全球唯一IP地址的方法。
对于网络地址转换技术来讲;最重要的一点是;在配置 NAT 的路由器上形成了 NAT 转换表;这个转换表的形成是非常关键的。配置 NAT 后;能形成正确的转换表;那么我们的工作就算成功了。
NAT 在outside口生效;所有在inside口需要先路由,在outside口先nat。
ip nat inside source:
将内部局部地址转换为内部全局地址;数据方向inside->outside,在outside上执行转换;
ip nat inside destination:
将内部全局地址转换为内部局部地址;数据方向outside->inside,在outside上执行转换
ip nat outside source:
将外部全局地址转换为外部局部地址;数据方向outside->inside,在outside上执行转换;
NAT的应用分类;
ip nat source;
;1; 静态 nat的映射;永远一个ip对应另外一个ip。
ip nat inside source static A.B.C.D A.B.C.D
;2; 动态 nat的映射;每次一个IP会对应另外一个公网的IP;
ip nat inside source list 2 pool qing
;3; 动态PAT映射;pool里面只有一个IP。
ip nat inside source list 2 pool qing overload
;4; 静态PAT映射;
ip nat inside source list 3 interface fastEthernet 0/0 overload
ip nat inside destination:
(5) tcp负载均衡;外网主动发起流量访问内网服务器。只用动态;没有静态。
ip nat inside destination list 10 pool feng
ip nat outside source:
当两端同时做nat既inside和outside需要同时翻译并出现地址冲突的时候需要用outside source和其他同时命令同时实现。
了解原理之前先了解下NAT 术语。
在配置了 NAT 的路由器上;可以把整个网络分成两部分;内部网络和 外部网络。
NAT 技术中有四个术语;
内部本地地址;Inside Local;;内网中设备所使用的IP地址内部全局地址;Inside Global;;对于外部网络来说;局域网内部主机所表现的 IP 地址。外部本地地址;Outside Local;;外部网络主机的真实地址。外部全局地址;Outside Global;;对于内部网络来说;外部网络主机所表现的 IP 地址。外网设备所使用的真正的地址。local 、global 是相对于端口状态说的;local是inside部分可以被路由的;global是outside部分可以被路由的。
网络地址转换常常和代理服务搞混;但是它们之间有明确的不同。NAT 对源和目的计算机都是透明的。没有任何一方会意识到它正在和第三方设备打交道。但是代理服务却不是透明的。源计算机知道它正向代理服务器发起一个请求;而且你还必须进行配置才能这样做。目的计算机会认为代理服务器就是与它直接通信的源计算机。还有;代理服务通常工作在 OSI 参考模型的第 4 层 (传输层) 或更高;而 NAT 工作在第 3 层 (网络层)。由于代理服务工作在更高层;所以通常它将比 NAT 要慢。
NAT 工作在 OSI 参考模型的网络层 (第3层) 是有道理的;因为路由器就工作在这一层;
NAT设备维护一个状态表;用来把非法的IP地址映射到合法的IP地址上去。每个包在NAT设备中都被翻译成正确的IP地址;发往下一级;这意味着给处理器带来了一定的负担。但对于一般的网络来说;这种负担是微不足道的。在运行NAT的路由器中;当数据包被传送时;NAT可以转换数据包的IP地址和TCP/UDP数据包的端口号。设置NAT功能的路由器至少要有一个Inside;内部;端口和一个Outside;外部;端口。内部端口连接内网的用户;外部端口一般连接到Internet。当IP数据包离开内部网络时;NAT负责将内网IP源地址;通常是专用地址;转换为合法的公共IP地址。当IP数据包进入内网时;NAT将合法的公共IP目的地址转换为内网的IP源地址。
NAT的基本工作原理是;当私有网主机和公共网主机通信的IP包经过NAT网关时;将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
当内部网络中的一台主机想传输数据到外部网络时;它先将数据包传输到NAT路由器上;路由器检查数据包的报头;获取该数据包的源IP信息;并从它的NAT映射表中找出与该IP匹配的转换条目;用所选用的内部全局地址;全球唯一的IP地址;来替换内部局部地址;并转发数据包。
当外部网络对内部主机进行应答时;数据包被送到NAT路由器上;路由器接收到目的地址为内部全局地址的数据包后;它将用内部全局地址通过NAT映射表查找出内部局部地址;然后将数据包的目的地址替换成内部局部地址;并将数据包转发到内部主机。
其实主要就是 修改 IP 数据包中的源 IP 地址;或目的 IP 地址。主要目的是把 RFC1918所提议的私有地址转变成在 Internet 上可路由的公有合法地址。对于某些有限的应用;如 DNS、 FTP 等;;它也可以修改 IP 数据包有效载荷中的地址。由于应用的复杂性; NAT 目前支持的应用有限;当然;如果需要;完全可以针对新的应用做相应的开发工作。
总体来说;NAT进行地址转换的过程就是“本地地址”与“全局地址”之间的转换过程;无论数据包是从内部网络发往外部网络;还是从外部网络发往内部网络。不同的只是本地地址和全局地址所对应的网络不同;以及数据包重新封装的源和目的地址不同。具体如图所示。
这个过程是通过NAT中的本地址与全局地址映射条目来实现的;所以事先要在NAT路由器上配置这样的映射条目。
当内部网络用户访问外部网络时;所进行的是“内部本地地址”和“内部全局地址”之间的转换。
在NAT路由器接收到来自内部网络主机发送的数据包时;其源IP地址;SA;为“内部本地地址”;目的IP地址;DA;为“外部本地地址”。当数据包被转发到外部网络时;数据包的源IP地址;SA;就会转变为“内部全局地址”;而目的IP地址;DA;被转变为“外部全局地址”。也就是把数据包的所有源IP地址;SA;和目的IP地址;DA;全部由本地地址转换为全局地址。如图6-9上部分数据包IP地址转换示意图。
相反;当外部网络用户访问内部网络时;所进行的是“外部本地地址”和“外部全局地址”之间的转换。
在NAT路由器接收到来自外部网络主机发送的数据包时;其源IP地址;SA;就是“外部全局地址”;目的IP地址;DA;就是“内部全局地址”。相当于由内部网络向外部网络发送数据包时数据包中的源IP地址;SA;和目的IP地址;DA;的互换。而当数据包被路由器转发到本地网络时;源IP地址;SA;被转变为“外部本地地址”;目的IP地址;DA;被转变为“内部本地地址”;也相当于由内部网络向外部网络发送数据包时数据包中的源IP地址;SA;和目的IP地址;DA;的互换。如图6-9下部分数据包IP地址转换示意图