Layer3 NAT

session 1 NAT

NAT:network address translations 网络地址转换,用于解决iPv4地址不足等问题设计,将私有地址转换成公有地址访问Internet的技术。


session 2 NAT术语及模型
一、NAT术语:
1、内部本地地址 inside local address                内网主机ip
2、内部全局地址 inside global address             内网出口的外网ip
3、外部本地地址 outside local address             Internet服务器IP
4、外部全局地址 outside global address          Internet服务器被内网主机看到的ip,一般不做改变与3相同
 
二、NAT四种模型:
1、ip nat inside source list 1 pool mypool
      变化发生在内部,需要变的是source ip字段.具体就是满足list 1的源ip变为mypool中的ip.
      用途:使原来作为源ip的私网地址的数据包在internet中合法路由.
2、ip nat inside destination list 1 pool mypool
      变化还是在内部,需要变的是数据包目的ip字段,就是满足list 1的destination ip变为mypool中的ip.
      但这里容易产生误解destination地址变了,正常的数据包不是无法或错误的路由了么?注意这里是数据包已经被正常的路由到了本路由器.举个例子:我们常用上海热线的dns服务器202.96.209.133 当热线的路由器看到dns查询数据包中的这个目的ip时,由于配置了此命令,它知道dns查询数据包的destination ip要变化.这种变化是发生在内部的.和outside毫无关系了.
3、ip nat outside source list 1 pool mypool
      变化发生在外部,是外部访问我内部的数据包的源ip需要变.满足list 1的源ip被替换成mypool中的ip.
用      途:source 地址对于本网络的内部,可能造成混淆.可以解决相同内部网络相连的情况.(一般用不到,多用于地址欺骗。比如将外网某服务器ip转换成内网某服务器的ip,让内网用户访问外网某服务器时候访问到的地址是内网某服务器ip,结合路由策略可实现。参考youtube和youku)
4、ip nat outside destination list 1 pool mypool
      变化发生在外部,外部来访问我的网络的数据包的destination ip需要被替换成mypool中的ip地址.与第二中情况不同的是nat会发生在本端路由器路由数据包之前(这是由outside决定的).那这样导致数据包目的地址被替换掉,进而无法路由,或路由到莫名的网段,其它主机会收到莫名其妙的流量.
      用途:如果这还是用途的话,可以把外部的流量引到某台host上(host地址在mypool中),host的使用者是从来不刷牙的家伙!
关于inside destination这条命令,很多书中谈到的是用作负载均衡使用的。也有人说outside destination这条命令式用来负载均衡的。这么一来,初学者肯定是懵了,到底是怎么搞的。
      其实这两种说法都是对的,因为两者结合在一起,就可以很好的实现负载均衡。
      记得HSRP这个命令的作用么?采用热备命令,用两台路由器实现网路流量的负载均衡,standby IP 中的IP其实是个虚拟的。同理,再实现服务器的负载均衡的时候,也需要一个虚拟的服务器,这个服务器可以不存在。

      内网真实服务器IP,192.168.0.250;192.168.0.251;192.168.0.252;192.168.0.253;192.168.0.254;虚拟服务器IP,192.168.0.249/29 ,对应公网IP,61.135.162.44。

路由器上的设定:
E0: ip nat inside
S0:ip nat outside
ip nat pool server 192.168.0.250 192.168.0.254 prefix 29 rotary
ip nat outside destination static 61.135.162.44 192.168.0.249
ip nat inside destination static 192.168.0.249 pool server
以上配置可实现服务器负载均衡。
 
Session 3 实例应用配置
1、ip nat inside source:用于将私有地址转换成公有地址的NAT
如下图中R1模拟私有网络,R2模拟Internet:
192.168.1.0/24-----f0/0:R1:f1/0:172.16.1.2------172.16.1.1:f1/0:R2:192.168.1.0/24
目标:实现让私有192.168.1.0访问Internet
R1(config)#interface f0/0
R1(config-if)#ip nat inside      定义为内部接口
R1(config)#interface f1/0
R1(config-if)#ip nat outside   定义为外部接口
使用静态NAT
R1(config)#ip nat inside source static 192.168.1.10 117.22.252.198
使用动态NAT
R1(config)#ip nat inside source list 1 pool nat-isp  定义动态公网的地址池
R1(config)#ip nat pool nat-isp
使用ip多路复用的PAT
R1(config)#ip nat inside source list 101 interface f1/0 overload   所有ACL101匹配的地址访问Internet的时候转换成f1/0接口的地址(172.16.1.2假设这个是ISP分配的公有ip地址),端口多路复用实现单个ip会话的PAT
R1#show ip nat translations  查看NAT转换条目
 
2、ip nat inside destination:用于目的NAT,地址映射发布内网服务器到公网。
注意:这个命令必须严格按照下面的顺序执行,否则不生效,如果顺序已经错误,那么需要清除所有目的NAT命令,并重启设备路由器在进行正确的顺序配置。
               R1(config)#ip nat pool d-nat 192.168.1.10 192.168.1.11 prefix-length 24 type rotary 一定先敲
               R1(config)#ip nat inside destination list 1 pool d-nat  一定要在上条命令之下,不然不成功
               R1(config)#access-list 1 permit 172.16.1.1 0.0.0.0   顺序随意
      先定义内网映射的服务器地址池(192.168.1.10-11假设有两台server做热备),设置掩码24位,转换类型为rotary轮询已达到负载均衡的效果(1.10和1.11被外网用户轮询访问),ACL用来匹配那些公网ip地址被转换成了内网服务器地址。两条命令的顺序一定不能错(先创建地址池后转换),cisco的bug,不然目的NAT会无效。而且目的NAT只对TCP流量生效,udp和ip的不生效,比如telnet可以而ping就不行。但是NAT做负载均衡的缺点是当服务器down后NAT并不能进行数据路径的切换,还是将数据包轮巡的传给每个服务器,那么一些发给down的服务器的数据包就不通,造成网络中出现部分丢包现象。
      解释:当外部ip访问172.16.1.1时,转换为内网服务器地址192.168.1.10和1.11(轮询)。ACL list 1 被转换为ip pool中的ip(当目的转换,访问ACL1内的ip时)
 
3、ip nat outside source:用于外部地址的隐藏,将外网地址转换成一个内部地址。

4、ip nat outside destination:


Session 4用于重叠地址的网络之间的NAT
Layer3 NAT_第1张图片
      如上图中R1连接的网络中有19.168.1.0网络,而R2连接的内网也有192.168.1.0网络,为了让R1网络和R2网络通信,除了重新规划ip地址外,可以用NAT,但是命令与普通nat不同,如下拓扑:
192.168.1.0/24-----f0/0:R1:f1/0:172.16.1.1------172.16.1.2:f1/0:R2:192.168.1.0/24
做地址转换在R1或者R2上都可以,以R1为例:
不能确定接口的类型的话使用enable命令,不区分inside和outside类型,多用于2个地址重叠的内网间的NAT
R1#interface f0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#ip nat enable                                          端口类型支持双向nat
R1(config-if)#exit
R1(config)#interface f1/0
R1(config-if)#ip address 172.16.1.1 255.255.255.0
 
session 5 NAT命令参数详解
1、NAT查看命令
show ip nat translations
show ip nat statistics
clear ip nat translations *   清空nat表项
2、NAT参数详解
R1(config)#ip nat ?
  Stateful      Stateful NAT configuration commands         
  create        Create flow entries                     是否创建静态NAT子条目,默认是创建,可以no掉,节省内存
                                                                        R1(config)#no ip nat create flow-entries不创建子条目
  inside         Inside address translation       内网口地址定义
  log             NAT Logging                           针对于NAT产生syslog,一般不开防止负载过大死机
  outside      Outside address translation    外网口地址定义
  piggyback-support                                    语音电话的NAT相关
  pool            Define pool of addresses       用于定义转换用的地址池
  service        Special translation for application using non-standard port    语音电话的NAT相关
  sip-sbc       语音NAT相关
  portmap    语音NAT相关
  source        Source address translation     重叠地址的网络之间的NAT
  translation  NAT translation entry configuration  对NAT的转换进行策略调整,例如:
                      1、R1(config)#ip nat translation timeout 300   设置NAT条目300s后超时,自动清除
                      2、R1(config)#ip nat translation max-entries 5000   设置NAT转换条目的最大值5000个
R1(config)#ip nat translation max-entrie ?        
  <1-2147483647>  Number of entries    设置NAT总条目限制
  all-host        Specify maximum number of NAT entries for each host  每个主机能创建NAT会话条目限制
  all-vrf         Specify maximum number of NAT entries for each vrf       每个虚拟转发的NAT条目
  host            Specify per-host NAT entry limit                                        特定的主机的NAT条目
  list            Specify access list based NAT entry limit                             ACL匹配的地址的NAT会话限制
  vrf             Specify per-VRF NAT entry limit                                          单个虚拟转发的NAT会话条目
 
补充:路由中inside收到的数据包是:先路由,再NAT
                   outside收到的回包数据包是:先NAT,再路由
内网-------------inside接口:R:outside接口------------------外网
R1(config-if)#ip nat enable
R1(config-if)#exit
R1(config)#ip nat source list 1 interface f1/0 overload    内有inside参数的转换命令,使用f1/0接口地址
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255      用ACL匹配那些地址能够被转换成f1/0口的地址
 
 session 6 NAT特殊配置案例
1、静态NAT端口映射,单ip多端口复用
2、单路由多ISP应用NAT解决方案
      一个网关多ISP的需求,公司网络分别有网通和电信的链路。现在需要实现所有用户流量根据访问的目地址在哪个ISP来决定转发的路径。
Layer3 NAT_第2张图片
思路:1、使用静态路由条目写出电信ISP和网通ISP的路由
          2、在网关上配置NAT条目,使用路由策略来匹配需要NAT的数据
          3、网关连接内网的接口设置为NAT内接口,外部2个接口都设置成NAT外接口
具体配置如下:在网关上
第一步、 配置数据层转发的可达性:路由
GW(config)#ip route 61.134.1.0 255.255.0.0 12.1.1.2
GW(config)#ip route 。。。。。逐条写所有的电信路由条目,几百条静态,工程师一般都有isp官方条目列表
GW(config)#ip route 134.61.1.0 255.255.0.0 13.1.1.3
GW(config)#ip route 。。。。。逐条写所有的网通路由条目,几百条静态,工程师一般都有isp官方条目列表
GW(config)#do show ip route

写静态路由的目的是保证了数据转发的准确定,如果写成两条默认路由的话,无法确保数据将走那一条路由(因为源是不固定的,如果源是用route-map固定好的话,才可以用两条默认路由来做)


第二步、用route-map匹配NAT的源
GW(config)#route-map s_net-dianxin permit 10
GW(config-route-map)#match interface f0/1
GW(config-route-map)#exit
匹配访问的目的地址是电信ip的源
GW(config)#route-map s_net-wangtong permit 10
GW(config-route-map)#match interface f1/0
GW(config-route-map)#exit

匹配访问的目的地址是网通ip的源


第三步、用NAT转换将源转换成外网地址上网
GW(config)#ip nat inside source route-map s_nat-dianxin interface f0/1 overload
GW(config)#ip nat inside source route-map s_nat-wangtong interface f1/0 overload

NAT转换的源是谁?是route-map所匹配的流量吧,因为ACL不能匹配接口所以用route-map来匹配源的流量,也因为这个route-map只是为了匹配用于NAT的源而不是做控制用的所以这里不用set相关的策略,但是为什么要写成这样,是因为NAT的特性,NAT源转换的原则是:先路由后NAT。就是说这些源ip地址需要访问外网的时候是先做了路由再做NAT的,比如某个源ip需要访问电信的某个ip,那么这个ip在进入路由器的时候是先路由查看下是否有到达电信的路由,查看后路由器发现有一条路由ip route 61.134.1.0 255.255.0.0 12.1.1.2是到达电信的路由,出接口是f0/1。路由结束后进行NAT,NAT中用route-map匹配了要从f0/1接口出去的流量(也就是要去往电信的流量),把这些流量的源ip转换成f0/1接口的外网ip地址完成了nat。


第四步、配置NAT的接口角色
GW(config)#interface f0/1
GW(config-if)#ip nat outside
GW(config-if)#exit
GW(config)#interface f1/0
GW(config-if)#ip nat outside
GW(config-if)#exit
GW(config)#interface f0/0
GW(config-if)#ip nat inside

GW(config-if)#exit


你可能感兴趣的:(Layer3 NAT)