F5 LTM 在SIP消息负载均衡中存在的问题

F5 Local Traffic Manager 常被用来作应用交付负载均衡器,支持HTTP和SIP协议,以及从IP层(3层)到应用层(7层 standard)的负载均衡,同时兼具路由转发功能。业界使用F5 LTM来完成HTTP请求负载较多,基于SIP协议的7层协议较少。在使用该负载均衡器的过程当中,我总结了一些问题:html

  1. 使用基于TCP的SIP协议传输大消息时,若是使用Standard模式,该消息会被切分,致使服务器端没法正常接收到消息。所以,只能选择Performance Layer4模式。后端

  2. F5 LTM支持AUTO MAP模式的NAT功能,却没法处理SIP消息的端口问题。
    F5为全代理工做模式,设备同时与客户端和真实服务器各创建一条链接,分别被定义为client side和server side。客户端会与F5的vs创建一条链接,F5会以自身接口IP与真实服务器创建一条链接。即:服务器

    Client Side    Server Side
    Client------F5 VS
    F5 接口IP------Server

    因为F5与后端服务器通信时仅使用的自身一个接口IP,因此就须要经过不一样的源端口来区分不一样客户端的Session。例:负载均衡

    192.168.1.1:2000--->192.168.1.100:8080
    192.168.1.200:2000--->192.168.1.254:8080
    192.168.1.200:2000<-----192.168.1.254:8080
    192.168.1.1:2000<-----192.168.1.100:8080

    如上为当有一个客户端时F5默认使用与客户端相同端口转发数据包,固定端口2000,不使用rport时,根据VIA字段回复,能正确处理该消息。此时,有另外一个客户端也是固定2000端口来访问。例:ide

    192.168.1.2:2000--->192.168.1.100:8080
    192.168.1.200:5555--->192.168.1.254:8080
    192.168.1.200:**2000**<-----192.168.1.254:8080

    当同时有另一个客户端访问该VS时F5将使用随机端口“举例5555”与服务器通讯,否则则没法区分Session。此处,没有使用rport,致使回复给F5的端口和F5发请求的端口不一致。(若是使用rport,服务器会根据rport来回复响应,此处,rport应为5555)。代理

所以,在实际应用当中使用F5做为SIP负载均衡器存在如下问题:固定端口后,大多数平台和设备使用5060端口进行SIP信令传输,在上次请求链接没有断开时,下次请求会使用随机端口向服务器发送请求响应。在不使用rport机制的状况下,服务器默认向VIA字段里的地址和端口进行回复,即响应被回复到了5060,致使F5没法正确匹配请求和响应,从而响应没法正确返回客户端(而是回复到了最初占用5060端口的那个客户端上了)。code

建议解决方案:统一收发端口后,使用rport机制,在VIA字段中携带rport,从而服务器在接收请求后会记录F5发送请求的端口,回复响应会回复到该端口,让F5匹配请求和响应。固定端口使得F5能正常将响应回复到客户端。orm

另,rport机制详见:RFC 3581server

相关文章
相关标签/搜索