Citrix ADC

SIP服务器负载均衡

SIP (Session Initiation Protocol)是用来发起、管理和终止多媒体通信会话的协议。它已经成为互联网电话(VoIP)的标准。SIP消息可以通过TCP或UDP协议传输。SIP消息有两种类型:请求消息和响应消息。

基于SIP的通信系统中的流量通过专用的设备和应用程序(实体)路由。在多媒体通信会话中,这些实体交换消息。下图是一个基于SIP的基本通信系统:

图1。基于SIP的通信系统

SIP

Citrix ADC使您能够在UDP或TCP(包括TLS)上负载平衡SIP消息。您可以配置Citrix ADC将SIP请求负载均衡到一组SIP代理服务器。为此,创建一个负载均衡虚拟服务器,将负载均衡方法和持久化类型设置为以下组合之一:

  • Call-ID哈希负载均衡方法,没有持久化设置
  • 基于Call-ID的持久化与最少连接或轮询负载均衡方法
  • 基于规则的持久化与最少连接或轮询负载均衡方法

此外,在默认情况下,Citrix ADC通过SIP请求的头追加RPORT,以便服务器将响应发送回发出请求的源IP地址和端口。

注意:要使负载均衡工作,您必须配置SIP代理,使它们不会向SIP报头/有效负载添加私有IP地址或私有域。SIP代理必须在SIP报头中添加解析为SIP虚拟服务器IP地址的域名。此外,SIP代理必须与公共数据库通信以共享注册信息。

服务器发起的流量

对于sip服务器发起的outbound流量,需要在Citrix ADC上配置RNAT,将客户端使用的私有IP地址转换为公网IP地址。

如果您已配置了包括RNAT源端口或目的端口的SIP参数,则设备将请求数据包的源端口和目的端口的值与RNAT源端口和RNAT目的端口进行比较。如果其中一个值匹配,设备就用RPORT更新VIA报头。然后,来自客户端的SIP响应将遍历与请求相同的路径。

对于服务器发起的SSL通信,Citrix ADC使用内置的证书密钥对。如果要使用自定义证书密钥对,请将自定义证书密钥对绑定到Citrix ADC内部服务nsrnatsip - 127.0.0.1 - 5061

支持策略和表达式

Citrix ADC默认表达式语言包含几个操作会话发起协议(Session Initiation Protocol, SIP)连接的表达式。这些表达式只能绑定到基于SIP的(sip_udp、sip_tcp或sip_ssl)虚拟服务器和全局绑定点。您可以在内容切换、速率限制、响应器和重写策略中使用这些表达式。

配置SIP信令的TCP / UDP负载分担

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负载均衡拓扑

SIP LB拓扑

实体类型 的名字 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流量基本负载分担的配置方法。

  1. 配置服务,并为您想要负载均衡的每种SIP流量配置虚拟服务器:

    • SIP_UDP—使用UDP协议进行SIP流量负载分担。
    • SIP_TCP—使用TCP协议对SIP流量进行负载分担。
    • SIP_SSL—如果您正在通过TCP对SIP流量进行负载均衡和保护。

    注意:如果使用SIP_SSL,请确保创建一个SSL证书-密钥对。有关详细信息,请参见添加证书密钥对。

  2. 将服务绑定到虚拟服务器。

  3. 如果您希望使用默认(tcp-default),创建自定义监控器并将其绑定到服务。Citrix ADC提供两种自定义监视器类型,sip uri而且SIP-TCP,用于监控SIP业务。

  4. 如果使用的是SIP_SSL虚拟服务器,则需要为虚拟服务器绑定SSL证书密钥对。

  5. 如果您在部署中使用Citrix ADC作为SIP服务器的网关,请配置RNAT。

  6. 如果需要将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作为条件和剪断NAT IP地址,或者一个RNAT条目使用ACL作为条件和独特的IP地址作为NAT IP地址:

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  

SIP流量基于UDP的负载分担配置示例

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 

SIP流量基于TCP的负载分担配置示例

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流量配置基本负载均衡设置

  1. 导航到流量管理>负载均衡>虚拟服务器,并添加SIP_UDP、SIP_TCP或SIP_SSL类型的虚拟服务器。

  2. 单击服务,并添加SIP_UDP、SIP_TCP或SIP_SSL类型的服务。

  3. (可选)单击监控节,并添加类型为:SIP-UDP或SIP-TCP的监视器。

  4. 将监视器绑定到服务,并将服务绑定到虚拟服务器。

  5. 如果创建了SIP_SSL虚拟服务器,则需要将SSL证书密钥对绑定到虚拟服务器。单击证书部分,并将证书密钥对绑定到虚拟服务器。

  6. 根据实际网络拓扑结构的需要,配置RNAT。使用实例配置RNAT。

    1. 导航到System > Network >路由
    2. 在“路由”页面,单击RNAT选项卡。
    3. 在详细信息窗格中,单击配置RNAT
    4. 在“配置RNAT”对话框中,执行以下操作之一:
      • 如果需要以网络地址为条件新建RNAT表项,单击网络并设置如下参数:
        • 网络
        • 子网掩码
      • 如果需要将扩展ACL作为创建RNAT表项的条件,请单击ACL并设置如下参数:
        • ACL的名字
        • 重定向端口
    5. 如果需要配置SNIP地址为NAT地址,请跳过步骤7。
    6. 如果需要设置一个唯一的NAT IP地址,在“可选NAT IP地址”列表中选择需要设置为NAT IP地址的IP地址,单击“新建”。选择的NAT IP地址将出现在“已配置NAT IP地址”列表中。
    7. 单击“创建”,然后单击“关闭”。

    如果要使用自定义证书密钥对,请将自定义证书密钥对绑定到Citrix ADC内部服务nsrnatsip - 127.0.0.1 - 5061.绑定pair:

    1. 导航到流量管理>负载均衡>业务并单击“内部服务”页签。
    2. 选择“nsrnatsip-127.0.0.1-5061”,单击编辑
    3. 单击证书部分并将证书密钥对绑定到内部服务。
  7. 如果需要在SIP服务器发起的SIP消息后附加RPORT,需要配置SIP参数。导航到流量管理>负载均衡单击“更改SIP设置”,设置各项SIP参数。

SIP表达式和策略示例:客户端请求中启用压缩

Citrix ADC无法处理压缩后的客户端SIP请求,导致客户端SIP请求失败。

您可以配置一个响应器策略,拦截来自客户端的SIP NEGOTIATE消息并查找压缩头。如果消息包含压缩报头,策略将响应“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