利用Rotary NAT实现TCP流量负载均衡

网络拓扑:

一个公司里有多个服务器为多个主机提供服务, 利用RotaryNAT, 我们可以在内部网络建立一个虚拟服务器来和真正的服务器群进行通信。 当来访流量的目的地址匹配了访问列表(允许虚拟服务器IP地址通过)时,IP包的目的地址就会替换为循环地址池 (Rotary Pool) 中的 IP 地址。地址分配是用循环算法 (Round-Robin) 来执行的。配置了NAT的路由器会执行以下步骤来实现循环地址分配:

  1. 主机试图与虚拟服务器10.1.1.5建立TCP连接
  2. 路由器接收到连接请求后开始进行地址转换,分配下一个真实服务器的IP地址 (我认为在这之前是先匹配ACL,符合条件然后再向下进行)
  3. 路由器用真实服务器的地址替换掉来访IP包中的目的地址然后转发该数据包
  4. 服务器接收到请求后答复
  5. 路由器收到服务器答复的数据包,然后查询NAT表。随后把数据包的源地址替换为虚拟服务器地址再把包转发出去

配置:

先定义一个包含真实服务器IP的地址池 - 在全局配置模式下使用以下命令

ip nat pool name start-ip end-ip {netmask netmask | prefix-length prefix-length} type rotary

---------

ip nat pool SERVER_LIST 10.1.1.10 10.1.1.11 prefix-length 24type rotary

--------

再定义一个访问列表,来匹配访问虚拟服务器地址10.1.1.5的TCP数据流。非TCP的数据流将不会被地址转换

---------

access-list 110 permit tcp any host 10.1.1.5

---------

然后用上步定义的访问列表来配置一个动态的内网目的地址NAT

ip nat inside destination list access-list-numberpoolname

----------

ip nat inside destination list 110 pool SERVER_LIST

----------

最后,定义网内和网外接口

interface fastethernet 0/0
ip nat inside
!
interface fastethernet 0/1
ip nat outside
!

验证

当有多个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给第三个连接。

NAT 地址转换表

NAT_Router# show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
tcp 10.1.1.5:23        10.1.1.10:23       192.168.1.2:24440  192.168.1.2:24440
tcp 10.1.1.5:23        10.1.1.10:23       192.168.1.2:50804  192.168.1.2:50804
tcp 10.1.1.5:23        10.1.1.11:23       192.168.1.2:38530  192.168.1.2:38530


=====================================================
Rotary NAT在GNS3中的实现
根据上面提供的实例,我决定在GNS3中模拟下,并且复习下前几天看到的PAT把他们放在同一个拓扑里实现下
设想这种情况,公司有两个分部,其中B分部有数台主机需要跨过WAN访问A分部的服务器,用Rotary NAT来实现TCP流量的负载均衡
B分部访问WAN的时候用PAT来进行NAT。
要求和拓扑
之前总是遇到 ‘lost communication to server 127.0.0.1' 的问题。。。重新把GNS3搞了一下,好容易才解决,用3725的IOS重新做了一遍,结果如下。
1. 配置端口IP地址并把两边的路由器略微处理下当做Host 和 Server用
2. 在Rotary_NAT_Server & PAT_Host上配置RIP
3. 在Rotary_NAT_Server上配置Rotary NAT,在PAT_Host上配置PAT
验证
从Host 1 telnet Server 10.1.1.5 
Rotary_NAT_Server 的输出
========================
Rotary_NAT_Server#sh ip nat trans
Pro Inside global      Inside local       Outside local      Outside global
tcp 10.1.1.5:23        10.1.1.10:23       192.168.1.20:11141 192.168.1.20:11141  >>>> 此时还没有在PAT_Host上配置PAT
Rotary_NAT_Server#sh ip nat trans
Pro Inside global      Inside local       Outside local      Outside global
tcp 10.1.1.5:23        10.1.1.11:23       192.168.1.20:48636 192.168.1.20:48636>>>.. 可以看出两个server ip是交替分配
Rotary_NAT_Server#sh ip nat trans
Pro Inside global      Inside local       Outside local      Outside global
tcp 10.1.1.5:23        10.1.1.10:23       171.16.1.100:11485 171.16.1.100:11485>>>配置了PAT后就只能看到公网的地址了
PAT_Host 的输出
=================
PAT_Host#sh ip nat trans
Pro Inside global      Inside local       Outside local      Outside global
tcp 171.16.1.100:11485 192.168.1.20:11485 10.1.1.5:23        10.1.1.5:23
后记
GNS3是网络学习的模拟神器,只可惜次次把我逼出内伤,要么在实验中出问题,要么就是保存后出问题。俗话说得好,磨刀不误砍柴工,看来我是需要好好研究下GNS3的用法与Trouble shooting

NAT 2 - 利用Rotary NAT实现TCP流量负载均衡 [译] + GNS3实现相关推荐

  1. Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)

    前奏 我们都知道 nginx 是一款优秀的反向代理服务,用过 nginx 的也应该都知道 upstream,upstream 节点一般置于 http 节点大括号中,常规在 upstream 中配置需要 ...

  2. Serverless 应用引擎产品的流量负载均衡和路由策略配置实践

    流量管理从面向实例到面向应用 在 Serverless 场景下,由于弹性能力以及底层计算实例易变的特性,后端应用实例需要频繁上下线,传统的 ECS 场景下的负载均衡管理方式不再适用. SAE 产品提供 ...

  3. Docker的安装和镜像管理并利用Docker容器实现nginx的负载均衡、动静分离

    Docker的安装 一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ...

  4. 怎样在PF_ring上使用RSS实现网络流量负载均衡

    1.RCC/负载均衡 使用单个流来处理来自网络适配器的流量需要单个CPU内核才能跟上入口速率.在高速率下,由于每个数据包可用的CPU周期数量有限,即使是轻量级的流量处理,这也成为瓶颈.只要我们的应用程 ...

  5. LVS nat 是否需要借助iptables 的snat实现负载均衡

    先贴图: 这个图用的cisco的路由器.事实结果是不用做snat. 然而lvs的nat 跟这个模型很相似,有人说lvs nat 是多组的dnat,现在我来证实一下 lvs 是否需要开启iptables ...

  6. LVS负载均衡群集之构建NAT模式

    一.案例概述 LVS负载均衡模式-NAT模式:NAT用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一种上网方式(源地址NAT).如果把NAT的过程稍微变化,就可以 成为负载 ...

  7. LVS负载均衡群集之构建NAT模式,可跟做!!!

    有关于LVS负载均衡群集的相关概念可以参考博文:LVS负载均衡群集详解 一.案例概述 LVS负载均衡模式-NAT模式:NAT用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一 ...

  8. 利用Haproxy实现http和TCP反向代理和负载均衡(入门和技术验证)

    系统访问量上去遇到了性能瓶颈,解决方法一般都是从两个方向入手Scale Up 和Scale Out.Scale Up适用于哪些钱多的系统,因为Scale Up其实就是直接升级硬件,CPU.内存.IO哪 ...

  9. 云原生应用负载均衡系列 (2): 入口流量分发、容错与高可用调度

    引言 在云原生应用负载均衡系列第一篇文章<云原生应用负载均衡选型指南>介绍了云原生容器环境的入口流量管理使用场景与解决方案,用 Envoy 作为数据面代理,搭配 Istio 作控制面的 I ...

最新文章

  1. 多传感器融合(算法)综述
  2. 2840 页的计算机毕业论文,这位华人小哥的博士论文究竟写了啥?
  3. 修改oralce字符集
  4. 剑指Offer——Java答案
  5. Java中传值与传地址
  6. 大数据学习——免密登录配置
  7. Python——编码风格建议
  8. 英伟达显卡不同架构_英伟达GeForce RTX 3070 Ti与RTX 3070显卡规格曝光
  9. 慢牛系列五:用百度语音识别添加自选股
  10. 照着教程装oracle却报错,手把手演示win7系统安装oracle10g程序遇到“程序异常终止。发生内部错误...”的操作教程...
  11. win10 我的世界java_Windows10系统怎样运行我的世界
  12. 【Research】Audit审计
  13. ASP.net校友录毕业设计(源代码+论文+开题报告+答辩PPT)ASP.NET小型证券术语解释及翻译系统的设计与开发(源代码+论文)
  14. 用java计算_用Java写的计算器
  15. 宽带运行商服务器,家用宽带200兆,300兆,500兆与1000兆有什么区别吗?
  16. Python当中reverse()函数
  17. flutter 九宫格菜单_Flutter 仿微信/微博九宫格
  18. 【快速检索,稳定出版,强大委员会Speaker阵容】ICCCS 2022|第7届通信计算机大会
  19. AndroidStudio开发笔记1--第一个app
  20. 2021年Java面试心得:java短信模板设计

热门文章

  1. 《未来网络白皮书——智能互联网白皮书》发布!
  2. R16 Type II量化反馈码本的产生
  3. Django之爱鲜蜂项目开发 day06(二)
  4. 985毕业,35岁创业失败,36岁回炉40岁被裁,中年夫妻无业咋办?
  5. Java可视化数据报表,你还不知道的Excel基本操作吗?
  6. 用Nextcloud搭建个人网盘
  7. CentOS 离线安装 postgresql 12
  8. tp5 批量更新多条记录_TP5数据库操作——更新
  9. 蓝桥杯web模拟题知识点以及解析
  10. Android——教你10分钟手敲 Butter Knife(小刀注解)