正常情况下,客户一般会有如下3类需求(当然也可以只有一个):
1、client在访问外网的时候,如果是访问的电信地址的网站,需要从电信接
口出去(可能会使用接口地址或指定的公网地址段进行SNAT);如果是访问联通地址的网站,需要从联通接口出去(可能会使用接口地址或指定的公网地址段进行SNAT);如果是其他地址的网站,就从电信(联通)链路出去
2、访问客户指定公网IP和端口的请求转发到指定内网1台Server上(或者多台)
3、当外网用户在访问www.test.com域名的时候发起DNS查询,如果是电信的用户,则AX返回电信链路的映射IP;如果是联通的用户,则返回联通链路的映射IP
以上三种情况包含了链路均衡实施中95%以上客户的要求,所以本文主要以如何实现上述3种功能为目标进行配置。
第一部分:确认客户需求
假设客户拓扑图及IP地址规划如下图所示(其中server和client分别连接在客
户核心交换机的server vlan和client vlan):AX分别连接电信出口和联通出口,
同时内网接口连接核心交换机。
根据客户网络实际环境整理如下表格(可根据实际情况进行添加):
网络部分 |
接口IP |
掩码 |
网关 |
物理接口(vlan) |
电信链路 |
||||
联通链路 |
||||
内网链路 |
||||
dns_ct_proxy |
||||
dns_cnc_proxy |
||||
路由部分 |
路由(目的) |
路由(源) |
网关 |
|
NAT部分(特殊) |
源地址(内) |
电信IP(段) |
联通IP(段) |
|
映射部分 |
电信映射IP |
联通映射IP |
Server内网IP |
协议:端口 |
域名部分 |
电信映射IP |
联通映射IP |
域名 |
|
注:完全了解客户网络环境和需求是能成功实施链路均衡的关键所在,所以在项目实施准备期间需要完全了解客户现有环境上设备的相关配置。
根据前面虚拟环境IP地址规划填写上表,内容如下:
网络部分 |
接口IP |
掩码 |
网关 |
物理接口(vlan) |
电信链路 |
200.200.200.1 |
255.255.255.0 |
200.200.200.254 |
e1(ctc_vlan) |
联通链路 |
100.100.100.1 |
255.255.255.0 |
100.100.100.254 |
e2(cnc_vlan) |
内网链路 |
172.172.172.1 |
255.255.255.0 |
172.172.172.254 |
e3(inside_vlan) |
dns_ct_proxy |
200.200.200.2 |
|||
dns_cnc_proxy |
100.100.100.2 |
|||
路由部分 |
路由(目的) |
路由(源) |
网关 |
备注 |
192.168.0.0/24 |
172.172.172.254 |
Server网段 |
||
10.10.10.0/24 |
172.172.172.254 |
Client网段 |
||
0.0.0.0/0 |
200.200.200.254 |
默认路由 |
||
NAT部分(内-外) |
内网地址 |
电信IP(段) |
联通IP(段) |
备注 |
192.168.0.0/24 |
200.200.200.1 |
100.100.100.1 |
Web网站映射 |
|
映射部分(从外到内) |
电信映射IP |
联通映射IP |
Server内网IP |
协议:端口 |
200.200.200.200 |
100.100.100.100 |
192.168.0.1 192.168.0.2 |
http:80 |
|
域名部分 |
电信映射IP |
联通映射IP |
域名 |
备注 |
200.200.200.200 |
100.100.100.100 |
www.test.com |
注:A10的链路均衡配置非常简单,总体上分3步:1、基础网络配置 2、双向地址转换 3、GSLB域名解析部分,下文将对每一步进行详细描述。
第二部分、基础网络部分
A、 配置VLAN和接口
根据网络环境规划,需要在AX上创建3个vlan:
n 电信vlan(ctc_vlan) vlan ID 10,分配e1接口,ve ID 10
n 联通vlan(cnc_vlan) vlan ID 20,分配e2接口 ve ID 20
n 内网vlan(inside_vlan) vlan ID 30,分配e3接口 ve ID 30
进入Config mode-->network-->VLAN,点击Add,出现如下界面:
按照规划vlan数量和名称创建相应的vlan后点击ok既创建成功。(其中Virtual Interface既为关联与这个vlan的3层虚拟接口,只有在这里填写了相应的ID以后,在config mode-->network-->interface-->virtual下才会出现ve接口)
注意,Viraual Interface的ID号最好与VLAN ID一致,便于维护管理。
最后完成后界面如下图所示:
B、配置ve接口IP地址
根据网络环境规划,3个ve接口IP地址需要配置如下:
n ve 10: 200.200.200.1/24
n ve 20: 100.100.100.1/24
n ve 30: 172.172.172.1/24
进入config mode-->network-->interface-->virtual,上一步创建的ve在这里:
目前还为配置地址,所以都为0.0.0.0,分别点击进入各个ve接口配置界面,配置相应的ip地址:
电信接口:
联通接口:
内网接口:
注意:在ve 30(内网接口)上需要启用:Allow Promiscuous VIP,后面配置中会介绍这个选项的作用。
C、配置路由
根据网络环境规划,需要添加3条路由:client网段和server网段的返回路由以及AX的默认路由
n Client的10.0.0.0/24的返回路由
n Server的192.168.0.0/24的返回路由
n 默然路由
进入config mode-->network-->route-->IPv4 Static,点击Add:
这样就在AX上添加了client网段的返回路由,同理添加server网段的返回路由以及默认路由(默认路由的网关这里是指向电信链路的网关地址),如下:
默认路由到底指向电信的网关还是联通的网关需要根据实际情况确定,通常情况下推荐配置一条静态路由(AX可以配置多条静态路由)。
第三部分、双向地址转换
该部分就涉及到前面提到的客户3类需求(蓝色字体)的前2个。
1、完成内网client访问外网的智能选路,既访问电信地址的网站从电信链路出去;访问联通地址的网站从联通链路出去。这样就完成了智能选路功能。
如果电信链路(或者联通链路断掉),则所有的流量都从联通链路(或者电信链路)出去,这样实现了链路备份功能。
这部分是完成链路均衡的基本功能,主要是通过virtual server配合aFlex
脚本功能来完成的。
2、访问客户指定公网IP和端口的请求转发到指定内网1台Server上(或者多台)
需要按照如下步骤操作:
A、建立相应的server:
根据网络环境规划,需要建立如下几个server:
n ctc_gw port:TCP 0 ;port:UDP 0 IP:200.200.200.254 电信网关
n cnc_gw port:TCP 0 ;port:UDP 0 IP:100.100.100.254 联通网关
n server1 port:TCP 80 服务器1
n server2 port:TCP 80 服务器2
进入config mode-->service-->SLB-->server,点Add:
点击ok既成功创建了ctc_gw对应的server,同理可以创建其余需要的server(推荐在server级别不启用health monitor)
B、建立相应的service-group
根据网络环境规划,需要建立如下几个service-group:
n ctc_gw_tcp member:200.200.200.254 port:TCP 0 priority 15
member:100.100.100.254 port:TCP 0 priority 1
n ctc_gw_udp member:200.200.200.254 port:UDP 0 priority 15
member:100.100.100.254 port:UDP 0 priority 1
n cnc_gw_tcp member:100.100.100.254 port:TCP 0 priority 15
member:200.200.200.254 port:TCP 0 priority 1
n cnc_gw_udp member:100.100.100.254 port:UDP 0 priority 15
member:200.200.200.254 port:UDP 0 priority 1
n web_server member:192.168.0.1 port:TCP 80
member:192.168.0.2 port:TCP 80
进入config mode-->service-->SLB-->service-group,点Add:
点击ok以后就成功创建了ctc_gw_tcp。同理创建剩下的service-group。
注:当创建ctc_gw_tcp和ctc_gw_udp,并添加server的时候,ctc_gw的优先级
要选择高的(这里选择的15);cnc_gw的优先级要选低(这里选择的1),同理
处理cnc_gw_tcp以及cnc_gw_udp。同时,在创建上述4个service-group的
时候,Health Monitor要选择ping。以上设置实现了链路备份功能。而对于
Web_server,则2个member的优先级需要一样,因为需要进行负载均衡,
而health monitor则选择http方式。
D、 建立PBSLB策略(导入智能链路选择需要的地址库信息)
进入config mode-->service-->PBSLB,点击Add:
Name输入chinaall,Host输入tftp服务器地址,Location输入tftp server上地址库保存的路径和文件名,我的tftp server地址是管理机的地址172.31.31.30,文件路径是根目录,文件名是chinall.txt,最终结果如下:
点击ok,AX就会下载tftp server上的地址数据库文件。
可以在命令行下进行验证是否下载成功:
SoftAX#show bw-list chinall
Name: chinall
URL: tftp://172.31.31.30/chinall.txt
Size: 38227 bytes
Date: Jun/03 00:40:01
Update period: 300 seconds
Update times: 1
如果能看到Size大小和tftp server存放的文件一样,则上传成功。默认情况下每300秒AX会向tftp server更新一次。
可以在命令行下用命令查看chinall文件的内容:
SoftAX#show bw-list chinall detail
Name: chinall
URL: tftp://172.31.31.30/chinall.txt
Size: 38227 bytes
Date: Jun/03 00:45:01
Update period: 300 seconds
Update times: 1
Content
--------------------------------------------------------------------------------
101.224.0.0 /13 1
101.248.0.0 /15 1
101.80.0.0 /12 1
106.112.0.0 /13 1
106.16.0.0 /12 1
106.224.0.0 /12 1
106.32.0.0 /12 1
106.4.0.0 /14 1
106.56.0.0 /13 1
106.80.0.0 /12 1
106.8.0.0 /15 1
110.152.0.0 /14 1
110.156.0.0 /15 1
110.166.0.0 /15 1
………………
以上是部分chinall脚本的内容,其中每个IP段之后都有一个数字(比如以上部分的1,后面还有2-7),这是我们事先对地址库文件进行编译以后的分类,数字的含义如下:
1 CTC 2 CNC 3 CMCC 4 CUC 5 CRTC 6 CERNET 7 OTHER
以上分类会在后面建立aFlex脚本的时候用到。
E、 建立相应的snatpool
根据网络环境规划,需要建立如下的snatpool
n ctc_nat 从电信出口出去的流量进行NAT的地址,这里是200.200.200.1,既AX连接电信接口的IP地址
n cnc_nat从联通出口出去的流量进行NAT的地址,这里是100.100.100.1,既AX连接联通接口的IP地址
进入config mode-->service-->IP Source NAT,点击Add:
点击ok,这样就创建了ctc_nat,同理创建cnc_nat。
F、建立相应的aFlex脚本。
需要建立如下的aFlex脚本:
n links_select_tcp client向外发外的tcp数据处理的方式
n links_select_udp client向外发出的udp数据处理的方式
进入config mode-->service-->aFlex,点击Add:
点击ok,既成功建立了links_select_tcp这个aFlex脚本。同理创建links_select_udp脚本(将cnc_gw_tcp以及ctc_gw_tcp更换成cnc_gw_udp以及ctc_gw_udp即可)。
links_select_tcp aFlex脚本解析:
when CLIENT_ACCEPTED {
set remote_addr [IP::local_addr]
set bwfile_group_id [ POLICY::bwlist id $remote_addr chinall ]
scan $remote_addr "%d.%d.%d.%d" a b c d
if { ($bwfile_group_id equals 2)} {
if { [LB::status node 100.100.100.254 ] == "up"} {
snatpool cnc_nat
pool cnc_gw_tcp
} else {
snatpool ctc_nat
pool ctc_gw_tcp
}
} else {
snatpool ctc_nat
pool ctc_gw_tcp
}
}
在aFlex脚本中,[IP::local_addr]的意义是随着上下文语境不同而不同的,在本文中的clientside上下文语境,是目标IP地址,这和我们通常理解的local是本地、源的意思不同,按照一般理解,目标IP应该是remote这个关键字。所以在上面的脚本中,为了和我们通常的理解达成一致,我们将[IP::local_addr]的值赋值给了remote_addr这个变量。该改变是通过set remote_addr [IP::local_addr] 这条命令来完成的。
同样的,还有一条set命令:
set bwfile_group_id [ POLICY::bwlist id $remote_addr chinall ],这条命令是将我们在前面创建的PBSLB策略chinall中目标网段后面的数字作为值赋值给bwfile_group_id这个变量(组ID),这样就可以直接使用分类数字作为条件进行判断。
if { ($bwfile_group_id equals 2)} {
if { [LB::status node 100.100.100.254 ] == "up"} {
snatpool cnc_nat
pool cnc_gw_tcp
} else {
snatpool ctc_nat
pool ctc_gw_tcp
}
} else {
snatpool ctc_nat
pool ctc_gw_tcp
}
}
上面这一段很简单,逻辑如下:
1、假如组ID等于2,既访问的目标IP是联通的地址,那么:
假如100.100.100.254(联通网关)状态是UP,则将该数据请求的源ip地址NAT成cnc_nat(100.100.100.1),同时从cnc_gw_tcp这个service-group发出去(cnc_gw_tcp中联通网关100.100.100.254优先级高,所以就是从联通网关发送出去);假如100.100.100.254状态不是UP(就是down),则使用ctc_nat(200.200.200.1)这个地址对数据请求的源IP地址进行NAT,同时从ctc_gw_tcp这个service-group发出去(ctc_gw_tcp中电信网关200.200.200.254优先级高,所以既是从电信网关发出)
2、假如组ID不等于2,既访问的目标IP非联通地址,则将请求源地址NAT成
ctc_nat,同时从电信网关发送出去。
综上所述,以上脚本完成了智能选路以及链路备份的功能。
F、 创建virtual server
根据网络环境规划,我们需要创建3个virtual server:
n to_internet 该virtual server是用来完成对内网client发起的上网请求进行智能选路和NAT的
n to_webserver_ctc 该virtual server是用来完成外网来的从电信出口来访问webserver的请求向内网server的转发同时完成服务器负载均衡的
n to_webserver_cnc 该virtual server是用来完成外网来的从联通出口来访问webserver的请求向内网server的转发同时完成服务器负载均衡的
进入config mode-->service-->SLB-->Virtual Server,点击Add:
注意,在第一行Name的最后,有个Wildcard的选项需要勾上,因为这个时候virtual server匹配的条件不是某一个具体的目标IP地址,而是所有从内网client发送来的访问公网的请求,这种情况下需要勾选Wildcard(相当于目标IP地址为0.0.0.0/0)。还记得前面在内网ve接口30上我们启用了一个选项:
Allow Promiscuous VIP,这个选项的功能就是在内网接口上允许接收目标地址是Wildcard的请求,如果在内网接口上不启用,则就算创建Wildcard,这些请求也不会命中virtual server。
创建完Name和勾选Wildcard选项以后,在界面下边的Port部分,点击Add:
按照如上图所示方法创建所有TCP协议的处理方式
注意几个要点:
1、Direct Server Return: 一定要选择Enable
2、aFlex要在下拉菜单里选择 links_select_tcp
3、Use received hop for response需要打钩。
4、Type选择tcp
5、Port选0
以上5个步骤就创建了to_internet VS的port 0 TCP部分。同理创建port 0 UDP及port 0 others
完成port 0 tcp和port 0 udp以及port 0 others的配置以后,正常情况下用户从内到外的访问请求的智能选路和链路备份就已经完成了。
然后在创建to_webserver_ctc以及to_webserver_cnc的VS(参考标准virtul server的配置),则全部配置就完成了(正常情况下完成了访问客户指定公网IP和端口的请求转发到指定内网1台Server上(或者多台))。完成双向地址转换配置以后virtual server情况如下:
第四部分、GSLB域名解析部分
该部分就涉及到前面提到的客户3类需求(蓝色字体)的第3个,既:
3、 当外网用户在访问www.test.com域名的时候发起DNS查询,如果是电信的用户,则AX返回电信链路的映射IP;如果是联通的用户,则返回联通链路的映射IP
配置AX系列GSLB功能,需要对几个概念有基本的了解:
1、DNS Proxy: 说明A10分别在每条出口链路上的哪个IP地址上监听DNS请求,一般来说有几条链路就需要有几个DNS Proxy的地址,每条出口链路一个。例如,在本文环境中,dns_ct_proxy为200.200.200.2,dns_cnc_proxy为100.100.100.2(注:在AX设备上,某条链路接口IP地址不能和这条链路上DNS Proxy地址一样,所以每条链路上的DNS Proxy地址都需要单独指定一个)。
2、Geo-location: 在智能域名解析的时候,AX需要判断接收到的dns请求的源地址(Local DNS)是属于哪个运营商的,而各个运营商的IP地址段就是在这里导入,AX通过比对接收到的dns的源地址属于哪个运营商的IP网段,从而判断该请求来自于哪个运营商的用户,进而判断出应该将属于哪个运营商的映射IP返回给客户端。
3、Policy: AX在接收到DNS请求的时候的应答策略,例如各个响应策略的优先级,响应方式、响应模式等等
4、Service IP: 应用在不同链路上的映射IP,例如在本案例中,web应用在电信链路上的映射IP为200.200.200.200,在联通链路上的映射为100.100.100.100
5、Site: 绑定链路接口IP、service IP、Geo-location在一起,这样AX知道哪些运营商用户的请求,用哪条链路的哪个service IP来响应。
6、Zone: 设置需要进行智能域名解析的具体域名,同时设置该域名对应的不同链路上的service IP,这样AX可以根据Site的设置,判断出来源dns请求所属的的运营商,同时根据Site的绑定设置,选择合适Service IP来响应。理解了以上6个关键元素,我们就可以开始配置GSLB了。
为了成功配置GSLB功能,如上6个元素需要依次配置:
A、 建立相应的DNS Proxy
按照本文网络环境规划,需要建立2个DNS Proxy:
进入config-->service-->GSLB-->DNS Proxy,点击Add:
建立dns_ct_proxy,IP为200.200.200.200为AX在电信链路上的监听地
址:
点击GSLB Port部分的Add:
默认Port既为53端口,所以直接点击ok确认:
再点击ok完成dns_ct_proxy的设置.同理添加dns_cnc_proxy,最终如下:
B、 建立相应的Geo-location:
进入config-->service-->GSLB-->Geo-location-->import:
跟前面的导入PBSLB地址库的方式类似,这里我们也采用tftp的方式,在Host:输入tptp server的地址,在Location:输入tftp server上默认目录下的地址库文件:geo_in_iplist.csv,然后点击Add,成功以后会在下面出现相应的地址表:
在上图下部分的Template部分,在name: 输入”geo.csv”,在Delimiter: 输入”,”,在IP-from:输入”2”,在IP-To:输入”3”,在Site:输入”1”,点击Add:
然后就会出现geo.csv这个template,最后我们需要做的就是将我们创建的geo.csv的template与前面用tftp上传的IP地址库文件geo_in_iplist.csv关联在一起:
在上图中下方的Load/Unload的File:填入我们刚上传的geo_in_iplist.csv,同时在Template:填入我们刚创建的geo.csv,点击Add,成功以后显示如下:
这个时候我们点击Geo-locatiom下的Find:
然后显示如下:
这个时候我们发现从上到下多了OTHER,CUC,CTC,CRTC,CNC,CMCC,CERNET这些常见运营商的IP地址库,这说明我们的地址库已经成功导入。
C、 建立我们需要的Policy:
进入config mode-->service-->GSLB-->Policy,点击Add:
在Name:输入test,然后在Metric中将右边的Active RTT拖动到左边Geographic的下面:
这里的Metric是设置AX的响应策略,其中Geographic是以地理位置,及所属ISP方式来进行响应,Active Rtt是以AX主动探测响应延时的方式进行响应,Round Robin是以轮训的方式进行响应,由上到下优先级依次降低。
然后点开DNS Option,勾选Active Only,Best Only,Server Mode:
注:Active Only,Best Only是只返回active以及最匹配的一个,Server Mode则是表示用AX本身来进行DNS响应,而不是转发DNS请求到客户内部的DNS server。
然后点击下方的OK确认,创建完成后如下图所示:
D、 建立相应的Service IP:
进入config mode-->service-->GSLB-->Service IP,点击Add:
按照下图创建web网站在电信链路的Service IP,如下图:
注:上图中的Health Monitor及Port部分不是必须的,可根据实际情况填写。
同理创建web_cnc,最终如下图:
E、 建立相应的Site:
进入config mode-->service-->GSLB-->Site,点击Add:
在Name:输入ct_site,建立电信站点,Weight保留默认的1,然后在SLB-Device,点Add:
其中,IP ADDRESS填写AX电信链路的接口IP,VIP server,选择下拉菜单的web_ct(这个就是我们前面创建的Service IP),然后点击Add,,然后点击ok,这样SLB-Device就设置完了。然后点开Geo-location,可以在下拉菜单看到我们前面创建的IP地址库,将需要将域名解析请求解析成电信映射地址200.200.200.200的运营商地址段通过Add关联到ct_site,比如我们需要如果是除了CNC以外的用户的dns请求都解析成200.200.200.2,则将所有需要的地址信息都加入:
这样做的目的,是告诉AX,除了CNC以后的其他运营商的用户,都关联到ct_site,也就是关联到200.200.200.1所在链路以及200.200.200.200上。
同理创建cnc_site,最终如下:
注:在cnc_site里,Geo-location下拉菜单只选择CNC即可。
F、 建立相应的Zone:
进入config mode-->service-->GSLB-->Zone,点击Add:
Name:后输入我们要解析的具体域名的上级域名,这里我们要解析的域名为www.test.com,所以我们输入上级域名test.com,Policy保留默认default,然后在Service里点击Add:
在上图中,service:我们选择上级域名下的主机,比如这里我们需要解析www的主机,就填写在service:(注:这里虽然没打*,可是却非常重要,不能乱填),Port:根据实际情况选择,这里我们选择HTTP,Policy:选择我们创建的test。
然后在DNS Address Record界面的VIP Order分别选择刚才创建的Service IP地址,勾选Static,然后点击Add,把需要解析的web应用的2个公网IP与这个域名关联在一起,最后点击ok返回。
至此关于www.test.com域名的动态智能解析的配置就完成了。
如下我们归纳一下AX进行GSLB时候的流程:
1、客户DNS请求(假设源地址61.139.2.69,请求解析的域名www.test.com)到达DNS Proxy指定的IP地址,例如本案例中的200.200.200.2
2、AX将源地址61.139.2.69与Geo-location下的各运营商网段进行比对,确定该地址属于CTC的网段
3、AX将DNS请求的域名与Zone中创建的域名test.com进行比对,确认客户是对test.com域中的Service :www进行解析请求,而同时www这个服务关联了2个service IP :200.200.200.200和100.100.100.100
4、由于在Site设置中,Geo-location中的 CTC与200.200.200.1这条链路以及Service IP 200.200.200.200都绑定在ct_site站点中,而在Policy中,是以Geo-location这个判断方式为优先算法,同时勾选的Active Only和Best Only会让AX只选取Active和最匹配的一个IP地址,所以AX会以ct_site这个绑定为首要判断条件,将200.200.200.200这个和CTC绑定在一起的Service IP作为对客户的DNS查询的应答结果返回给客户,至此一个GSLB请求查询结束。
t.d.