Passerelle de couche d’application pour le protocole SIP
L’utilisation d’un NAT à grande échelle (LSN) avec le protocole SIP (Session Initiation Protocol) est complexe, car les messages SIP contiennent des adresses IP dans les en-têtes SIP ainsi que dans le corps du SIP. Lorsque le LSN est utilisé avec SIP, les en-têtes SIP contiennent des informations sur l’appelant et le récepteur, et l’appareil traduit ces informations pour les masquer au réseau extérieur. Le corps du SIP contient les informations du protocole SDP (Session Description Protocol), qui incluent 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
Le SIP ALG est pris en charge dans une appliance autonome NetScaler, dans une configuration haute disponibilité NetScaler, ainsi que dans une configuration de cluster NetScaler.
Comment fonctionne 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 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 à NetScaler, appelés adresse IP et numéro de port du pool LSN, spécifiés lors de la configurationdu 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 NetScaler SIP ALG les conserve. Un sténopé est également créé sur :
- Adresse IP et port du pool LSN pour le compte du client privé, de sorte que les messages qui arrivent à cette adresse IP et à ce port depuis le réseau public sont traités comme des messages SIP.
- Adresse IP et port publics pour le compte des clients publics, de sorte que les messages qui arrivent à cette adresse IP et à ce port depuis le réseau privé sont traités comme des messages SIP.
Lorsqu’un message SIP est envoyé sur le réseau, la passerelle SIP Application Layer Gateway (ALG) collecte des informations à partir du message et traduit les adresses IP des en-têtes suivants en adresses IP du 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 au réseau extérieur.
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 collecte des informations à partir du message et traduit les adresses IP des champs suivants en adresses IP et en numéros de port du pool LSN :
-
c= (informations de connexion)
Ce champ peut apparaître au niveau de la session ou du média. Il apparaît dans le 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 en utilisant l’adresse IP et les numéros de port spécifiés dans le champ m=.
-
m= (annonce aux médias)
Ce champ apparaît au niveau du média et contient la description du média. Il apparaît dans le 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, au 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 des ressources.
o=utilisateur 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.
Requête entrante (du public au privé) | par | Aucun |
À partir de | ||
Call-ID | ||
Via | ||
URI de requête | ||
Personne à contacter | ||
Record-Route | ||
Itinéraire | ||
Réponse sortante (du privé vers le public) | par | Aucun |
À partir de | ||
Call-ID | ||
Via | ||
URI de requête | ||
Personne à contacter | ||
Record-Route | ||
Itinéraire | ||
Requête sortante (du privé vers le public) | par | Aucun |
À partir de | ||
Call-ID | ||
Via | ||
URI de requête | ||
Personne à contacter | ||
Record-Route | ||
Itinéraire | ||
Réponse entrante (du public au privé) | par | Aucun |
À partir de | ||
Call-ID | ||
Via | ||
URI de requête | ||
Personne à contacter | ||
Record-Route | ||
Itinéraire |
Limites du SIP ALG
Un SIP ALG présente les limites 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 crypté
- SIP TLS
- Traduction du FQDN
- Authentification de couche SIP
- TD/partitionnement
- Carrosserie en plusieurs parties
- Messages SIP sur le réseau IPv6
- Pliage en ligne
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 LSN SIP : Proxy SIP en dehors du réseau privé (réseau public)
Enregistrement du client SIP
Pour un appel SIP classique, le client SIP doit s’enregistrer 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 NetScaler intercepte la demande, remplace l’adresse IP et le numéro de port de la demande par l’adresse IP et le numéro de port du pool LSN fournis dans la configuration LSN, puis transmet la demande au bureau d’enregistrement SIP. L’ALG SIP ouvre ensuite un sténopé dans la configuration de NetScaler pour permettre la poursuite des communications SIP 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 et le numéro de port du pool LSN. L’appliance NetScaler capture cette réponse dans le sténopé, et l’ALG SIP remplace l’en-tête SIP en replaçant les champs SIP Contact, Via, Route et Record-Route d’origine dans le message. L’ALG SIP transmet ensuite le message au client SIP. La figure suivante montre comment SIP ALG utilise le LSN dans un flux d’enregistrement d’appels SIP.
Appels sortants
Un appel SIP est lancé avec un message SIP INVITE envoyé du réseau interne vers le réseau externe. L’ALG SIP exécute la 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 et le numéro de port du pool LSN. Le LSN stocke ces mappages pour les messages SIP suivants dans l’appel SIP. L’ALG SIP ouvre ensuite des trous séparés dans la configuration de NetScaler pour autoriser le SIP et le multimédia à passer par l’appliance NetScaler sur les ports assignés dynamiquement spécifiés dans les en-têtes SDP et SIP. Lorsqu’un message 200 OK arrive au NetScaler, il est capturé par l’un des trous d’épingle créés. L’ALG SIP remplace l’en-tête SIP en restaurant les champs SIP Contact, Via, Route et Record-Route d’origine, puis transmet 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, à l’aide du sténopé créé lors de l’enregistrement du client SIP interne auprès du bureau d’enregistrement SIP.
L’ALG SIP exécute la 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, en les traduisant en adresse IP et en numéro de port du client SIP interne, puis transmet la demande au client SIP. Lorsque le message de réponse 200 OK envoyé par le client SIP interne arrive à l’appliance NetScaler, l’ALG SIP exécute un NAT sur les adresses IP et les numéros de port des champs d’en-tête SIP Via, Contact, Route et Record-Route, les traduit en adresse IP et en numéro de port du pool LSN, transmet le message de réponse au bureau d’enregistrement SIP, puis ouvre un sténopé dans le sens sortant pour poursuivre la communication SIP.
Fin d’appel
Le message BYE met fin à un appel. Lorsque l’appareil reçoit un message BYE, il traduit les champs d’en-tête du message comme il le fait pour tout autre message. Mais comme le récepteur doit accuser réception d’un message BYE avec un 200 OK, l’ALG retarde le démontage de l’appel de 15 secondes pour laisser le temps de transmettre le 200 OK.
Appel entre clients d’un même réseau
Lorsque le client A et le client B du même réseau lancent un appel, les messages SIP sont routés via le proxy SIP du réseau extérieur. L’ALG SIP traite l’INVITE du client A comme un appel sortant normal. Comme le client B se trouve sur le même réseau, le proxy SIP renvoie l’INIVITE à l’appliance NetScaler. 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, NetScaler n’est pas impliqué dans la transmission multimédia entre les clients.
Autres scénarios LSN SIP : Proxy SIP au sein du réseau privé
Si vous souhaitez héberger le serveur proxy SIP sur 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 dans 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 du même réseau. Les opérations ALG ne sont pas effectuées car le client SIP et le serveur proxy SIP se trouvent sur le même réseau.
- Scénario 2 : Le client SIP du réseau public s’enregistre auprès du serveur proxy SIP du réseau privé. Le message REGISTER du client SIP public est envoyé à l’appliance NetScaler à l’aide du mappage LSN statique configuré sur l’appliance, et l’appliance crée un sténopé pour d’autres opérations SIP.
- Scénario 3 : Flux d’appels entrants SIP. Un appel entrant SIP est lancé avec un message SIP INVITE du réseau externe vers le réseau interne. L’appliance NetScaler reçoit le message INVITE du client SIP C2, qui se trouve sur le réseau externe, via les cartes LSN statiques configurées sur l’appliance NetScaler.
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 du réseau interne. Le client SIP C1 envoie ensuite 180 et 200 messages OK au proxy SIP, qui à son tour transmet le message au client SIP C2 via l’appliance NetScaler. Lorsque le message de réponse 200 OK envoyé par le client SIP interne C1 arrive à NetScaler, l’ALG SIP exécute un 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 et le numéro de port du pool LSN. L’ALG SIP transmet ensuite le message de réponse au client SIP C2 et ouvre un sténopé dans la direction sortante pour une communication SIP ultérieure.
Support pour les 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 et port NAT
- Méthode SIP
- Numéro de séquence
- Si le client SIP est enregistré ou non
- Nom d’utilisateur et domaine de l’appelant
- Nom d’utilisateur et domaine du destinataire
Exemple de journal d’audit :
Demande :
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 :
- Regroupement d’adresses IP = PAIRED
- Mappage des adresses et des ports = ENDPOINT-INDEPENDENT
- Filtrage = INDÉPENDANT DU POINT DE TERMINAISON
Important : pour que l’ALG SIP fonctionne, une configuration NAT à 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 SIP ALG 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éfinissez SIP ALG = ENABLED lors de la création du groupe LSN.
Exemple :
add lsn group g1 -clientname c1 -sipalg ENABLED
<!--NeedCopy-->
- Liez le profil SIP ALG au groupe LSN.
Exemple de configuration ALG SIP :
L’exemple de configuration suivant montre comment créer une configuration LSN simple avec un seul réseau d’abonnés, 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-->