NAT技术与TCP负载均衡精讲

NAT作为一种减轻IPv4地址空间耗尽速度的方法,最早出现在Cisco IOS 11.2版本中。  

为什么要使用NAT
1 内网中主机过多,没有足够的合法IP地址可用。
2 当ISP发生变化时,使用NAT技术避免了IP地址的重新编址。
3 当两个合并的网络中出现了重复地址的时候。
4 利用NAT来解决TCP的负载均衡问题。
5 隐藏内部网络,增强安全性。
 
NAT就是将内网中使用的私有地址转换成可在Internet上进行路由的合法地址的技术。
私有地址范围:
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172..31.255.255
192.168.0.0 ~ 192.168.255.255
 
NAT技术主要分为NAT和PAT。
NAT是从内部本地地址到内部全局地址的一对一转换。
PAT是从多个内部本地地址到内部全局地址的多对一转换。通过端口号确定其多个内部主机的唯一性。
 
NAT术语
Inside network:需要翻译成外部地址的内部网络。
Outside network:使用合法地址进行通信的外部网络。
Local address:内部网络使用的地址。
Global address:外部网络使用的地址。
Inside local address:内部本地地址。数据在内部网络使用的地址,一般为private ip address。
Inside global address:内部全局地址。数据为了到达外部网络,用来代表inside local address的地址,一般为ISP提供的合法地址。
Outside local address:外部本地地址,不必是合法地址。当外部网络数据到达内部网络,外部网络中的主机IP地址与内部网络中的主机处在同一网段时,为防止内部主机误认外部主机与自己在同一网段而广播ARP请求,造成无法通信,将外部主机的地址转换成外部本地地址之后再与内部主机进行通信。
Outside global address:数据在外部网络使用的地址,是个合法地址。
Simple translation entry:把一个IP地址映射到另外一个地址上的一对一的翻译方式。
Extended translation entry:把IP地址和端口(port)的组合翻译成另外一个地址和端口的组合。
Static address translation:静态地址翻译,把一个local对应到一个global上去。
Dynamic address translation:动态翻译,local和global池(pool)建立动态对应关系。
Port address translation(PAT):通过使用地址和端口的结合来达到多个local对应一个global的状态。端口号用来确定每个local的唯一性。这样的技术也叫超载(overloading)。
 
NAT的优缺点
优点:
1 极大的节省了合法的IP地址。
2 能够处理地址重复情况,避免了地址的重新编号,增加了编址的灵活性。
3 隐藏了内部网络地址,增强了安全性。
4 可以使多个使用TCP负载特性的服务器之间实现基本的数据包负载均衡。
缺点:
1 由于NAT要在边界路由器上进行地址的转换,增大了传输的延迟。
2 由于NAT改动了IP地址,失去了跟踪端到端IP流量的能力。当出现恶意流量时,会使故障排除和流量跟踪变的更加棘手。
3 不支持一些特定的应用程序。如早期版本的MSN。
4 增大了资源开销。处理NAT进程增加了CPU的负荷,并需要更多内存来存储NAT表项。
 
配置NAT
inside & outside
每个包含了NAT进程的接口必须被指定为内部接口或外部接口,但不能被同时指定为这两个接口。在路由器上,必须至少有一个接口被配置成内部接口,一个接口被配置成外部接口。这样路由器就知道怎样在接口上处理入站和出站流量了。
D-Lab(config)#int e0    //进入接口模式
D-Lab(config-if)#ip nat inside   //指定inside接口出站
D-Lab(config-if)#int s0
D-Lab(config-if)#ip nat outside //指定outside接口入站
 
静态NAT
inside|outside local和inside|outside global的一对一映射
D-Lab(config)#ip nat {inside|outside} source static < inside local> < inside global>
这样就在NAT表中创建了一个永久表项。
配置示例:
D-Lab#config t
D-Lab(config)#int e0
D-Lab(config-if)#ip nat inside
D-Lab(config-if)#int s0
D-Lab(config-if)#ip nat outside
D-Lab(config)#ip nat inside source static  192.168.1.1 210.83.202.1
D-Lab(config)#ip nat outside source static  210.83.202.2 192.168.2.3
 
静态PAT
D-Lab(config)#ip nat {inside|outside} source static < protocol> <inside local> < port> < inside global> < port>
配置示例:
D-Lab(config)#ip nat inside source static  tcp 10.1.1.1 80 214.118.21.121 80
 
动态NAT
动态NAT用来将inside local快速映射到inside global上。这些inside local放在可用的IP地址池中。同样,必须给参与NAT进程的路由器接口分配IP地址。
当内部网络主机要与Internet上的主机进行通信时,NAT边界路由器会从标记为“NAT内部”的接口接收数据包。
D-Lab(config)#ip nat pool  <pool-name> <start-ip> <end-ip> netmask  xxxx
D-Lab(config)#ip nat pool < pool-name>  <start-ip> <end-ip> prefix-length  xx     //掩码长度
例:
D-Lab(config)#ip nat pool  dyn-nat-pool 211.10.121.1 211.10.121.254 netmask  255.255.255.0
D-Lab(config)#ip nat pool  dyn-nat-pool 211.10.121.1 211.10.121.254 prefix-length  24
配置示例:
D-Lab(config)#inter e0 
D-Lab(config-if)#ip add  192.168.1.1 255.255.255.0    
D-Lab(config-if)#ip nat inside     //指定内部接口
D-Lab(config-if)#inter s0
D-Lab(config-if)#ip add  210.83.202.1 255.255.255.192
D-Lab(config-if)#ip nat outside    //指定外部接口
D-Lab(config-if)#exit
D-Lab(config)#access-list  1 permit  192.168.1.0 0.0.0.255     //标记inside local范围
D-Lab(config)#ip nat pool  in-out210.83.202.2 210.83.202.8 prefix  24    //设置inside global地址池 
!
D-Lab(config)#ip nat inside source list  1 pool  in-out    //启用inside源地址翻译,把标记的inside local范围与inside global池关联起来
 
动态PAT(多对一映射)
路由器为每个转换表项添加第四层协议和端口信息
D-Lab(config)#ip nat inside source list 1 pool in-out  overload
如果不知道出站IP地址,可在命令中指定出站接口
D-Lab(config)#ip nat inside source list 1  e0 overload
//如果接口shut或者接口没有设置IP地址的话,NAT不会生效
配置实例:
D-Lab(config)#inter e0
D-Lab(config-if)#ip add  192.168.1.1 255.255.255.0
D-Lab(config-if)#ip nat inside
D-Lab(config)#inter s0
D-Lab(config-if)#ip add  210.83.202.1 255.255.255.192
D-Lab(config-if)#ip nat outside
!
!
!
D-Lab(config)#ip nat pool  test210.83.202.2 210.83.202.8 prefix  24
!
D-Lab(config)#ip nat inside source list  9 pool test  overload
D-Lab(config)#access-list  9 permit  192.168.1.0 0.0.0.255
 
为重复地址配置NAT
D-Lab(config)#ip nat pool  in-out211.121.1.1 211.121.1.254 prefix-length  24   //设置local global池
D-Lab(config)#ip nat pool  out-in10.1.2.1 10.1.2.254 prefix-length  24   //设置outside local池
D-Lab(config)#ip nat inside source list  pool  in-out    //启用inside源地址翻译,把标记的inside local范围与inside global池关联起来
D-Lab(config)#ip nat inside source list  1 pool  out-in    //将在标记的inside local范围里的outside global转换成outside local池里的地址
D-Lab(config)#int fa0/0
D-Lab(config-if)#ip nat inside    //指定出站接口
D-Lab(config-if)#int s1/1
D-Lab(config-if)#ip nat outside    //指定入站接口
D-Lab(config-if)#exit
D-Lab(config)#access-list 1 permit 10.1.1.0 0.0.0.255    //标记inside local地址范围
 
更灵活的地址池的配置:
ip nat pool <name> { netmask <mask> | prefix-length <length> } [ type { rotary } ]
这样可以允许定义不连续地址池,接下来定义地址空间:
address  <start> <end>
例:
D-Lab(config)#ip nat pool D-lab prefix-length 24
D-Lab(config-ipnat-pool)#address 11.69.73.12 11.69.73.14
D-Lab(config-ipnat-pool)#address 11.69.73.18 11.69.73.244
这样就定义了一个11.69.73.12 ~ 11.69.73.14和11.69.73.18~11.69.73.244的地址池
 
NAT关联routemap的配置:
ip nat inside source route-map  <name> pool  <name>
例:
ip nat pool  d-1 173.26.232.1 173.26.232.254 prefix-length 24
ip nat pool  d-2 24.10.12.1 24.10.12.254 prefix-length 24
ip nat inside source route-map  d1-map pool  d-1
ip nat inside source route-map  d2-map pool  d-2
!
interface Serial0/0
ip nat outside
!
interface Serial0/1
ip nat outside
!
route-map  d1-map permit 10
match ip address 1
match interface Serial0/0
!
route-map  d2-map permit 10
match ip address 1
match interface Serial0/1
 
配置NAT超时设置:
ip nat translation timeout  <seconds>    //特权模式下
 
 

拓扑:


NAT的几种负载技术:静态与动态的NAT,还有基于端口的PAT技术,PAT理论可以转换65000个连接,但有一种技术,可以突破这种限制,那就是PAT地址重叠技术,将同一个端口号给多个内部地址IP与端口分配,成功匹配的原因还要根据外部的IP来配对。

NAT配置一般来说有两步:

1.对接口要指定出接口或入接口,此步不要忘记。

命令:ip nat outside 或 ip nat inside

2.就是根据需要转换地址,这里有几个概念一定要清楚。

内部本地ip[IL]

内部全局ip[IG]

外部本地ip[OL]

外部全局ip[OG]

给出下面几个实例来学习NAT:

静态SNAT

ip nat inside source static 192.168.1.3 12.1.1.2

将内部本地ip192.168.1.3映射外部全局ip12.1.1.2

动态SNAT

access-list 1 permit 192.168.1.0 0.0.0.255

指定内部本地网络ip地址范围,多个IL地址

ip nat pool  wildlee  12.1.1.100 12.1.1.200 netmask 255.255.255.0

指定内部全局地址ip地址范围,多个IG地址

ip nat inside source list 1 pool wildlee

创建地址转换条目,应用NAT技术

PAT配置

access-list 1 permit 192.168.1.0 0.0.0.255

ip nat pool wildlee 12.1.1.2 12.1.1.2 netmask prefix-length 24

多个IL地址被映射成了一个IG地址

ip nat inside source list 1 pool wildlee overload

overload参数指定启用PAT技术

PAT端口静态映射

ip nat inside source static tcp 192.168.1.8 80 12.1.1.1 80 extendable

 将内部地址192.168.1.8的TCP 80端口映射成外部12.1.1.1 80

NAT负载技术

意指将从外部网络来的TCP连接分发到内部网络的服务器之上,从而实现一种负载技术。我们要在内部虚似一个IP地址,这个地址可以是任何地址,只要外部网络有达到此IP地址的路由即可。

access-list 1 permit 99.99.99.99

指定一个内部全局地址,将对此地址的TCP端口访问,分布到内部的服务器之上。

ip nat pool wildlee 192.168.1.3 192.168.1.4 prefix-length 24 type rotary

指定一个内部本地地址,将外部目标是99.99.99.99的TCP组,分发到内部这些服务器之上。指令type rotary是执行一种循环旋转式分发。

ip nat inside destination list 1 pool wildlee

应用这种技术,IG分发到IL. 

 

NAT之Mr.w的总结

命令:clear ipnat translation * 清楚动态NAT表

 NAT映射时间值

动态NAT的过期时间是86400秒,PAT的过期时间是60秒

show ip nat translations verbose

ip nat translation timeout 3600

地址池高级NAT配置

R1(config)#ip nat pool poolnameprefix-length 24

R1(config-ipnat-pool)#address 192.168.1.1192.168.1.5

R1(config-ipnat-pool)#address 192.168.1.7192.168.1.9

R1(config-ipnat-pool)#eixt

这样可以把一个不连续的地址池 同一放进pool.

利用route-map的高级配置

ip nat inside source route-map (name) pool (poolname)

1.ip nat pool poolname1

2.access-list 1 permit

3.route-map ccie permit 10

   matchip address 1(匹配list1中的主机)

核心精华

1.在做此实验的时候,大家一定要注意,是基于TCP的,其它协议类型的IP分组不能分发。其它协议类型的IP分组到达NAT设备时,会触发路由器生成ARP报文寻问谁是这个P地址的MAC地址,所以一定要注意。如果测试的话要用TELNET命令,它发起的是TCP连接,不要用命令ping或traceroute.

2.要注意它的NAT表,我们做静态或动态或PAT的时候,配置完后直接在NAT表中,生成映射关系,但是这种负载的NAT配置不会,是空的。只有有连接通过的时候,才会产生映射。

实验,在我TELNET两次99.99.99.99之后。

R1

Router#telnet 99.99.99.99

Trying 99.99.99.99 … Open

Password required, but none set

[Connection to 99.99.99.99 closed by foreign host]

Router#telnet 99.99.99.99

Trying 99.99.99.99 … Open

Password required, but none set

[Connection to 99.99.99.99 closed by foreign host]

 

R2

Router#sh ip nat translations

Pro Inside global Inside local Outside local Outside global

tcp 99.99.99.99:23 192.168.1.3:23 12.1.1.1:43806 12.1.1.1:43806

tcp 99.99.99.99:23 192.168.1.4:23 12.1.1.1:56481 12.1.1.1:56481


NAT配置的验证和故障排除
sh ip nat translations    //查看生效的NAT表项
sh ip nat translations verbose    //查看生效的NAT表项的详细信息
sh ip nat statistics    //显示NAT的统计数字和配置信息
 
clear ip nat translation *    //清除所有NAT表项
clear ip nat translation inside <global-ip>    //清除指定的内部NAT表项 :
clear ip nat translation <protocol> <global-ip> <local-ip> <global-port> <local-port>    //清除指定的NAT表项
 
debug ip nat [ <list> ] [ detailed ]    //调试NAT进程

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NAT(Network Address Translation)技术是一种网络协议转换技术,它的原理和实现主要涉及以下几个方面。 首先,NAT技术是通过将内部网络的私有IP地址转换成公网IP地址来实现的。在一个局域网中,每个设备都被分配了一个私有IP地址,这些私有IP地址不能直接被公网所识别,因此需要将其转换成公网IP地址才能与外部网络进行通信。 其次,NAT技术需要一个网络设备来执行地址转换操作,这个设备被称为NAT设备或NAT路由器。NAT设备通常拥有公网IP地址和私有IP地址两个接口,分别与外部网络和内部网络连接。当内部网络的设备向外部网络发送数据时,NAT设备会将源IP地址从私有IP地址转换成公网IP地址,并记录这个转换关系。同样,当来自外部网络的数据返回到NAT设备时,它会将目标IP地址从公网IP地址转换回对应的私有IP地址,然后将数据转发给内部网络的设备。 此外,NAT技术还可以使用端口转换来解决IP地址不足的问题。在一个内部网络中,多个设备可能使用同一个公网IP地址进行通信,这时候NAT设备会在转换过程中使用不同的端口号来标识不同的设备。这种方式也被称为PAT(Port Address Translation)。 需要注意的是,NAT技术虽然可以解决IP地址不足的问题,并提供了一定程度的安全性,使得内部网络的设备对外部网络不可见,但它也会引入一定的网络延迟和复杂性。此外,在一些特殊的网络应用中,NAT技术可能会导致一些通信协议或应用程序的不兼容问题。 总之,NAT技术通过地址转换来实现内部网络与外部网络的通信,是一种常用的网络协议转换技术,但它也需要在实际应用中注意兼容性和性能方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值