简介
本文档介绍如何在Cisco IOS®路由器上配置网络地址转换(NAT)服务器负载均衡TCP流量。
先决条件
要求
本文档没有任何特定的要求。
使用的组件
本文档不限于特定的软件和硬件版本。本文档适用于所有运行思科 IOS 的思科路由器和交换机。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您使用的是真实网络,请确保您已经了解所有命令的潜在影响。
背景信息
目的
从外部Internet访问本地服务器的用户将使用单个URL或IP地址访问服务器,但NAT设备用于加载将用户流量共享到具有镜像内容的多个相同服务器。
描述
外部用户A和B使用外部可见IP地址172.16.2.3(服务器的虚拟IP地址)访问Web服务器的内容。 NAT路由器以轮询方式将发往172.16.1.3的流量转换为内部IP地址10.1.1.1、10.1.1.2和10.1.1.3,并将其转发到相应的服务器。从外部用户发起的每个新会话都将转换为下一个物理服务器IP地址。
配置
网络图
步骤
- 用户A启动与虚拟服务器IP地址172.16.2.3的TCP连接。
- NAT路由器在收到连接请求后创建NAT转换条目,该条目将分配下一个可用的实际服务器IP地址(例如10.1.1.1)。
- NAT路由器用分配的实际IP地址替换目的IP地址并转发数据包。
- 服务器接收数据包并回复源。
- NAT路由器接收从服务器返回的数据包并执行NAT表查找。然后,路由器将源地址转换为虚拟服务器IP地址(172.16.2.3)并转发数据包。
- 用户 — B启动与服务器虚拟IP地址172.16.2.3的TCP会话。在收到连接请求后,NAT路由器将其转换为下一个可用的实际服务器IP地址(例如10.1.1.2),然后将数据包转发到服务器。
由于静态NAT在另一个方向是双向的,因此数据包的目的地将被转换。执行这种形式的NAT时,会通过发送TCP数据包触发。发送互联网控制消息协议(ICMP)可能不会触发NAT转换。
非TCP流量会定向到池中的第一个地址。
与静态内部源NAT和静态内部源PAT不同,路由器不响应有关全局地址的ARP查询,除非该地址未分配给其接口。因此,可能需要将其添加到次接口等接口。不能使用此转换方法(例如80和1087)重定向端口。 端口必须匹配。
注意:NAT池IP地址与外部接口IP地址不必相同。为了说明这一点,本示例使用来自不同块172.16.2.x的IP地址,而不是实际接口IP子网172.16.1.x。
- 定义包含实际服务器地址的地址池。
ip nat pool NATPOOL 10.1.1.1 10.1.1.3 prefix-length 24 type rotary
- 定义允许虚拟服务器地址的访问列表。
access-list 1 permit host 172.16.2.3
- 启用内部目标地址的动态转换。
ip nat inside destination list
pool
ip nat inside destination list 1 pool NATPOOL
- 定义NAT内部和外部接口。
Interface gig0/0
ip address 10.1.1.4 255.255.255.0
Ip nat inside
Interface gig0/1
ip address 172.16.1.1 255.255.255.248
Ip nat outside
当有人尝试访问IP地址172.16.2.3时,IP地址10.1.1.1、10.1.1.2和10.1.1.3将以循环方式分发
验证
为了检验这一点,请启动从外部主机到虚拟IP地址的多个TCP会话。调试IP NAT t转换/show ip nat转换输出可用于验证。
Router#
Router#
*Jul 24 13:27:41.193: NAT*: s=192.168.1.1, d=172.16.2.3->10.1.1.3 [22864]
*Jul 24 13:27:41.196: NAT*: s=10.1.1.3->172.16.2.3, d=192.168.1.1 [18226]
Router#
*Jul 24 13:27:44.329: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35533]
*Jul 24 13:27:44.331: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14573]
*Jul 24 13:27:44.332: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35534]
*Jul 24 13:27:44.332: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35535]
*Jul 24 13:27:44.332: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35536]
*Jul 24 13:27:44.333: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14574]
*Jul 24 13:27:44.365: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14575]
*Jul 24 13:27:44.365: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14576]
*Jul 24 13:27:44.368: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35537]
Router#
*Jul 24 13:27:44.369: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35538]
*Jul 24 13:27:44.369: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35539]
*Jul 24 13:27:44.369: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35540]
*Jul 24 13:27:44.371: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14577]
*Jul 24 13:27:44.574: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14578]
Router#
*Jul 24 13:27:46.474: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14579]
*Jul 24 13:27:46.478: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35541]
*Jul 24 13:27:46.478: NAT*: s=192.168.2.1, d=172.16.2.3->10.1.1.1 [35542]
*Jul 24 13:27:46.479: NAT*: s=10.1.1.1->172.16.2.3, d=192.168.2.1 [14580]
Router#sh ip nat tr
Pro Inside global Inside local Outside local Outside global
tcp 172.16.2.3:23 10.1.1.1:23 192.168.2.1:49703 192.168.2.1:49703
tcp 172.16.2.3:23 10.1.1.2:23 192.168.2.1:50421 192.168.2.1:50421
tcp 172.16.2.3:80 10.1.1.3:80 192.168.1.1:26621 192.168.1.1:26621
Router#
故障排除
目前没有针对此配置的故障排除信息。
限制
- 它无法检测组中的内部服务器是否发生故障。这意味着Cisco IOS始终会将流量转发到组中的服务器,而不管其运行状态如何。
- 它无法确定内部服务器的实际负载,因此无法有效执行负载均衡。