一、基本概念
NAT(Network Address Translation,网络地址转换)是1994年提出的。
当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信
(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全
球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT
的说明。
概念理解:
由于地址资源的不足,在内网当中我们会使用私网地址来进行内网间的通信,当内网主机需要通过互联网去通信获取资源是需要有一
个公网地址,那边我们就需要在企业边界设备上设置地址转换把内网的私网地址通过NAT技术转换为公网地址,才能能够访问互联网。
二、技术背景
要真正了解NAT就必须先了解现在IP地址的使用情况,私有 IP 地址是指内部网络或主机的IP 地址,公有IP 地址是指在因特网上全球
唯一的IP 地址。RFC 1918 为私有网络预留出了三个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
上述三个范围内的地址不会在因特网上被分配,因此可以不必向ISP 或注册中心申请而在公司或企业内部自由使用。
随着接入Internet的计算机数量的不断猛增,IP地址资源也就愈加显得捉襟见肘。事实上,除了中国教育和科研计算机网(CERNET)
外,一般用户几乎申请不到整段的C类IP地址。在其他ISP那里,即使是拥有几百台计算机的大型局域网用户,当他们申请IP地址时,所分
配的地址也不过只有几个或十几个IP地址。显然,这样少的IP地址根本无法满足网络用户的需求,于是也就产生了NAT技术。
虽然NAT可以借助于某些代理服务器来实现,但考虑到运算成本和网络性能,很多时候都是在路由器上来实现的。
三、工作原理
借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP
地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。
NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的
数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应
用程序就不能正常工作。
①如图这个 client(终端) 的 gateway (网关)设定为 NAT 主机,所以当要连上 Internet 的时候,该封包就会被送到 NAT 主机,这个时
候的封包 Header 之 source IP(源IP) 为 192.168.1.100 ;
②而透过这个 NAT 主机,它会将 client 的对外联机封包的 source IP ( 192.168.1.100 ) 伪装成 ppp0 ( 假设为拨接情况 )这个接口所具有的
公共 IP ,因为是公共 IP 了,所以这个封包就可以连上 Internet 了,同时 NAT 主机并且会记忆这个联机的封包是由哪一个 (192.168.1.100
) client 端传送来的;
③由 Internet 传送回来的封包,当然由 NAT主机来接收了,这个时候, NAT 主机会去查询原本记录的路由信息,并将目标 IP 由 ppp0 上
面的公共 IP 改回原来的 192.168.1.100 ;
④最后则由 NAT 主机将该封包传送给原先发送封包的 Client。
四、具体实现
在操作层⾯的具体做法是边界设备把内⽹去往互联⽹的数据包中源地址换成公⽹地址,要实现这种转换需要做出转换的记录,生成
NAT转换表
数据在出去的时候查看转换表把私⽹地址转为公⽹地址 ,这种转换会发⽣的 路由⾏为之后。当数据从互联⽹回到企业边界需要查看转换表把公⽹地址转为私⽹地址,这 种转换会发⽣在路由⾏为之前。
为了区分边界设备对于数据包具体的操作细节(先路由还是先转换)那么需要对接⼝进⾏定义:
1、如果⼀个 NAT 的接⼝是连接内⽹的那么这个接⼝定义为 inside 接⼝(先路 由)2、如果⼀个 NAT 的接⼝是连接公⽹的那么这个接⼝定义为 outside 接⼝(先 转换)
即:在边界路由器上,流量从内部去往外部时,将数据包中的源ip地址进行修改(内部本地修改为内部全局);
从流量从外部进入内部时,修改目标ip地址(外部全局修改为外部本地)
五、配置
配置 --- ip nat inside source 配置:
切记:一旦进行nat配置,就必须定义边界路由器上各个接口的方向
配置接⼝的定义 :Router(config)#int g0/0Router(config-if)#ip nat inside // 内⽹接⼝Router(config-if)#int g0/2Router(config-if)#ip nat outside // 外⽹接⼝Router(config)#ip nat inside source static 10.1.1.2 100.1.1.1 // 静态转换策略集
地址转换的分类:
1、一对一:(静态)
r2(config)#ip nat inside source static 192.168.1.2 12.1.1.2
本地 全局
2、一对多:(动态)PAT --端口地址转换
将多个私有ip地址转换为同一公有ip地址,依赖数据包中的端口号来进行区分;
先使用ACL定义感兴趣流量:哪些私有ip地址被转换
r2(config)#access-list 1 permit 192.168.1.0 0.0.0.255
r2(config)#access-list 1 permit 192.168.2.0 0.0.0.255
r2(config)#ip nat inside source list 1 interface fastEthernet 1/0 overload
本地 全局 负载
3、多对多:(静态或动态)
r2(config)#access-list 2 permit 192.168.0.0 0.0.255.255 //定义内部本地地址范围
r2(config)#ip nat pool xxx 12.1.1.2 12.1.1.10 netmask 255.255.255.0 //定义内部全局地址范围
r2(config)#ip nat inside source list 2 pool xxx overload //配置多对多NAT
在配置多对多NAT时,是否携带overload将决定为静态或动态多对多;
1、不携带:静态多对多 最先来的边界路由器上的9个私有ip地址与这9个公有ip地址形成一对一;
2、携带:动态多对多 循环占和每个公有ip地址进行PAT;
内⽹服务器外放技术:把配置了私⽹地址的服务器让外⽹⽤户能够访问
端口映射:
eg:ip nat inside source static tcp 20.1.1.2 80 100.1.1.1 8080// 把内 ⽹的 20.1.1.2 的 80 端⼝访问,映射给公⽹ 100.1.1.1 的 8080 端⼝。这时候在 互联 ⽹中访问 100.1.1.1 : 8080 端⼝,就被转换到去私⽹ 20.1.1.2 : 80 的访问。
r2(config)#ip nat inside source static tcp 192.168.1.100 80 12.1.1.2 80
本地 全局
通过外部访问12.1.1.2同时目标端口为80时,目标ip地址就一定被转换为192.168.1.100,端口号80;
r2(config)#ip nat inside source static tcp 192.168.1.200 80 12.1.1.2 8080
通过外部访问12.1.1.2同时目标端口为8080时,目标ip地址就一定被转换为192.168.1.200,端口号80;