Test-CSFederationPartner
Ein sehr nettes Commandlet im Skype for Business Umfeld ist Test-CSFederationPartner zur Verifikation der SIP-Verbindung nach extern. Über Federation werden nicht nur Status und Messages übertragen sondern auch per INVITE Verbindungen zu anderen Skype for Business Benutzern und Meetings aufgebaut. Diese Seite beschreibt Aufruf, Funktionsweise und übliche Fehlermeldungen.
Aufruf
Zum Aufruf des Commandlets hat Microsoft auf verschiedenen Seiten dokumentiert.
- Testing ability to connect to a federated domain from Lync
Server 2013
https://technet.microsoft.com/de-de/library/dn743840(v=ocs.15).aspx - Test-CsFederatedPartner
https://technet.microsoft.com/de-de/library/gg398281.aspx
Wichtig sind drei Parameter:
- TargetFqdn
Die ist der FQDN-Hostname des eigenen lokalen Edge-Servers, der als "Relay" genutzt wird. Das Commandlet baut eine TLS-Verbindung auf Port 5061 auf um darüber dann einen OPTIONS-Request abzusetzen - Domain
Hier geben Sie die SIP-Domäne der zu prüfenden Gegenstelle ein. - ProxyFqdn
Optional können Sie hier den FQDN des SIP-Access Edge der Gegenseite eingeben. Ohne die Angabe macht der Edge Server dann eine DNS-Abfrage nach "_sipfederationtls._tcp.<domain>
Der Aufruf kann auf jedem System erfolgen, auf dem die Skype for Business PowerShell installiert wurde. Als Rückgabe kommt ein Objekt mit den angezeigten Properties
TypeName: Microsoft.Rtc.SyntheticTransactions.TaskOutput Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Diagnosis Property string Diagnosis {get;} Error Property string Error {get;} Latency Property timespan Latency {get;} Result Property Microsoft.Rtc.SyntheticTransactions.ResultStatus R... TargetFqdn Property string TargetFqdn {get;} WorkflowLogger Property Microsoft.Rtc.SyntheticTransactions.Logging.Synthe...
Das Feld "Diagnostics" enthält weitere Details und ist ein String, den Sie mit ".split(",")" aufteilen können
Diese Test funktioniert natürlich nur, wenn Sie einen Edge-Server installiert haben, der von dem ausführenden Client von intern über per 5061 erreichbar ist und Federation generell auch erlaubt ist.
Erster Basistest
Die Federation zu Office 365 ist immer eine dankbare Gegenstelle für erste Tests:
PS C:\> Test-CsFederatedPartner -TargetFqdn edge.msxfaq.net -Domain push.lync.com -ProxyFqdn sipfed.online.lync.com Target Fqdn : edge.msxfaq.net Result : Success Latency : 00:00:00 Error Message : Diagnosis :
Da dieser Weg auch für mobile Clients (IOS, Windows Phone) genutzt wird ist er bei korrekter Konfiguration eigentlich immer erreichbar.
Massentests
Da Test-CSFederationPartner natürlich ein Powershell-Script ist, können Sie damit sehr einfach ihre eingetragenen Federation-Partner regelmäßig überprüfen lassen. Hier ein Beispiel, welches die manuell gepflegte Liste mit "GET-CSAllowedDomain" ausliest und per Pipeline an Test-CSFederationPartner übergibt und dann nach den verschiedenen Fehlercodes gruppiert.
Get-CsAllowedDomain ` | ForEach-Object {` Test-CsFederatedPartner ` -TargetFqdn "edge.msxfaq.net" ` -Domain $_.Identity` } ` | group "Error"
Natürlich können Sie genauso einfach eine Textdatei als "Input" verwenden und die Ausgaben in ihr Monitoring-System überführen.
Fehlerfälle
Test-CSFederationPartner ist auch mein erstes Tool, um Probleme mit der Federation zu verifizieren. ich erspare mir dabei häufiger schon den Umgang mit OCSLogger, CLSLogger , Snooper und Eventlog. Exemplarisch habe ich ein paar Fehlerfälle dokumentiert, da sie sehr einfach schon einen Hinweis auf das Problem geben:
Fehlerfall | Diagnosis-Meldung |
---|---|
Nicht existierende DomainWenn Sie als "Domain" eine SIP-Domäne angeben, die es nicht mehr gibt., dann sehen Sie folgenden Fehler. |
Target Fqdn : Result : Failure Latency : 00:00:00 Error Message : 404, Not Found Diagnosis : ErrorCode=1008, Source=sip.msxfaq.net, Reason=Unable to resolve DNS SRV record, domain=example.com, dns-source=WireQuery, dns-srv-result=NegativeResult Microsoft.Rtc.Signaling.DiagnosticHeader Prüfen Sie per NSLOOKUP auf dem Edge Server auf _sipfederationtls._tcp.<sip-domain> die entfernte Domäne |
Wildcard auf Access EdgeDer Einsatz von Wildcard-Zertifikaten auf dem Edge-Server ist problematisch, da z.B. die Microsoft Server sehr wohl prüfen, welcher Name im Zertifikat steht und ob dieser mit dem Federation-Eintrag übereinstimmt. Wer also z.B.: ein "CN=*-<domain>"-Zertifikat auf dem Access-Edge installiert hat, wird z.B. Probleme mit der Push-Benachrichtigung auf IOS und Windows Phone bekommen. Der Fehler enthält auch den Namen des Source Servers bei Microsoft und die Information, dass dieser eben keine korrekte Routinginformation für den Rückweg kennt. |
Target Fqdn : Result : Failure Latency : 00:00:00 Error Message : 504, Server time-out Diagnosis : ErrorCode=2, Source=sipfed2E.online.lync.com, Reason=Serverresponse code and reason phrase, hresult=0xC3E93D8F(SIPPROXY_E_EPROUTING_INVALID_EDGE_ROUTE_DESTINATION) Microsoft.Rtc.Signaling.DiagnosticHeader Die Korrektur durch Tausch des Zertifikats kann wohl bis zu 24h dauern, da die Edge-Server von Office 365 einen Cache haben. |
Geblockte DomainDer Skype for Business Admin kann mit "Add-CSBlockedDomain" bestimmte SIP-Domänen verbieten. Das kann in Umgebungen genutzt werden, die per Default mit "Open Federatoin" arbeiten. |
Target Fqdn : Result : Failure Latency : 00:00:00 Error Message : 504, Server time-out Diagnosis : ErrorCode=1064,Source=sip.msxfaq.net,Reason=Cannot route to blocked domain,domain=carius.de,suffix=carius.de Microsoft.Rtc.Signaling.DiagnosticHeader Wenn die Kommunikation mit der SIP-Domäne erforderlich ist, dann müssen Sie diese aus der Liste der "Blocked Domains" entfernen. |
Federation auf sich selbstAuch wenn ich es hier als "letzten Punkt" aufführe, habe ich diesen Test natürlich zuerst gemacht. Ich habe geschaut, ob ich mich selbst fragen kann. Da hat mein Edge aber dann doch verhindert. Insofern ist dies kein valider Test, wenn man keine Gegenstelle kennt. Nutzen Sie einfach Office 365 als Prüfpunkt. |
PS C:\> Test-CsFederatedPartner -TargetFqdn edge.msxfaq.net -Domain msxfaq.net Target Fqdn : Result : Failure Latency : 00:00:00 Error Message : 404, Not Found Diagnosis : ErrorCode=1003,Source=sip.msxfaq.net,Reason=User does not exist,destination=Options_User@msxfaq.net Microsoft.Rtc.Signaling.DiagnosticHeader Diese Abfrage kann aus Prinzip nicht gehen. |
Funktionsweise
Den Test mit der Office 365 Push-Services habe ich genutzt, um per CLSLogging und Snooper auf dem Edge-Server die SIP-Pakete genauer zu inspizieren. Hier sieht man unverschlüsselt dann die Pakete und erkennt, was der "Test-CSFederationPartner" im Hintergrund macht:
Links ist der interne Client, der per TLS sich mit dem angegeben "Target-FQDN" verbindet und den Options-Request einstellt. Der Edge leitet das Paket nach extern weiter und die Antwort geht über die gleichen Stationen zurück:
Im Detail sieht das dann so aus:
Beschreibung | SIP-Daten |
---|---|
Der interne Client sendet einen OPTIONS an die interne Edge des IP |
Direction: incoming;source="internal edge";destination="external edge" Peer: sfb01.msxfaq.net:52080 Message-Type: request Start-Line: OPTIONS sip:Options_User@push.lync.com SIP/2.0 FROM: <sip:Options_User@msxfaq.net>;epid=xxxx;tag=xxxx TO: <sip:Options_User@push.lync.com> CALL-ID: x CSEQ: 1 OPTIONS CONTACT: <sip:sfb01.msxfaq.net;transport=Tls> VIA: SIP/2.0/TLS 192.168.100.102:52080;branch=xxxx ROUTE: <sip:sipfed.online.lync.com;transport=tls;lr>;ms-edge-route MAX-FORWARDS: 70 CONTENT-LENGTH: 0 User-AGENT: RTCC/6.0.0.0 |
Der Edge-Server addiert ein paar Header und sendet die Anfrage nach extern |
Direction: outgoing;source="internal edge";destination="external edge" Peer: sipfed.online.lync.com:5061 Message-Type: request Start-Line: OPTIONS sip:Options_User@push.lync.com SIP/2.0 FROM: <sip:Options_User@msxfaq.net>;epid=xxxx;tag=xxxx TO: <sip:Options_User@push.lync.com> CALL-ID: xxx CSEQ: 1 OPTIONS CONTACT: <sip:sfb01.msxfaq.net;transport=Tls> Via: SIP/2.0/TLS 192.168.66.22:53396;branch=xx.xx;branched=FALSE;ms-internal-info="xxxx" Via: SIP/2.0/TLS 192.168.100.102:52080;branch=xx;ms-received-port=52080;ms-received-cid=278D0F00 ROUTE: <sip:sipfed.online.lync.com;transport=tls;lr> Record-Route: <sip:sip.msxfaq.net:5061;transport=tls;lr;ms-key-info=xxxx;ms-route-sig=xxxx>;tag=xx Max-Forwards: 69 CONTENT-LENGTH: 0 User-AGENT: RTCC/6.0.0.0 ms-asserted-verification-level: ms-source-verified-User=verified |
Die Antwort von Microsoft liefert |
Direction: incoming;source="external edge";destination="internal edge" Peer: sipfed.online.lync.com:5061 Message-Type: response Start-Line: SIP/2.0 200 OK FROM: <sip:Options_User@msxfaq.net>;epid=xxxx;tag=xxxx To: <sip:Options_User@push.lync.com>;tag=xxxx CALL-ID: xxx CSEQ: 1 OPTIONS Via: SIP/2.0/TLS 192.168.66.22:53396;branch=xxxx;branched=FALSE;ms-internal-info="xxxx"; received=52.112.131.126;ms-received-port=53396;ms-received-cid=363A2900 Via: SIP/2.0/TLS 192.168.100.102:52080;branch=xxxx;ms-received-port=52080;ms-received-cid=278D0F00 Record-Route: <sip:sip.msxfaq.net:5061;transport=tls;lr;ms-key-info=xxxx;ms-route-sig=xxxx>;tag=xxxx Content-Length: 0 |
Der Edge leitet das Paket wieder an den Client weiter. |
Direction: outgoing;source="external edge";destination="internal edge" Peer: sfb01.msxfaq.net:52080 Message-Type: response Start-Line: SIP/2.0 200 OK FROM: <sip:Options_User@msxfaq.net>;epid=xxxx;tag=xxxx To: <sip:Options_User@push.lync.com>;tag=xxxx CALL-ID: xxx CSEQ: 1 OPTIONS Via: SIP/2.0/TLS 192.168.100.102:52080;branch=xxxx;ms-received-port=52080;ms-received-cid=278D0F00 Content-Length: 0 ms-edge-proxy-message-trust: ms-source-type=AuthorizedServer;ms-ep-fqdn=edge.msxfaq.net; ms-source-verified-User=unverified;ms-source-network=federation;ms-local-fcp=yes |
Ein direkter Kontakt mit dem User "Options_User@push.lync.com" ist nicht möglich. Er hat keine Präsenz und nimmt auch keine Messages an:
Schon der SUBSCRIBE wird mit einem "404 not found" quittiert. Der INVITE ebenso.
SIP/2.0 404 Not Found From: "Carius, Frank"<sip:frank.carius@msxfaq.net>;tag=ed02c96064;epid=2385f4c267 To: <sip:options_User@msxfaq.net>;tag=xxxx Call-ID: xxxxxxxx CSeq: 1 SUBSCRIBE Via: SIP/2.0/TLS 192.168.103.61:53845;ms-received-port=53845;ms-received-cid=xxxx ms-diagnostics: 1003;reason="User does not exist";destination="options_User@msxfaq.net";source="sip.msxfaq.net" Server: RTC/6.0
Diese spezielle SIP-Adresse dürfte in Verbindung mit dem OPTIONS-Request fest hinterlegt sein.
Weitere Links
- Testing ability to connect to a federated domain from Lync
Server 2013
https://technet.microsoft.com/de-de/library/dn743840(v=ocs.15).aspx - Test-CsFederatedPartner
https://technet.microsoft.com/de-de/library/gg398281.aspx - Lync Federation 504 error
https://madtownengineer.com/2013/06/05/lync-federation-504-error/ - Test-CsFederatedPartner : A 504 (Server time-out) response
was received from the network and the operation failed
http://communicationsknowledge.blogspot.de/2014/07/test-csfederatedpartner-504-server-time.html - 2710816 Lync Server PowerShell cmdlet Test-CsFederatedPartner fails
- Lync 2013 Mobility Push Notifications Failing
https://tsoorad.blogspot.de/2013/03/lync-2013-mobility-push-notifications.html - Configure federation with Skype for Business Online
https://technet.microsoft.com/EN-US/library/jj205126.aspx