Passerelle de couche d’application pour le protocole SIP
L’utilisation de NAT à grande échelle (LSN) avec le protocole SIP (Session Initiation Protocol) est compliquée, car les messages SIP contiennent des adresses IP dans les en-têtes SIP ainsi que dans le corps SIP. Lorsque LSN est utilisé avec SIP, les en-têtes SIP contiennent des informations sur l’appelant et le récepteur, et le périphérique traduit ces informations pour les masquer du réseau externe. Le corps SIP contient les informations SDP (Session Description Protocol), qui comprennent les adresses IP et les numéros de port pour la transmission du média.
SIP ALG adhère aux RFC suivants :
- RFC 3261
- RFC 3581
- RFC 4566
- RFC 4475
Remarque
SIP ALG est pris en charge dans une appliance autonome Citrix ADC, dans une configuration de haute disponibilité Citrix ADC, ainsi que dans une configuration de cluster Citrix ADC.
Fonctionnement de SIP ALG
La manière dont la traduction des adresses IP est effectuée dépend du type et de la direction du message. Un message peut être l’un des éléments suivants :
- Demande entrante
- Réponse sortante
- Demande sortante
- Réponse entrante
Pour un message sortant, l’adresse IP privée et le numéro de port du client SIP sont remplacés par l’adresse IP publique et le numéro de port appartenant à Citrix ADC, appelés l’adresse IP du pool LSN et le numéro de port, spécifiés lors de la configuration LSN. Pour un message entrant, l’adresse IP du pool LSN et le numéro de port sont remplacés par l’adresse privée du client. Si le message contient des adresses IP publiques, le Citrix ADC SIP ALG les conserve. En outre, un sténopé est créé sur le :
- L’adresse IP du pool LSN et le port au nom du client privé, de sorte que les messages qui arrivent à cette adresse IP et port du réseau public soient traités comme des messages SIP.
- Adresse IP publique et port pour le compte des clients publics, de sorte que les messages qui arrivent à cette adresse IP et port du réseau privé soient traités comme des messages SIP.
Lorsqu’un message SIP est envoyé sur le réseau, la passerelle SIP Application Layer Gateway (ALG) recueille des informations à partir du message et traduit les adresses IP des en-têtes suivants en adresses IP de pool LSN :
- Via
- Contactez
- Itinéraire
- Record-Route
Dans l’exemple de message de demande SIP suivant, LSN remplace les adresses IP dans les champs d’en-tête pour les masquer du réseau externe.
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>
<!--NeedCopy-->
Lorsqu’un message contenant des informations SDP arrive, l’ALG SIP recueille des informations à partir du message et traduit les adresses IP dans les champs suivants en adresses IP de pool LSN et numéros de port :
-
c= (informations de connexion)
Ce champ peut apparaître au niveau de la session ou du média. Il apparaît au format suivant :
c=
<network-type><address-type><connection-address>
Si l’adresse IP de destination est une adresse IP monodiffusion, l’ALG SIP crée des trous d’épingle à l’aide de l’adresse IP et des numéros de port spécifiés dans le champ m=.
-
m= (annonce de presse)
Ce champ apparaît au niveau du média et contient la description du média. Il apparaît au format suivant :
m=
<media><port><transport><fmt list>
-
a=
(information about the media field)
Ce champ peut apparaître au niveau de la session ou du média, dans le format suivant :
a =
<attribute>
a =
<attribute>:<value>
L’extrait suivant d’un exemple de section SDP montre les champs qui sont traduits pour l’allocation de ressources.
o=user 2344234 55234434 IN IP4 10.150.20.3
c=IN IP4 10.150.20.3
m=audio 43249 RTP/AVP 0
Le tableau suivant montre comment la charge utile SIP est traduite.
Demande entrante (du public au privé) | par | Aucune |
De | ||
Call-ID | ||
Via | ||
URI de requête | ||
Contact | ||
Record-Route | ||
Itinéraire | ||
Réponse sortante (du privé au public) | par | Aucune |
De | ||
Call-ID | ||
Via | ||
URI de requête | ||
Contact | ||
Record-Route | ||
Itinéraire | ||
Demande sortante (du privé au public) | par | Aucune |
De | ||
Call-ID | ||
Via | ||
URI de requête | ||
Contact | ||
Record-Route | ||
Itinéraire | ||
Réponse entrante (du public au privé) | par | Aucune |
De | ||
Call-ID | ||
Via | ||
URI de requête | ||
Contact | ||
Record-Route | ||
Itinéraire |
Limites de SIP ALG
Un ALG SIP présente les limitations suivantes :
- Seule la charge utile SDP est prise en charge.
- Les éléments suivants ne sont pas pris en charge :
- Adresses IP de multidiffusion
- SDP chiffré
- SIP TLS
- Traduction de FQDN
- Authentification de la couche SIP
- TD/partitionnement
- Corps en plusieurs parties
- Messages SIP sur le réseau IPv6
- Réassemblage de lignes
Clients SIP et serveurs proxy testés
Les clients SIP et le serveur proxy suivants ont été testés avec SIP ALG :
- Clients SIP : X-Lite, Zoiper, Ekiga. Avaya
- Serveur proxy : OpenSIPS
Scénario SIP LSN : Proxy SIP en dehors du réseau privé (réseau public)
Enregistrement du client SIP
Pour un appel SIP typique, le client SIP doit s’inscrire auprès du bureau d’enregistrement SIP en composant une demande REGISTER et en l’envoyant au bureau d’enregistrement SIP. L’ALG SIP de l’appliance Citrix ADC intercepte la demande, remplace l’adresse IP et le numéro de port de la demande par l’adresse IP du pool LSN et le numéro de port fournis dans la configuration LSN, puis transmet la demande au bureau d’enregistrement SIP. L’ALG SIP ouvre ensuite un trou d’épingle dans la configuration de Citrix ADC pour permettre une communication SIP supplémentaire entre le client SIP et le bureau d’enregistrement SIP. Le bureau d’enregistrement SIP envoie une réponse 200 OK au client SIP via l’adresse IP du pool LSN et le numéro de port. L’appliance Citrix ADC capture cette réponse dans le trou d’épingle et l’ALG SIP remplace l’en-tête SIP, en remplaçant les champs SIP Contact, Via, Route et Record-Route d’origine dans le message. Le SIP ALG transmet ensuite le message au client SIP. La figure suivante montre comment SIP ALG utilise LSN dans un flux d’enregistrement d’appels SIP.
Appels sortants
Un appel SIP est lancé avec un message SIP INVITE envoyé de l’interne au réseau externe. L’ALG SIP effectue NAT sur les adresses IP et les numéros de port dans les champs d’en-tête SIP Via, Contact, Route et Record-Route, en les remplaçant par l’adresse IP du pool LSN et le numéro de port. LSN stocke ces mappages pour les messages SIP suivants dans l’appel SIP. L’ALG SIP ouvre ensuite des trous d’épingles séparés dans la configuration de Citrix ADC pour autoriser SIP et les supports via l’appliance Citrix ADC sur les ports affectés dynamiquement spécifiés dans les en-têtes SDP et SIP. Lorsqu’un message 200 OK arrive à Citrix ADC, il est capturé par l’un des trous d’épingle créés. L’ALG SIP remplace l’en-tête SIP, restaure les champs SIP Contact, Via, Route et Record-Route d’origine, puis transfère le message au client SIP interne.
Appels entrants
Un appel entrant SIP est lancé avec un message SIP INVITE du client externe vers le réseau interne. Le bureau d’enregistrement SIP transmet le message INVITE au client SIP du réseau interne, en utilisant le trou d’épingle créé lors de l’inscription du client SIP interne auprès du bureau d’enregistrement SIP.
L’ALG SIP effectue NAT sur les adresses IP LSN et les numéros de port dans les champs d’en-tête SIP Via, Contact, Route et Record-Route SIP, en les traduisant en adresse IP et numéro de port du client SIP interne, et transmet la demande au client SIP. Lorsque le message de réponse 200 OK envoyé par le client SIP interne arrive à l’appliance Citrix ADC, l’ALG SIP effectue NAT sur les adresses IP et les numéros de port dans les champs d’en-tête SIP Via, Contact, Route et Record-Route, en les traduisant vers l’adresse IP du pool LSN et le numéro de port, transmet la réponse au bureau d’enregistrement SIP, puis ouvre un sténopé dans le sens sortant pour une communication SIP ultérieure.
Terminaison d’appel
Le message BYE met fin à un appel. Lorsque le périphérique reçoit un message BYE, il traduit les champs d’en-tête dans le message comme il le fait pour tout autre message. Mais comme un message BYE doit être accusé de réception par le récepteur avec un 200 OK, l’ALG retarde le déchirement de l’appel pendant 15 secondes pour laisser le temps de transmission du 200 OK.
Appel entre clients du même réseau
Lorsque le client A et le client B du même réseau lancent un appel, les messages SIP sont acheminés via le proxy SIP dans le réseau externe. L’ALG SIP traite l’INVITE à partir du client A comme un appel sortant normal. Puisque le client B se trouve dans le même réseau, le proxy SIP renvoie INIVITE à l’appliance Citrix ADC. L’ALG SIP examine le message INIVITE, détermine qu’il contient l’adresse IP NAT du client A et remplace cette adresse par l’adresse IP privée du client A avant d’envoyer le message au client B. Une fois l’appel établi entre les clients, Citrix ADC n’est pas impliqué dans la transmission des médias entre les clients.
Plus de scénarios SIP LSN : Proxy SIP à l’intérieur du réseau privé
Si vous souhaitez héberger le serveur proxy SIP dans le réseau privé, Citrix vous recommande d’effectuer l’une des opérations suivantes :
- Configurez un mappage LSN statique pour le proxy SIP privé. Pour plus d’informations, reportez-vous à la section Configuration de cartes LSN statiques. Assurez-vous que le port NAT est le même que celui configuré dans le profil ALG SIP.
- Configurez le serveur proxy SIP à l’intérieur d’une zone démilitarisée (DMZ).
Figure 1. Enregistrement des appels SIP
Figure 2. Flux d’appels entrants SIP
Les figures 1 et 2 présentent les scénarios suivants :
- Scénario 1 : Le client SIP du réseau privé s’enregistre auprès du serveur proxy SIP dans le même réseau. Les opérations ALG ne sont pas effectuées, car le client SIP et le serveur proxy SIP sont dans le même réseau.
- Scénario 2 : le client SIP dans le réseau public s’enregistre auprès du serveur proxy SIP dans le réseau privé. Le message REGISTER du client SIP public est envoyé à l’appliance Citrix ADC à l’aide du mappage LSN statique configuré sur l’appliance, et l’appliance crée un trou d’épingle pour d’autres opérations SIP.
- Scénario 3 — SIP Flux d’appels entrants. Un appel entrant SIP est lancé avec un message SIP INVITE de l’externe vers le réseau interne. L’appliance Citrix ADC reçoit le message INVITE du client SIP C2, qui se trouve dans le réseau externe, via les mappages LSN statiques configurés sur l’appliance Citrix ADC.
L’appliance crée un trou d’épingle et transmet le message INVITE au proxy SIP. Le proxy SIP transmet ensuite le message INVITE au client SIP C1 dans le réseau interne. Le client SIP C1 envoie ensuite 180 et 200 messages OK au proxy SIP, qui, à son tour, transfère le message au client SIP C2 via l’appliance Citrix ADC. Lorsque le message de réponse 200 OK envoyé par le client SIP interne C1 arrive à Citrix ADC, l’ALG SIP effectue NAT sur les adresses IP et les numéros de port dans les champs d’en-tête SIP Via, Contact, Route et Record-Route et dans les champs SDP, en les remplaçant par l’adresse IP du pool LSN et le numéro de port . Le SIP ALG transmet ensuite le message de réponse au client SIP C2 et ouvre un trou d’épingle dans le sens sortant pour une communication SIP ultérieure.
Prise en charge des journaux d’audit
Vous pouvez consigner les informations ALG dans le cadre de la journalisation LSN en activant ALG dans la configuration de journalisation d’audit LSN. Pour plus d’informations sur la journalisation LSN, consultez Logging and Monitoring LSN. Un message de journal pour une entrée ALG dans le journal LSN contient les informations suivantes :
- Horodatage
- Type de message SIP (par exemple, demande SIP)
- Adresse IP source et port du client SIP
- Adresse IP de destination et port du proxy SIP
- Adresse IP NAT et port
- Méthode SIP
- Numéro de séquence
- Indique si le client SIP est enregistré ou non
- Nom d’utilisateur et domaine de l’appelant
- Nom d’utilisateur et domaine du récepteur
Exemple de journal d’audit :
Requête :
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: -
<!--NeedCopy-->
Réponse :
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: -
<!--NeedCopy-->
Configuration de SIP ALG
Vous devez configurer le SIP ALG dans le cadre de la configuration LSN. Pour obtenir des instructions sur la configuration de LSN, voir Étapes de configuration pour LSN. Lors de la configuration de LSN, assurez-vous que vous :
- Définissez les paramètres suivants lors de l’ajout du profil d’application LSN :
- IP Pooling = PAIRED
- Address and Port Mapping = ENDPOINT-INDEPENDENT
- Filtering = ENDPOINT-INDEPENDENT
Important : Pour que le SIP ALG fonctionne, une configuration NAT de cône complet est obligatoire.
Exemple :
add lsn appsprofile app_tcp TCP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT
<!--NeedCopy-->
- Créez un profil ALG SIP et assurez-vous de définir la plage de ports source ou la plage de ports de destination.
Exemple :
add lsn sipalgprofile sipalgprofile_tcp -sipsrcportrange 1-65535 -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED –sipTransportProtocol TCP
<!--NeedCopy-->
- Définir SIP ALG = ENABLED, lors de la création du groupe LSN.
Exemple :
add lsn group g1 -clientname c1 -sipalg ENABLED
<!--NeedCopy-->
- Liez le profil ALG SIP au groupe LSN.
Exemple de configuration ALG SIP :
L’exemple de configuration suivant montre comment créer une configuration LSN simple avec un réseau abonné unique, une adresse IP NAT LSN unique, un paramètre spécifique SIP ALG et configurer 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
<!--NeedCopy-->