注意下面的cnc_snatpool这个class里的所有IP,也应该单独配置在一个snat pool里,这样F5才能响应这些对这些地址的ARP请求。
when RULE_INIT {
set ::snat_length [llength $cnc_snatpool]
log local0.error "length is $snat_length"
}
when LB_SELECTED {
log local0.warning "$::cnc_snatpool wokao!!"
set client_ip [IP::client_addr]
set client_last [getfield $client_ip "." 4]
set snat_addr [lindex ::cnc_snatpool [exprclient_last%$::snat_length] ]
snat $snat_addr
log local0.warning "mod:[expr client_last%::snat_length] and select $snat_addr !!!!!!!"
}
实际使用的时候可以再优化,比如不让rule来算class长度。因为一般class的量都很少,用常量。其次不设各个变量,直接将变量替换,如优化成这样:
when LB_SELECTED {
snat [lindex $::cnc_snatpool [expr [getfield [IP::client_addr] "." 4]%8] ]
#log local0. "注意上面%后的8根据实际情况修改,比如class里只有8个"
}
V10 更新,在V10下class的处理方法有所变化,cnc_snatpool这个class设置的时候填string,不用填value,同时irule变化如下:
[lindex $::cnc_snatpool [expr [getfield [IP::client_addr] "." 4]%8] ] 部分改为
[class element -name [expr [getfield [IP::client_addr] "." 4]%8] $::cnc_snatpool ]
下面是以前的一个老文档,上面有些小错误。
文章评论
纳米哥就是厉害,哈哈哈