对一组sip服务器进行负载平衡
会话启动协议(sip)旨在启动,管理和终止多媒体通信会话。它已成为互联网电话(VoIP)的标准。Sip消息可以通过TCP或udp传输。Sip消息有两种类型:请求消息和响应消息。
基于sip的通信系统中的流量通过专用设备和应用程序(实体)进行路由。在多媒体通信会话中,这些实体交换消息。下图显示了基于sip的基本通信系统:
图 1.基于sip的通信系统
Citrix ADC使您能够通过UDP或TCP(包括TLS)对SIP消息进行负载平衡。您可以将Citrix ADC配置为对一组SIP代理服务器的SIP请求进行负载均衡。为此,您可以使用负载平衡方法和持久性类型设置为以下组合之一来创建负载平衡虚拟服务器:
- 无持久性设置的呼叫id哈希负载平衡方法
- 基于呼叫id的持久性和最小连接或循环负载平衡方法
- 具有最少连接或循环负载均衡方法的基于规则的持久
此外,默认情况下,Citrix ADC通过SIP请求的标头附加RPORT,以便服务器将响应发回到请求源IP地址和端口。
注意:要使负载平衡起作用,您必须配置SIP代理,以便它们不会将私有IP地址或私有域添加到SIP标头/负载中。Sip代理必须在Sip标头中添加一个域名,该域名可解析为Sip虚拟服务器的IP地址。此外,sip代理必须与公共数据库通信才能共享注册信息。
服务器启动的流
对于SIP服务器启动的出站流量,请在Citrix ADC上配置RNAT,以便将客户端使用的私有IP地址转换为公有IP地址。
如果您配置了包括RNAT源端口或目标端口的SIP参数,则设备会将请求数据包的源端口和目标端口的值与RNAT源端口和RNAT目标端口的值进行比较。如果其中一个值匹配,设备将使用rport更新通过标头。然后,来自客户端的sip响应将遍历与请求相同的路径。
对于服务器启动的SSL流量,Citrix ADC使用内置证书密钥对。如果要使用自定义证书密钥对,请将自定义证书密钥对绑定到名为nsrnatsip - 127.0.0.1 - 5061的Citrix ADC内部服务。
对策略和表达式的支持
Citrix ADC默认表达式语言包含多个在会话初始协议(SIP)连接上运行的表达式。这些表达式只能绑定到基于SIP的(sip_udp, sip_tcp或sip_ssl)虚拟服务器和全局绑定点。您可以在内容切换、速率限制、响应程序和重写策略中使用这些表达式。
为通过TCP或udp发送sip信令流量配置负载平衡
Citrix ADC可以对通过UDP或TCP发送请求的SIP服务器进行负载平衡,包括受TLS保护的TCP流量。Adc提供以下服务类型来平衡sip服务器的负载:
- Sip_udp -当sip服务器通过udp发送sip消息时使用。
- Sip_tcp -当sip服务器通过TCP发送sip消息时使用。
- Sip_ssl -用于使用SSL或TLS保护TCP上的sip信令流量。Citrix ADC支持以下模式:
- 客户端,adc和sip服务器之间的端到端TLS连接。
- 客户端和adc之间的TLS连接,以及adc和sip服务器之间的TCP连接。
- 客户端和adc之间的TCP连接,以及adc和sip服务器之间的TLS连接。
下图显示了配置为对通过TCP或UDP发送SIP消息的一组SIP服务器进行负载平衡的设置的拓扑结构。
图 2.Sip负载平衡拓扑
实体类型 | 名称 | IP地址 | 端口 | 服务类型/协议 |
---|---|---|---|---|
虚拟服务器 | Vserver-LB-1 | 10.102.29.65 | 80 | Sip_udp / sip_tcp / sip_ssl |
服务 | Service-SIP-1 | 192.168.1.6 | 80 | Sip_udp / sip_tcp / sip_ssl |
Service-SIP-2 | 192.168.1.5 | 80 | Sip_udp / sip_tcp / sip_ssl | |
显示器 | 默认值 | 无 | 80 | Sip_udp / sip_tcp / sip_ssl |
以下是配置sip流量的基本负载均衡的概述:
为要平衡负载的每种类型的sip流量配置服务并配置虚拟服务器:
- SIP_UDP-如果您正在通过udp对sip流量进行负载平衡。
- SIP_TCP-如果您正在通过TCP对sip流量进行负载平衡。
- SIP_SSL-如果您正在进行负载平衡并通过TCP保护sip流量。
注意:如果您使用sip_ssl,请务必创建SSL证书密钥对。有关更多信息,请参阅添加证书密钥对。
将服务绑定到虚拟服务器。
如果要使用默认监视器(tcp-default)以外的监视器监视服务的状态,请创建一个自定义监视器并将其绑定到服务。Citrix ADC提供了两种自定义监视器类型sip uri和SIP-TCP,用于监控sip服务。
如果使用sip_ssl虚拟服务器,请将SSL证书密钥对绑定到虚拟服务器。
如果您使用Citrix ADC作为部署中SIP服务器的网关,请配置RNAT。
如果要将rport附加到从sip服务器启动的sip消息中,请配置sip参数。
使用命令行界面为sip流量配置基本负载平衡设置
创建一项或多项服务。在命令提示符下,键入:
add service (SIP_UDP | SIP_TCP | SIP_SSL)
示例:
add service service - sip - udp -1 192.0.2.5 SIP_UDP 80
根据需要创建尽可能多的虚拟服务器来处理您创建的服务。虚拟服务器类型必须与绑定到虚拟服务器的类型匹配。在命令提示符下,键入:
add lb vserver (SIP_UDP | SIP_TCP | SIP_SSL)
示例:
add lb vserver vserver - lb -1 SIP_UDP 10.102.29.60 80
将每个服务绑定到虚拟服务器。在命令提示符下,键入:
绑定lb vserver
示例:
bind lb vserver vserver - lb -1 Service-SIP-UDP-1
(可选)创建sip-udp或sip-tcp类型的自定义监视器,然后将监视器绑定到服务。在命令提示符下,键入:
add lb monitor [] bind lb monitor
示例:
add lb monitor mon1 sip- udp -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200 bind monitor mon1 Service-SIP-UDP-1
如果您创建了sip_ssl虚拟服务器,请将SSL证书密钥对绑定到虚拟服务器。在命令提示符下,键入:在命令提示符下,键入:
绑定ssl vserver -certkeyName -CA -skipCAName
示例:
绑定ssl vserver vserver - lb -1 -certkeyName——NeedCopy >
根据网络拓扑的要求配置rnat。在命令提示符下,键入以下命令之一,分别创建使用网络地址作为条件的RNAT条目和剪断作为NAT IP地址,使用网络地址作为条件的RNAT条目以及使用唯一IP地址作为NAT IP地址的RNAT条目,使用ACL作为RNAT条目条件和剪断作为NAT IP地址,或使用ACL作为条件和唯一IP地址作为NAT IP地址的RNAT条目:
add rnat ( | ( [-redirectPort ])) bind rnat @…show rnat
示例:
添加rnat rnat -1 192.168.1.0 255.255.255.0绑定rnat rnat -1——NeedCopy >
如果要使用自定义证书密钥对,请将自定义证书密钥对绑定到名为nsrnatsip - 127.0.0.1 - 5061的Citrix ADC内部服务。
add ssl certKey -cert [-key ] bind ssl service -certkeyName
示例:
添加ssl certKey c1 -cert cert.epm -key key。绑定ssl服务——NeedCopy >
如果要将rport附加到sip服务器启动的sip消息中,请在命令提示符下键入以下命令:
set lb sipParameters -rnatSrcPort -rnatDstPort - retrydur -addRportVip - sip503RateThreshold
通过udp对sip流量进行负载平衡的示例配置
add service service- udp -1 10.102.29.5 SIP_UDP 80 Done add lb vserver vserver- lb -1 service- udp -1 Done bind lb vserver vserver- lb -1 service- udp -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200 Done bind mon mon1 service- udp -1 Done add rnat rnat -1 192.168.1.0 255.255.255.0 Done set lb sipParameters -rnatSrcPort 5060 -rnatDstPort 5060 -retryDur 1000 -addRportVip ENABLED -sip503RateThreshold 1000 Done
通过TCP对sip流量进行负载平衡的示例配置
add service service- tcp -1 10.102.29.5 SIP_TCP 80 Done add lb vserver vserver- lb -1 service- tcp -1 Done bind lb vserver vserver- lb -1 service- tcp -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200 Done bind mon mon1 service- tcp -1 rnat rnat -1 192.168.1.0 255.255.255.0 Done set lb sipParameters -rnatSrcPort 5060 -rnatDstPort 5060 -retryDur 1000 -addRportVip ENABLED -sip503RateThreshold 1000 Done
通过TCP进行负载平衡和保护sip流量的示例配置
add service service- sip- ssl -1 10.102.29.5 SIP_SSL 80 Done add lb vserver vserver- lb -1 SIP_SSL 10.102.29.60 80 Done bind lb vserver vserver- lb -1 service- sip- ssl Done add lb mon mon1 sip- tcp -sipMethod REGISTER -sipuRI sip:mon@test.com -sipregURI sip:mon@test.com -respcode 200 Done bind mon mon1 service- sip- ssl Done bind ssl vserver vserver- lb -1 -certkeyName CertKey-SSL-1 Done add rnat rnat -1 192.168.1.0 255.255.255.0 Done set lb sipParameters -rnatSrcPort 5060 -rnatDstPort 5060 -retryDur 1000-addRportVip ENABLED -sip503RateThreshold 1000 Done
使用GUI为sip流量配置基本负载平衡设置
导航到流量管理 > 负载平衡 > 虚拟服务器,然后添加类型为sip_udp, sip_cp或sip_ssl的虚拟服务器。
单击服务部分,然后添加类型为sip_udp, sip_cp或sip_ssl的服务。
(可选)单击监视器部分,然后添加类型的监视器:sip-udp或sip-tcp。
将监视器绑定到服务,然后将服务绑定到虚拟服务器。
如果您创建了sip_ssl虚拟服务器,请将SSL证书密钥对绑定到虚拟服务器。单击“证书”部分,并将证书密钥对绑定到虚拟服务器。
根据网络拓扑的要求配置rnat。要配置rnat:
- 导航到系统 > 网络 > 路由。
- 在路由页面上,单击rnat选项卡。
- 在详细信息窗格中,单击配置rnat。
- 在"配置rnat "对话框中,执行以下操作之一:
- 如果要使用网络地址作为创建rnat条目的条件,请单击网络并设置以下参数:
- 网络
- 网络掩码
- 如果要使用扩展acl作为创建rnat条目的条件,请单击ACL并设置以下参数:
- Acl名称
- 重定向端口
- 如果要使用网络地址作为创建rnat条目的条件,请单击网络并设置以下参数:
- 要将snip地址设置为NAT IP地址,请跳至步骤
- 若要将唯一IP地址设置为NAT IP,请在“可用NAT IP”列表中选择要设置为NAT IP的IP地址,然后单击“添加”。您选择的NAT IP将显示在已配置的NAT IP的列表中。
- 单击创建(创建),然后单击关闭(关闭)。
如果要使用自定义证书密钥对,请将自定义证书密钥对绑定到名为nsrnatsip - 127.0.0.1 - 5061的Citrix ADC内部服务。要绑定该货币对:
- 导航到流量管理 > 负载平衡 > 服务,然后单击内部服务选项卡。
- 选择nsrnatsip-127.0.0.1-5061,然后单击编辑。
- 单击”证书”部分并将证书密钥对绑定到内部服务。
如果要将rport附加到sip服务器启动的sip消息中,请配置sip参数。导航到流量管理 > 负载平衡,然后单击更改sip设置,设置各种sip参数。
Sip表达式和策略示例:在客户端请求中启用压缩
Citrix ADC无法处理压缩的客户端SIP请求,因此客户端SIP请求失败。
您可以配置响应程序策略,从客户端截获sip corver消息并查找压缩标头。如果邮件包含压缩标头,则策略将以“400错误请求”响应,以便客户端重新发送请求而不压缩请求。
在命令提示符下,键入以下命令以创建响应程序策略:
add responder action sipaction1 respondwith q{"SIP/2.0 400 Bad Requestrnrn"} Done add responder policy sippol1 add responder policy sippol1 "SIP. req . method . eq ("NEGOTIATE")&&SIP.REQ.HEADER("Compression")sipaction1