Citrix ADC

Puerta de enlace de capa de aplicación para protocolo SIP

El uso de NAT a gran escala (LSN) con el Protocolo de inicio de sesión (SIP) es complicado, ya que los mensajes SIP contienen direcciones IP en los encabezados SIP, así como en el cuerpo SIP. Cuando LSN se utiliza con SIP, los encabezados SIP contienen información sobre la persona que llama y el receptor, y el dispositivo traduce esta información para ocultarla de la red externa. El cuerpo SIP contiene la información del Protocolo de descripción de la sesión (SDP), que incluye direcciones IP y números de puerto para la transmisión de los medios.

SIP ALG se adhiere a los siguientes RFC:

  • RFC 3261
  • RFC 3581
  • RFC 4566
  • RFC 4475

Nota

SIP ALG se admite en un dispositivo independiente de Citrix ADC, en una configuración de alta disponibilidad de Citrix ADC, así como en una configuración de clúster de Citrix ADC.

Cómo funciona SIP ALG

La forma en que se realiza la traducción de direcciones IP depende del tipo y la dirección del mensaje. Un mensaje puede ser cualquiera de los siguientes:

  • Solicitud entrante
  • Respuesta de salida
  • Solicitud saliente
  • Respuesta entrante

Para un mensaje saliente, la dirección IP privada y el número de puerto del cliente SIP se reemplazan por la dirección IP pública y el número de puerto propiedad de Citrix ADC, denominados dirección IP del grupo LSN y número de puerto, especificados durante la configuración de LSN. Para un mensaje entrante, la dirección IP del grupo LSN y el número de puerto se reemplazan por la dirección privada del cliente. Si el mensaje contiene direcciones IP públicas, Citrix ADC SIP ALG las conserva. Además, se crea un agujero de acceso en el:

  • La dirección IP del grupo LSN y el puerto en nombre del cliente privado, de modo que los mensajes que llegan a esta dirección IP y puerto de la red pública se tratan como mensajes SIP.
  • Dirección IP pública y puerto en nombre de los clientes públicos, de modo que los mensajes que llegan a esta dirección IP y puerto de la red privada se tratan como mensajes SIP.

Cuando se envía un mensaje SIP a través de la red, SIP Application Layer Gateway (ALG) recopila información del mensaje y traduce las direcciones IP de los siguientes encabezados en direcciones IP del grupo LSN:

  • Vía
  • Contacto
  • Ruta
  • Record-Route

En el siguiente mensaje de solicitud SIP de ejemplo, LSN reemplaza las direcciones IP en los campos de encabezado para ocultarlas de la red externa.

INVITE adam@10.102.185.156 SIP/2.0 Via: SIP/2.0/UDP 192.170.1.161:62914 From: eve@10.120.210.3 To: adam@10.102.185.156 Call-ID: a12abcde@10.120.210.3 Contact: adam@10.102.185.156 Route: <sip:netscreen@10.150.20.3:5060> Record-Route: <sip:netscreen@10.150.20.3:5060>

Cuando llega un mensaje que contiene información SDP, SIP ALG recopila información del mensaje y traduce las direcciones IP de los siguientes campos en direcciones IP del grupo LSN y números de puerto:

  • c= (información de conexión)

    Este campo puede aparecer en el nivel de sesión o de medios. Aparece en el siguiente formato:

    c=<network-type><address-type><connection-address>

    Si la dirección IP de destino es una dirección IP de unidifusión, el SIP ALG crea agujeros de acceso mediante la dirección IP y los números de puerto especificados en el campo m=.

  • m= (anuncio de los medios)

    Este campo aparece en el nivel de medios y contiene la descripción del medio. Aparece en el siguiente formato:

    m=<media><port><transport><fmt list>

  • a=(information about the media field)

    Este campo puede aparecer en el nivel de sesión o multimedia, con el siguiente formato:

    a=<attribute>

    a=<attribute>:<value>

En el siguiente extracto de una sección SDP de ejemplo se muestran los campos que se traducen para la asignación de recursos.

o=usuario 2344234 55234434 IN IP4 10.150.20.3

c=en IP4 10.150.20.3

m=audio 43249 RTP/AVP 0

La siguiente tabla muestra cómo se traduce la carga SIP.

     
Solicitud entrante (de público a privado) Para: Ninguno
  De: Ninguno
  Id. de llamada: Ninguno
  Vía: Ninguno
  URI de solicitud: Reemplazar la dirección IP del grupo LSN por la dirección IP privada
  Contacto: Ninguno
  Record-Route Ninguno
  Ruta: Ninguno
Respuesta saliente (de privado a público) Para: Ninguno
  De: Ninguno
  Id. de llamada: Ninguno
  Vía: Ninguno
  URI de solicitud: Reemplazar la dirección IP privada con la dirección IP del grupo LSN
  Contacto: Reemplazar la dirección IP privada con la dirección IP del grupo LSN
  Record-Route Ninguno
  Ruta: Ninguno
Solicitud saliente (de privado a público) Para: Ninguno
  De: Ninguno
  Id. de llamada: Ninguno
  Vía: Reemplazar la dirección IP privada con la dirección IP del grupo LSN
  URI de solicitud: Ninguno
  Contacto: Reemplazar la dirección IP privada con la dirección IP del grupo LSN
  Record-Route Ninguno
  Ruta: Ninguno
Respuesta entrante (de público a privado) Para: Ninguno
  De: Ninguno
  Id. de llamada: Ninguno
  Vía: Reemplazar la dirección IP del grupo LSN por la dirección IP privada
  URI de solicitud: Ninguno
  Contacto: Conservar la dirección IP pública, si está presente
  Record-Route Ninguno
  Ruta: Ninguno

Limitaciones de SIP ALG

Un SIP ALG tiene las siguientes limitaciones:

  • Solo se admite la carga de SDP.
  • Las siguientes opciones no se admiten:
    • Direcciones IP de multidifusión
    • SDP cifrado
    • SIP TLS
    • Traducción FQDN
    • Autenticación de capa SIP
    • TD/Partición
    • Cuerpo con varias partes
    • Mensajes SIP a través de una red IPv6
    • Plegable de línea

Clientes SIP probados y servidores proxy

Los siguientes clientes SIP y servidor proxy se han probado con SIP ALG:

  • Clientes SIP: X-Lite, Zoiper, Ekiga. Avaya
  • Servidor proxy: OpenSIPS

Caso SIP LSN: Proxy SIP fuera de la red privada (red pública)

Registro de clientes SIP

Para una llamada SIP típica, el cliente SIP debe registrarse con el registrador SIP componiendo una solicitud REGISTER y enviándola al registrador SIP. El SIP ALG del dispositivo Citrix ADC intercepta la solicitud, reemplaza la dirección IP y el número de puerto de la solicitud por la dirección IP del grupo LSN y el número de puerto proporcionados en la configuración de LSN, y reenvía la solicitud al registrador SIP. A continuación, el SIP ALG abre un agujero de acceso en la configuración de Citrix ADC para permitir una mayor comunicación SIP entre el cliente SIP y el registrador SIP. El registrador SIP envía una respuesta de 200 Aceptar al cliente SIP a través de la dirección IP del grupo LSN y el número de puerto. El dispositivo Citrix ADC captura esta respuesta en el agujero de acceso, y el SIP ALG reemplaza el encabezado SIP, volviendo a colocar los campos SIP Contacto, Vía, Ruta y Ruta de registro originales en el mensaje. A continuación, el SIP ALG reenvía el mensaje al cliente SIP. La siguiente figura muestra cómo SIP ALG utiliza LSN en un flujo de registro de llamadas SIP.Imagen localizada

Llamadas salientes

Una llamada SIP se inicia con un mensaje SIP INVITE enviado desde la red interna a la externa. El SIP ALG realiza NAT en las direcciones IP y los números de puerto en los campos de encabezado SIP Via, Contacto, Ruta y Record Route, reemplazándolos por la dirección IP del grupo LSN y el número de puerto. LSN almacena estas asignaciones para mensajes SIP posteriores en la llamada SIP. A continuación, el SIP ALG abre agujeros de acceso separados en la configuración de Citrix ADC para permitir SIP y medios a través del dispositivo Citrix ADC en los puertos asignados dinámicamente especificados en los encabezados SDP y SIP. Cuando un mensaje 200 Aceptar llega al Citrix ADC, se captura mediante uno de los agujeros de acceso creados. El SIP ALG reemplaza el encabezado SIP, restaurando los campos SIP Contacto, Vía, Ruta y Record Route SIP originales y, a continuación, reenvía el mensaje al cliente SIP interno.Imagen localizada

Llamadas entrantes

Una llamada entrante SIP se inicia con un mensaje SIP INVITE desde el cliente externo a la red interna. El registrador SIP reenvía el mensaje INVITE al cliente SIP en la red interna, mediante el agujero de acceso que se creó cuando el cliente SIP interno se registró con el registrador SIP.

El SIP ALG realiza NAT en las direcciones IP LSN y números de puerto en los campos de encabezado SIP Via, Contacto, Ruta y Record Route, traduciéndolos a la dirección IP y número de puerto del cliente SIP interno, y reenvía la solicitud al cliente SIP. Cuando el mensaje de respuesta 200 Aceptar enviado por el cliente SIP interno llega al dispositivo Citrix ADC, el SIP ALG realiza NAT en las direcciones IP y los números de puerto en los campos de encabezado SIP Via, Contacto, Ruta y Record Route, traduciéndolos a la dirección IP del grupo LSN y al número de puerto, reenvía la respuesta al registrador SIP y, a continuación, abre un agujero de acceso en la dirección de salida para una mayor comunicación SIP.Imagen localizada

Terminación de llamada

El mensaje BYE finaliza una llamada. Cuando el dispositivo recibe un mensaje BYE, traduce los campos de encabezado del mensaje tal como lo hace para cualquier otro mensaje. Pero debido a que un mensaje BYE debe ser reconocido por el receptor con un 200 Aceptar, el ALG retrasa el desmontaje de la llamada durante 15 segundos para permitir el tiempo de transmisión del 200 Aceptar.

Llamada entre clientes de la misma red

Cuando el cliente A y el cliente B de la misma red inician una llamada, los mensajes SIP se enrutan a través del proxy SIP en la red externa. El SIP ALG procesa el INVITE del cliente A como una llamada saliente normal. Dado que el cliente B está en la misma red, el proxy SIP envía INVITE de nuevo al dispositivo Citrix ADC. El SIP ALG examina el mensaje INVITE, determina que contiene la dirección IP NAT del cliente A y reemplaza esa dirección por la dirección IP privada del cliente A antes de enviar el mensaje al cliente B. Una vez establecida la llamada entre los clientes, el Citrix ADC no participa en la transmisión de medios. entre los clientes.

Más casos SIP LSN: Proxy SIP dentro de la red privada

Si quiere alojar el servidor proxy SIP dentro de la red privada, Citrix recomienda realizar una de las siguientes acciones:

  • Configure una asignación LSN estática para el proxy SIP privado. Para obtener más información, consulte Configuración de mapas estáticos LSN. Asegúrese de que el puerto NAT es el mismo que el puerto configurado en el perfil SIP ALG.
  • Configure el servidor proxy SIP dentro de una zona desmilitarizada (DMZ).

Ilustración 1. Registro de llamadas SIP

Imagen localizada

Ilustración 2. Flujo de llamadas entrantes SIP

Imagen localizada

Las figuras 1 y 2 muestran los siguientes casos:

  • Caso 1: El cliente SIP en la red privada se registra con el servidor proxy SIP en la misma red. Las operaciones ALG no se realizan porque el cliente SIP y el servidor proxy SIP están en la misma red.
  • Caso 2: El cliente SIP en la red pública se registra con el servidor proxy SIP en la red privada. El mensaje REGISTER del cliente SIP público se envía al dispositivo Citrix ADC mediante la asignación de LSN estática configurada en el dispositivo, y el dispositivo crea un agujero de acceso para otras operaciones SIP.
  • Caso 3: Flujo de llamadas entrantes SIP. Una llamada entrante SIP se inicia con un mensaje SIP INVITE desde la red externa a la interna. El dispositivo Citrix ADC recibe el mensaje INVITE del cliente SIP C2, que se encuentra en la red externa, a través de los mapas LSN estáticos configurados en el dispositivo Citrix ADC.
    El dispositivo crea un agujero de acceso y reenvía el mensaje INVITE al proxy SIP. A continuación, el proxy SIP reenvía el mensaje INVITE al cliente SIP C1 en la red interna. El cliente SIP C1 envía 180 y 200 mensajes Aceptar al proxy SIP, que a su vez reenvía el mensaje al cliente SIP C2 a través del dispositivo Citrix ADC. Cuando el mensaje de respuesta 200 Aceptar enviado por el cliente SIP interno C1 llega al Citrix ADC, SIP ALG realiza NAT en las direcciones IP y los números de puerto en los campos de encabezado SIP Via, Contacto, Ruta y Record Route, y en los campos SDP, reemplazándolos por la dirección IP del grupo LSN y el número de puerto. A continuación, el SIP ALG reenvía el mensaje de respuesta al cliente SIP C2 y abre un agujero de acceso en la dirección de salida para una mayor comunicación SIP.

Compatibilidad con registros de auditoría

Puede registrar la información de ALG como parte del registro LSN habilitando ALG en la configuración de registro de auditoría de LSN. Para obtener más información sobre el registro LSN, consulte Registro y supervisión de LSN. Un mensaje de registro para una entrada ALG en el registro LSN consta de la siguiente información:

  • Marca de tiempo
  • Tipo de mensaje SIP (por ejemplo, solicitud SIP)
  • Dirección IP de origen y puerto del cliente SIP
  • Dirección IP de destino y puerto del proxy SIP
  • Dirección IP NAT y puerto
  • SIP (método)
  • Número de secuencia
  • Si el cliente SIP está registrado o no
  • Nombre de usuario y dominio de la persona que llama
  • Nombre de usuario y dominio del receptor

Ejemplo de registro de auditoría:

Solicitar:

07/19/2013:09:49:19 GMT Informational 0-PPE-0 : default ALG ALG_SIP_INFO_PACKET_EVENT 169 0 : Infomsg: "SIP request" - Group: g2 - Call_ID: NTY0YjYwMTJmYjNhNDU5ZjlhMmQxOTM5ZTE3Zjc3NjM. - Transport: TCP - Source_IP: 192.169.1.165 - Source_port: 57952 - Destination_IP: 10.102.185.156 - Destination_port: 5060 - Natted_IP: 10.102.185.191 - Natted_port: 10313 - Method: REGISTER - Sequence_Number: 3060 - Register: YES - Content_Type: - Caller_user_name: 156_pvt_1 - Callee_user_name: 156_pvt_1 - Caller_domain_name: - Callee_domain_name: -

Respuesta:

07/19/2013:09:49:19 GMT Informational 0-PPE-0 : default ALG ALG_SIP_INFO_PACKET_EVENT 170 0 : Infomsg: "SIP response" - Group: g2 - Call_ID: NTY0YjYwMTJmYjNhNDU5ZjlhMmQxOTM5ZTE3Zjc3NjM. - Transport: TCP - Response_code 200 - Source_IP: 10.102.185.156 - Source_port: 5060 - Destination_IP: 192.169.1.165 - Destination_port: 57952 - Natted_IP: 10.102.185.191 - Natted_port: 10313 - Sequence_Number: 3060 - Content_Type: - Caller_user_name: 156_pvt_1 - Callee_user_name: 156_pvt_1 - Caller_domain_name: - Callee_domain_name: -

Configuración de SIP ALG

Debe configurar el SIP ALG como parte de la configuración de LSN. Para obtener instrucciones sobre cómo configurar LSN, consulte Pasos de configuración para LSN. Al configurar LSN, asegúrese de que:

  • Defina los siguientes parámetros al agregar el perfil de aplicación LSN:
    • Agrupamiento de IP = PAIRED
    • Asignación de direcciones y puertos = ENDPOINT-INDEPENDENT
    • Filtrado = ENDPOINT-INDEPENDENT

Importante: Para que el SIP ALG funcione, es obligatoria una configuración de NAT de cono completo.

Ejemplo:

add lsn appsprofile app_tcp TCP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT
  • Cree un perfil SIP ALG y asegúrese de definir el rango de puertos de origen o el rango de puertos de destino.

Ejemplo:

add lsn sipalgprofile sipalgprofile_tcp -sipsrcportrange 1-65535 -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED –sipTransportProtocol TCP
  • Establezca SIP ALG = ENABLED, mientras crea el grupo LSN.

Ejemplo:

add lsn group g1 -clientname c1 -sipalg ENABLED
  • Enlace el perfil SIP ALG al grupo LSN.

Ejemplo de configuración SIP ALG:

El siguiente ejemplo de configuración muestra cómo crear una configuración de LSN simple con una única red de suscriptor, una sola dirección IP NAT LSN, una configuración específica de SIP ALG y configurar SIP ALG:

add lsn pool p1

Done

bind lsn pool p1 10.102.185.190

Done

add lsn client c1

Done

bind lsn client c1 -network 192.170.1.0 -netmask 255.255.255.0

Done

add lsn appsprofile app_tcp TCP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT

Done

add lsn appsprofile app_udp UDP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT

Done

bind lsn appsprofile app_tcp 1-65535

Done

bind lsn appsprofile app_udp 1-65535

Done

add lsn sipalgprofile sipalgprofile_tcp -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED –sipTransportProtocol TCP

Done

add lsn sipalgprofile sipalgprofile_udp -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED -sipTransportProtocol UDP

Done

add lsn group g1 -clientname c1 -sipalg ENABLED

Done

bind lsn group g1 -poolname p1

Done

bind lsn group g1 -appsprofilename app_tcp

Done

bind lsn group g1 -appsprofilename app_udp

Done

bind lsn group g1 -sipalgprofilename sipalgprofile_tcp

Done

bind lsn group g1 -sipalgprofilename sipalgprofile_udp

Done