ADC

Application Layer Gateway für SIP-Protokoll

Die Verwendung von Large Scale NAT (LSN) mit Session Initiation Protocol (SIP) ist kompliziert, da SIP-Nachrichten IP-Adressen sowohl in den SIP-Headern als auch im SIP-Body enthalten. Wenn LSN mit SIP verwendet wird, enthalten die SIP-Header Informationen über den Anrufer und den Empfänger, und das Gerät übersetzt diese Informationen, um sie vor dem externen Netzwerk zu verstecken. Der SIP-Body enthält die SDP-Informationen (Session Description Protocol), die IP-Adressen und Portnummern für die Übertragung der Medien enthalten.

SIP ALG hält folgende RFCs ein:

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

Hinweis:

SIP ALG wird in einer eigenständigen Citrix ADC Appliance, in einem Citrix ADC-Hochverfügbarkeitssetup sowie in einem Citrix ADC-Cluster-Setup unterstützt.

Funktionsweise von SIP ALG

Die Art und Weise, wie die Übersetzung von IP-Adressen durchgeführt wird, hängt vom Typ und der Richtung der Nachricht ab. Eine Nachricht kann eine der folgenden sein:

  • Eingehende Anfrage
  • Ausgehende Antwort
  • Ausgehende Anfrage
  • Eingangsantwort

Bei einer ausgehenden Nachricht werden die private IP-Adresse und die Portnummer des SIP-Clients durch die öffentliche IP-Adresse und die Portnummer des Citrix ADC ersetzt, die während der LSN-Konfiguration angegebene IP-Adresse und Portnummer des LSN-Poolsgenannt wird. Bei einer eingehenden Nachricht werden die IP-Adresse des LSN-Pools und die Portnummer durch die private Adresse des Clients ersetzt. Wenn die Nachricht öffentliche IP-Adressen enthält, behält sie die Citrix ADC SIP ALG bei. Außerdem wird ein Lochloch auf der erstellt:

  • LSN-Pool-IP-Adresse und -Port im Auftrag des privaten Clients, so dass die Nachrichten, die zu dieser IP-Adresse und dem Port aus dem öffentlichen Netzwerk gelangen, als SIP-Nachrichten behandelt werden.
  • Öffentliche IP-Adresse und Port im Auftrag der öffentlichen Clients, so dass die Nachrichten, die zu dieser IP-Adresse und Port aus dem privaten Netzwerk gelangen, als SIP-Nachrichten behandelt werden.

Wenn eine SIP-Nachricht über das Netzwerk gesendet wird, sammelt das SIP Application Layer Gateway (ALG) Informationen aus der Nachricht und übersetzt die IP-Adressen in den folgenden Kopfzeilen in LSN-Pool-IP-Adressen:

  • Via
  • Kontakt
  • Route
  • Datensatzroute

In der folgenden SIP-Beispielanforderungsnachricht ersetzt LSN die IP-Adressen in den Headerfeldern, um sie vor dem externen Netzwerk auszublenden.

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-->

Wenn eine Nachricht mit SDP-Informationen eintrifft, sammelt die SIP-ALG Informationen aus der Nachricht und übersetzt die IP-Adressen in den folgenden Feldern in LSN-Pool-IP-Adressen und Portnummern:

  • c= (Verbindungsinformationen)

    Dieses Feld kann auf Sitzungs- oder Medienebene angezeigt werden. Es erscheint im folgenden Format:

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

    Wenn es sich bei der Ziel-IP-Adresse um eine Unicast-IP-Adresse handelt, erstellt die SIP-ALG unter Verwendung der IP-Adresse und der Portnummern, die im Feld m= angegeben sind.

  • m= (Medienankündigung)

    Dieses Feld wird auf Medienebene angezeigt und enthält die Beschreibung des Mediums. Es erscheint im folgenden Format:

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

  • a=(information about the media field)

    Dieses Feld kann auf Sitzungs- oder Medienebene im folgenden Format angezeigt werden:

    a=<attribute>

    a=<attribute>:<value>

Der folgende Auszug aus einem Beispiel-SDP-Abschnitt zeigt die Felder, die für die Ressourcenzuordnung übersetzt werden.

o=user 2344234 55234434 IN IP4 10.150.20.3

c=IN IP4 10.150.20.3

m=audio 43249 RTP/AVP 0

Die folgende Tabelle zeigt, wie SIP-Nutzlast übersetzt wird.

     
Eingehende Anfrage (von öffentlich zu privat) In Ohne
Von
Anruf-ID
Über
Anforderungs-URI
Kontakt
Datensatzroute
Reiseroute
Ausgehende Antwort (von privat zu öffentlich) In Ohne
Von
Anruf-ID
Über
Anforderungs-URI
Kontakt
Datensatzroute
Reiseroute
Ausgehende Anfrage (von privat zu öffentlich) In Ohne
Von
Anruf-ID
Über
Anforderungs-URI
Kontakt
Datensatzroute
Reiseroute
Eingangsantwort (von öffentlich zu privat) In Ohne
Von
Anruf-ID
Über
Anforderungs-URI
Kontakt
Datensatzroute
Reiseroute

Einschränkungen der SIP ALG

Eine SIP-ALG hat folgende Einschränkungen:

  • Es wird nur SDP-Nutzlast unterstützt.
  • Folgende Komponenten werden nicht unterstützt:
    • Multicast-IP-Adressen
    • Verschlüsseltes SDP
    • SIP TLS
    • FQDN-Übersetzung
    • SIP-Layer-Authentifizierung
    • TD/Partitionierung
    • Mehrteiliger Körper
    • SIP-Nachrichten über IPv6-Netzwerk
    • Linie faltbar

Getestete SIP-Clients und Proxyserver

Folgende SIP-Clients und Proxyserver wurden mit SIP ALG getestet:

  • SIP-Kunden: X-Lite, Zoiper, Ekiga. Avaya
  • Proxyserver: openSIPS

LSN SIP-Szenario: SIP-Proxy außerhalb des privaten Netzwerks (Öffentliches Netzwerk)

SIP-Client-Registrierung

Bei einem typischen SIP-Aufruf muss sich der SIP-Client beim SIP-Registrar registrieren, indem er eine REGISTER-Anfrage zusammenstellt und an den SIP-Registrar sendet. Die SIP-ALG der Citrix ADC Appliance fängt die Anforderung ab, ersetzt die IP-Adresse und Portnummer in der Anforderung durch die IP-Adresse des LSN-Pools und die Portnummer in der LSN-Konfiguration und leitet die Anforderung an den SIP-Registrar weiter. Die SIP ALG öffnet dann ein Pinhole in der Citrix ADC Konfiguration, um eine weitere SIP-Kommunikation zwischen dem SIP-Client und dem SIP-Registrar zu ermöglichen. Der SIP-Registrar sendet eine 200 OK-Antwort an den SIP-Client über die IP-Adresse und die Portnummer des LSN-Pools. Die Citrix ADC Appliance erfasst diese Antwort in der Pinhole, und die SIP-ALG ersetzt den SIP-Header, wodurch die ursprünglichen SIP-Felder Kontakt, Via, Route und Datensatzroute wieder in die Nachricht eingefügt werden. Die SIP ALG leitet die Nachricht dann an den SIP-Client weiter. Die folgende Abbildung zeigt, wie SIP ALG LSN in einem SIP-Anrufregistrierungsablauf verwendet.lokalisierte Grafik

Ausgehende Anrufe

Ein SIP-Aufruf wird mit einer SIP-INVITE-Nachricht initiiert, die vom internen an das externe Netzwerk gesendet wird. Die SIP-ALG führt NAT für die IP-Adressen und Portnummern in den SIP-Header-Feldern Via, Kontakt, Route und Record-Route durch und ersetzt sie durch die IP-Adresse des LSN-Pools und die Portnummer. LSN speichert diese Zuordnungen für nachfolgende SIP-Nachrichten im SIP-Aufruf. Die SIP ALG öffnet dann separate Pinholes in der Citrix ADC Konfiguration, um SIP und Medien über die Citrix ADC-Appliance an den dynamisch zugewiesenen Ports zu ermöglichen, die in den SDP- und SIP-Headern angegeben sind. Wenn eine 200-OK-Nachricht beim Citrix ADC eintrifft, wird sie von einer der erstellten Pinholes erfasst. Die SIP-ALG ersetzt den SIP-Header und stellt die ursprünglichen SIP-Felder Kontakt, Via, Route und Datensatzroute wieder her und leitet die Nachricht dann an den internen SIP-Client weiter.lokalisierte Grafik

Eingehende Anrufe

Ein eingehender SIP-Anruf wird mit einer SIP-INVITE-Nachricht vom externen Client an das interne Netzwerk initiiert. Der SIP-Registrar leitet die INVITE-Nachricht an den SIP-Client im internen Netzwerk weiter und verwendet dabei das Lochloch, das erstellt wurde, als der interne SIP-Client beim SIP-Registrar registriert wurde.

Die SIP-ALG führt NAT für die LSN-IP-Adressen und Portnummern in den SIP-Header-Feldern Via, Kontakt, Route und Record-Route aus, übersetzt sie in die IP-Adresse und Portnummer des internen SIP-Clients und leitet die Anforderung an den SIP-Client weiter. Wenn die vom internen SIP-Client gesendete 200-OK-Antwortnachricht bei der Citrix ADC Appliance eintrifft, führt die SIP-ALG NAT für die IP-Adressen und Portnummern in den SIP-Headerfeldern Via, Kontakt, Route und Record-Route aus und überträgt sie in die IP-Adresse und Portnummer des LSN-Pools und leitet die Antwort weiter. -Nachricht an den SIP-Registrar und öffnet dann ein Lochloch in ausgehender Richtung für die weitere SIP-Kommunikation.lokalisierte Grafik

Anrufbeendigung

Die BYE-Nachricht beendet einen Anruf. Wenn das Gerät eine BYE-Nachricht empfängt, übersetzt es die Header-Felder in der Nachricht genauso wie für jede andere Nachricht. Da jedoch eine BYE Nachricht vom Empfänger mit einem 200 OK quittiert werden muss, verzögert die ALG den Anrufabbau um 15 Sekunden, um Zeit für die Übertragung des 200 OK zu ermöglichen.

Anruf zwischen Clients im selben Netzwerk

Wenn sowohl Client A als auch Client B im selben Netzwerk einen Anruf initiieren, werden die SIP-Nachrichten über den SIP-Proxy im externen Netzwerk weitergeleitet. Die SIP ALG verarbeitet die INVITE von Client A als normaler ausgehender Anruf. Da sich Client B im selben Netzwerk befindet, sendet der SIP-Proxy das INIVITE zurück an die Citrix ADC Appliance. Das SIP ALG prüft die INIVITE-Nachricht, stellt fest, dass sie die NAT-IP-Adresse von Client A enthält, und ersetzt diese durch die private IP-Adresse des Clients A, bevor die Nachricht an Client B gesendet wird. Sobald der Anruf zwischen den Clients hergestellt ist, ist der Citrix ADC nicht an der Medienübertragung beteiligt. zwischen den Clients.

Weitere LSN SIP-Szenarien: SIP-Proxy im privaten Netzwerk

Wenn Sie den SIP-Proxyserver im privaten Netzwerk hosten möchten, empfiehlt Citrix, eine der folgenden Aktionen durchzuführen:

  • Konfigurieren Sie eine statische LSN-Zuordnung für den privaten SIP-Proxy. Weitere Informationen finden Sie unter Konfigurieren von statischen LSN-Maps. Stellen Sie sicher, dass der NAT-Port mit dem Port identisch ist, der im SIP-ALG-Profil konfiguriert ist.
  • Konfigurieren Sie den SIP-Proxyserver in einer demilitarisierten Zone (DMZ).

Abbildung 1. SIP-Anrufregistrierung

lokalisierte Grafik

Abbildung 2. SIP-Eingehender Anruf

lokalisierte Grafik

Die Abbildungen 1 und 2 zeigen die folgenden Szenarien:

  • Szenario 1: Der SIP-Client im privaten Netzwerk registriert sich beim SIP-Proxyserver im selben Netzwerk. ALG-Vorgänge werden nicht ausgeführt, da sich der SIP-Client und der SIP-Proxyserver im selben Netzwerk befinden.
  • Szenario 2: Der SIP-Client im öffentlichen Netzwerk registriert sich beim SIP-Proxyserver im privaten Netzwerk. Die REGISTER-Meldung vom öffentlichen SIP-Client wird mit der auf der Appliance konfigurierten statischen LSN-Zuordnung an die Citrix ADC Appliance gesendet, und die Appliance erstellt ein Lochloch für weitere SIP-Vorgänge.
  • Szenario 3 — SIP-Eingehender Anruf. Ein eingehender SIP-Anruf wird mit einer SIP-INVITE-Nachricht vom externen zum internen Netzwerk initiiert. Die Citrix ADC Appliance empfängt die INVITE-Nachricht vom SIP-Client C2, der sich im externen Netzwerk befindet, über die statischen LSN-Zuordnungen, die auf der Citrix ADC Appliance konfiguriert sind.
    Die Appliance erstellt ein Lochloch und leitet die INVITE-Nachricht an den SIP-Proxy weiter. Der SIP-Proxy leitet dann die INVITE-Nachricht an den SIP-Client C1 im internen Netzwerk weiter. Der SIP-Client C1 sendet dann 180 und 200 OK-Nachrichten an den SIP-Proxy, der die Nachricht wiederum über die Citrix ADC Appliance an den SIP-Client C2 weiterleitet. Wenn die vom internen SIP-Client C1 gesendete 200 OK-Antwortnachricht im Citrix ADC eintrifft, führt die SIP-ALG NAT für die IP-Adressen und Portnummern in den SIP-Headerfeldern Via, Kontakt, Route und Datensatzroute sowie in den SDP-Feldern aus und ersetzt sie durch die IP-Adresse des LSN-Pools und Portnummer . Die SIP ALG leitet dann die Antwortmeldung an SIP-Client C2 weiter und öffnet ein Lochloch in ausgehender Richtung für weitere SIP-Kommunikation.

Unterstützung für Überwachungsprotokolle

Sie können ALG-Informationen als Teil der LSN-Protokollierung protokollieren, indem Sie ALG in der LSN-Überwachungsprotokollierungskonfiguration aktivieren. Weitere Informationen zur LSN-Protokollierung finden Sie unter LSN protokollieren und überwachen. Eine Protokollmeldung für einen ALG-Eintrag im LSN-Protokoll besteht aus folgenden Informationen:

  • Zeitstempel
  • Typ der SIP-Nachricht (z. B. SIP-Anfrage)
  • Quell-IP-Adresse und Port des SIP-Clients
  • Ziel-IP-Adresse und Port des SIP-Proxy
  • NAT IP-Adresse und Port
  • SIP-Methode
  • Sequenznummer
  • Ob der SIP-Client registriert ist oder nicht
  • Benutzername und Domäne des Anrufers
  • Benutzername und Domäne des Receivers

Beispiel-Audit-Protokoll:

Anfrage:

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-->

Antwort:

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-->

Konfigurieren von SIP ALG

Sie müssen die SIP ALG als Teil der LSN-Konfiguration konfigurieren. Anweisungen zum Konfigurieren von LSN finden Sie unter Konfigurationsschritte für LSN. Stellen Sie beim Konfigurieren von LSN sicher, dass Sie:

  • Legen Sie beim Hinzufügen des LSN-Anwendungsprofils die folgenden Parameter fest:
    • IP-Pooling = PAIRED
    • Adress- und Portzuordnung = ENDPOINT-INDEPENDENT
    • Filterung = ENDPOINT-INDEPENDENT

Wichtig: Damit die SIP ALG funktioniert, ist eine vollständige Konus-NAT-Konfiguration erforderlich.

Beispiel:

add lsn appsprofile app_tcp TCP -ippooling PAIRED -mapping ENDPOINT-INDEPENDENT -filtering ENDPOINT-INDEPENDENT
<!--NeedCopy-->
  • Erstellen Sie ein SIP-ALG-Profil und stellen Sie sicher, dass Sie entweder den Quellportbereich oder den Zielportbereich definieren.

Beispiel:

add lsn sipalgprofile sipalgprofile_tcp -sipsrcportrange 1-65535 -sipdstportrange 5060 -openViaPinhole ENABLED -openRecordRoutePinhole ENABLED –sipTransportProtocol TCP
<!--NeedCopy-->
  • Legen Sie SIP ALG = ENABLED fest, während Sie die LSN-Gruppe erstellen.

Beispiel:

add lsn group g1 -clientname c1 -sipalg ENABLED
<!--NeedCopy-->
  • Binden Sie das SIP-ALG-Profil an die LSN-Gruppe.

Beispiel SIP-ALG-Konfiguration:

Die folgende Beispielkonfiguration zeigt, wie Sie eine einfache LSN-Konfiguration mit einem einzelnen Teilnehmernetzwerk, einer einzelnen LSN-NAT-IP-Adresse, einer SIP-ALG-spezifischen Einstellung erstellen und SIP-ALG konfigurieren:

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-->