利用Rotary NAT实现TCP流量负载均衡
一个公司里有多个服务器为多个主机提供服务, 利用RotaryNAT, 我们可以在内部网络建立一个虚拟服务器来和真正的服务器群进行通信。 当来访流量的目的地址匹配了访问列表(允许虚拟服务器IP地址通过)时,IP包的目的地址就会替换为循环地址池 (Rotary Pool) 中的 IP 地址。地址分配是用循环算法 (Round-Robin) 来执行的。配置了NAT的路由器会执行以下步骤来实现循环地址分配:
- 主机试图与虚拟服务器10.1.1.5建立TCP连接
- 路由器接收到连接请求后开始进行地址转换,分配下一个真实服务器的IP地址 (我认为在这之前是先匹配ACL,符合条件然后再向下进行)
- 路由器用真实服务器的地址替换掉来访IP包中的目的地址然后转发该数据包
- 服务器接收到请求后答复
- 路由器收到服务器答复的数据包,然后查询NAT表。随后把数据包的源地址替换为虚拟服务器地址再把包转发出去
配置:
先定义一个包含真实服务器IP的地址池 - 在全局配置模式下使用以下命令
ip nat pool name start-ip end-ip {netmask netmask | prefix-length prefix-length} type rotary
---------
--------
再定义一个访问列表,来匹配访问虚拟服务器地址10.1.1.5的TCP数据流。非TCP的数据流将不会被地址转换
---------
---------
然后用上步定义的访问列表来配置一个动态的内网目的地址NAT
ip nat inside destination list access-list-numberpoolname
----------
----------
最后,定义网内和网外接口
验证
当有多个Telnet会话 (TCP会话,端口23) 与虚拟服务器10.1.1.5建立连接时,配置了NAT的路由器用轮询的方式来进行真实服务器IP地址分配。以下输出显示三个与10.1.1.5建立的Telnet会话. NAT路由器非配10.1.1.10 给首个连接,10.1.1.11给第二个连接,然后10.1.1.10给第三个连接。