F5负载均衡上使用iRule 来选择SNAT pool

需求:
使用iRule 根据不同目的地址或端口,来选择SNAT 地址 ,实现相同的后台节点,访问不同目的地址或者目的端口时,源地址也会不同;

网络概况:
内网:
后台节点server:192.168.10.71
对应VLAN: Internal-selfIP: 192.168.10.1
外网:
客户端client: 172.16.10.172
对应VLAN: external-selfIP: 172.16.10.1

1.需求一: 负载均衡功能(client访问server)

解决方案1、

新建virtual server :http_VS: 172.16.10.100:80
VS关联一个负载均衡pool:
Pool member: 192.168.10.71:80

2.需求二: SNAT功能(server访问client),一个或多个内网节点转换成一个源地址;

解决方案1、

新建SNAT :out_snat: 172.16.10.71
    snat out_snat  {
   translation 172.16.10.71
   origin 192.168.10.71             //只允许一台机器出向访问
}   

解决方案2、

snat out_snat2 {
   translation 172.16.10.250
   origin 0.0.0.0 mask 0.0.0.0          //允许所有的机器出向访问
}

解决方案3、

snat out_snat3 {
   translation 172.16.10.188
   origin 0.0.0.0 mask 0.0.0.0
   vlan internal enable         //仅限于vlan --internal 的流量命中
}

3.需求三: iSNAT功能(server访问client),一个内网节点转换成多个源地址;

解决方案1、

新建必要的出向的pool(将访问的目的地址+端口 做成pool形式,以便iRule调用):
        pool http_pool { member 172.16.10.71:80 }
        pool ftp_pool { member 172.16.10.71:21 }

新建必要的snatpool:
snatpool SNATPool_21 { member 172.16.10.21 }
snatpool SNATPool_80 { member 172.16.10.80 }
snatpool Internal_SNAT_Pool { member 172.16.10.250 }

新建virtual server :snat_VS: 0.0.0.0:0
VS关联一个iRule :iSNAT_Rule,内容如下:
rule iSNAT_Rule {
when CLIENT_ACCEPTED {                  /* 定义事件 */
    set MYPORT [TCP::local_port]        /* 定义目的端口 */
    set S_IP [IP::client_addr]          /* 定义发起访问的源地址 */
    log local0. "Port is $MYPORT"       /* 记录日志,打印在/var/log/ltm  */
    log local0. " S_IP is $S_IP"
if {[IP::addr [IP::client_addr] equals 192.168.10.71]}    /* 设置源地址过滤条件 */
        { switch $MYPORT {              /* 根据不同目的端口,选择不同SNAT地址 */
            80 {
                    snatpool SNATPool_80
                    pool http_pool      /* 最终选择访问目的地 */
                    }
            21 {
                    snatpool SNATPool_21
                    pool ftp_pool
                    }
            default {
                    snatpool Internal_SNAT_Pool
                    pool other_pool
                    }
           }
         }
else {                          /* 如果是其他后台节点,可根据需求自由配置*/
      snatpool Internal_SNAT_Pool
      pool http_pool
      }
    }
}
//其实整个实现需求的核心在于iRule
此方案配置完成后,BIG-IP系统会做如下动作:

(如从server 访问client 的http服务)
一个HTTP请求从server端到达BIG-IP系统,命中VS 0.0.0.0:0;
iSNAT_Rule被引用,检查请求数据包,BIG-IP系统选中SNATPool_80和负载均衡pool http_pool;
采用round robin负载均衡算法,BIG-IP系统从http_pool中选中下一跳地址172.16.10.71;
SNATPool_80中有一个翻译地址172.16.10.80 ;
BIG-IP系统从这翻译地址池中随机地选取一个地址 172.16.10.80 (本例为固定源地址翻译,故翻译地址池中只有一个供选择);
最后,BIG-IP系统将客户端源IP地址翻译成地址172.16.10.80,并将请求包转发至172.16.10.71:80;

此方案,切忌原有的SNAT 会失效,因为优先级是以7层为先,依次递减,故0.0.0.0的virtual server 优先级高于普通的SNAT, 所以要在iRule 中考虑详尽情况;

解决方案2、

新建必要的出向的pool(将访问的目的地址+端口 做成pool形式,以便iRule调用):
        pool http_pool { member 172.16.10.71:80 }

新建virtual server :client_VS: 192.168.10.237:0
VS关联一个iRule :iSNAT_Rule2,内容如下:
rule iSNAT_Rule2 {
when CLIENT_ACCEPTED {
    set MYPORT [TCP::local_port]
    log local0. "Port is $MYPORT"
    switch $MYPORT {
    80 {
            snatpool SNATPool_80
            pool http
            }
    21 {
            snatpool SNATPool_21
            pool ftp_pool
            }
        default {
            snatpool Internal_SNAT_Pool
            pool http
            }
        }
    }
}

此方案适合内网段中 出向访问需求很多的情况;
此方案采用将virtual server 建立在相对的内网段,使得访问client 变成了访问内网段的virtual server ,在经过BIGIP的处理后,命中 iRule 中的某一个SNATpool,源地址就变成SNATpool中可供选择的地址 ,目的地址转化为出向pool 中的172.16.10.71,并将请求包转发至172.16.10.71:80;

如果内网段中的其他节点也需要访问外网,而没有一对多的源地址转换需求,即可完全按照正常的SNAT方式进行,互不冲突;

原文地址:http://blog.51cto.com/11555417/2082876

时间: 2024-10-01 11:42:41

F5负载均衡上使用iRule 来选择SNAT pool的相关文章

劳动节配置F5负载均衡配置小结

2014年5月1日是劳动节,是劳动人民应该休息的节日,呵呵结果这几天却是作死的节奏,天天加班到2点半,真实很辛苦呀,整个过程很艰辛但是结果是好的. 1.配置LC1600链路负载均衡,首先要激活license的.在system-license-Re activacte 2.要创建VLAN,由于是联通线路.电信线路和下行线路,就创建vlan_cnc vlan_ctc vlan1,每个vlan要设置对应的端口,比如vlan_cnc对应光纤口2.1 3.创建完vlan 要写selfip即每个vlan的地

F5负载均衡示例:轮寻

/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 *未经作者同意,禁止转载 */ 规划: F5 1600 BIG-IP 内网 192.168.100.0 255.255.255.0 外网 10.50.20.0 255.255.255.0 Virtual Server vs_web node_pool pool_web 原理实现图: ==============================================================

[转]f5负载均衡原理

f5负载均衡原理 一. 负载均衡技术 负载均衡技术在现有网络结构之上提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 1. 负载均衡发生的流程图: 1. 客户发出服务请求到VIP 2.BIGIP接收到请求,将数据包中目的IP地址改为选中的后台服务器IP地址,然后将数据包发出到后台选定的服务器 3. 后台服务器收到后,将应答包按照其路由发回到BIGIP 4.BIGIP收到应答包后将其中的源地址改回成VIP的地址,发回客户端

F5负载均衡的rest接口拓展查询

F5负载均衡的rest接口拓展查询 问题描述: 接触过F5的小伙伴大概会发现,F5的rest接口返回中经常会包含isSubcollection这个字段,用来表示存在嵌套的结果,这样的方式在一定程度上缓解了设备一次请求拉取数据的压力,但在我们需要获取所有嵌套结果时,多次的http请求反而会增加性能开销,这时候,我们如何取消isSubcollection带来的弊端呢? {"profilesReference": { "link":"https://localh

F5负载均衡 简要原理解析以及命令行命令

F5重点剖析原理配置维护 一.F5是什么,它能解决什么问题? 二.F5 BIG-IPLTM 硬件介绍 三.F5的工作原理和相关名词术语 四.门户网站负载均衡配置的分析 1.首先我们应该了解一个名词:ADN ADN(Application Delivery Networks )--应用交付网络:旨在把数据中心的应用和业务快速.安全.高可用地交付到客户端.F5就是实现这种解决方案的一系列产品. 2.具体描述 F5是一种网络性能优化设备,工作在网络的四层或七层.它不同于交换机.路由器这些基础网络设备,

F5负载均衡算法及基本原理

原文:Intro to Load Balancing for Developers – The Algorithms 转载:http://blog.gesha.net/archives/205/ posted on Tuesday, March 31, 2009 11:02 PM Random: This load balancing method randomly distributes load across the servers available, picking one via ra

F5负载均衡及会话保持学习笔记一

在公司内部项目中经常用到F5,但由于对于F5实现负载均衡原理不是很清晰,在项目实战中遇到很多问题.比如:一个会话连接无故被中断,设置会话保持后,后端应用节点出现严重不均衡情况等等,所以特意回顾和整理了有关F5的相关技术资料,对于后续大家选择合适的负载均衡策略和会话保持方式提供参考依据,以免后续走弯路. 一:什么是F5? F5为一家公司,英文公司名:F5 Networks:应用交付网络(ADN)的全球领导者.F5提供的解决方案保证每个用户的应用实现安全.高速和高可用,帮企业获得最大投资回报.本文只

Windows平台分布式架构实践 - 负载均衡 上

概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为什么那么的迫切的希望.NET跨平台呢?第一个理由是便宜,淘宝号称4万多台服务器全部运行在Linux,Linux平台下还有免费的MySql,这些都是免费的,这些省下来直接就是利润呀,做企业的成本可以降低又没有任何损失,何乐而不为呢?第二个理由是在Linux系统下还有很多非常优秀的构架(当然同样也是免费

Java + Tomcat + Memcached + Ecs 实现负载均衡~上

前言: 公司的产品上线了, 对于大并发量的客户访问和对手的攻击,真是苦不堪言,所以集群的部署重要,现在集群的部署一般有两种方式,第一种,看到大部分人的做法一般是Nginx+Memcached+Tomcat进行一系列的转发部署,但是说实话,我们自己去搞这个Nginx,转发的效果并不是那么的完美,如果Nginx的服务器down掉的话,那么我们的整个站点,基本上就废除了,所以我这边用的的买了阿里云的ecs,买了一个负载均衡,进行的站点转发功能,其中阿里云的安全骑士也挺好,可以帮我们检测到攻击,那两台不