Lync Inband Provisioning
Wenn sich ein Client per SIP am Server anmeldet, dann bekommt dieser als Antwort auf den SUBSCRIBE auch eine etwas größere Datenstruktur, die die Einstellungen für den Client vorgeben. Diese Daten gibt es einmal für den normalen Lync Client aber auch für die Konferenz-Funktion. Und sogar Telefone bekommen über diesen Weg ihre Einstellungen. Ich möchte nicht auf die einzelnen Parameter eingehen aber der Request alleine ist schon ein schönes Beispiel um zu sehen, was da alles kommt.
Das Provisioning-Paket können Sie auf dem Server über den Logger als auch auf dem Client bei aktivierter Protokollierung einsehen.
Die Zeiten der Konfiguration per Gruppenrichtlinien sind mit Lync vorbei. Schade dass Outlook noch kein "Inband Provisioning" unterstützt. Nur ActiveSync-Geräte haben einen ähnlichen Mechanismus.
Quellen und Reihenfolge
Lync Clients können über verschiedene Wege konfiguriert werden. Lokale Einstellungen, Gruppenrichtlinien und Inband-Provisioning konfigurieren den Client. Wenn sie aber Einstellungen vielleicht noch konkurrierend einstellen, dann ist die Reihenfolge wichtig, in der der Client die Einstellungen übernimmt. Sobald eine Einstellung gefunden ist, wird diese Einstellung nicht mehr weiter gesucht.
Quelle | Beschreibung | Prio |
---|---|---|
HKEY_LOCAL_MACHINE\Software\Microsoft\ Communicator |
|
1 |
HKEY_CURRENT_User\Software\Microsoft\ Communicator |
|
2 |
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\ Communicator |
|
3 |
HKEY_CURRENT_User\Software\Policies\Microsoft\ Communicator |
|
4 |
SIP Inband |
|
5 |
Interessant ist hierbei, dass SIP-Inband am Ende steht. Allerdings gibt es Einstellungen, die der Communicator nur per Inband ausliest. Sie werden z.B. in der lokalen Registrierung keinen Dialplan, Normalisierungsregeln etc. konfigurieren können, weil es diese Einstellungen einfach nicht gibt.
Nur ganz wegen Einstellungen, die den Communicator selbst betreffen, können auch über Gruppenrichtlinien gesetzt werden
- Group Policy Settings für Lync 2013
http://technet.microsoft.com/en-us/library/jj204924.aspx
ADMX/ADML sind Bestandteil von Office 2013 (lync15.admx) - Group Policy Administrative
Template files (ADMX, ADML) and
Office Customization Tool (OCT)
files für Office 2013
http://technet.microsoft.com/en-us/library/cc178992(office.15).aspx#section2 - Office 2013 Administrative
Template files (ADMX/ADML) and
Office Customization Tool
http://go.microsoft.com/fwlink/p/?LinkId=257051 oder http://www.microsoft.com/en-us/download/details.aspx?id=35554
Desktopeinstellungen
Die Provisioning-Antwort ist eine direkte 200 SIP OK-Meldung, die eine erfolgreiche Registrierung quittiert. Hierein Beispiel:
SIP/2.0 200 OK Contact: <sip:NAWLYNC001.msxfaq.de:5061;transport=tls;received=192.168.100.100;ms-received-cid=1D86203> Content-Length: 51294 From: "Carius, Frank"<sip:User1@msxfaq.de>;tag=690a845fec;epid=110531d8e4 To: <sip:User1@msxfaq.de>;tag=1C4A0080 Call-ID: c15bfa31692d4495903e2f1cbea403bd CSeq: 1 SUBSCRIBE Via: SIP/2.0/TLS 2.206.238.206:5526;ms-received-port=5526;ms-received-cid=1DB6C00 Expires: 0 Content-Type: application/vnd-microsoft-roaming-provisioning-v2+xml Event: vnd-microsoft-provisioning-v2 subscription-state: terminated;expires=0 ms-piggyback-cseq: 1 Supported: ms-piggyback-first-notify <provisionGroupList xmlns="http://schemas.microsoft.com/2006/09/sip/provisiongrouplist-notification"> <provisionGroup name="endpointConfiguration" > <propertyEntryList > <property name="ShowRecentContacts" >true</property> <property name="ShowManagePrivacyRelationships" >false</property> <property name="MaxPhotoSizeKB" >30</property> <property name="DisableMusicOnHold" >false</property> <property name="MusicOnHoldAudioFile" >\\lync01\Ansagen\03_Warteschleife_mono.wma</property> <property name="PhotoUsage" >AllPhotos</property> <property name="AbsUsage" >WebSearchAndFileDownload</property> <property name="HotdeskingTimeout" >300</property> <property name="SPSearchInternalURL" >https://intranet.msxfaq.de/_vti_bin/search.asmx</property> <property name="SPSearchExternalURL" >https://intranet.msxfaq.de/_vti_bin/search.asmx</property> <property name="SPSearchCenterInternalURL" >https://intranet.msxfaq.de/Suche/Seiten/peopleresults.aspx</property> <property name="SPSearchCenterExternalURL" >https://intranet.msxfaq.de/Suche/Seiten/peopleresults.aspx</property> <property name="EnableExchangeDelegateSyncUp" >true</property> <property name="EnableContactSync" >true</property> <property name="ShowSharepointPhotoEditLink" >false</property> <property name="EnableVOIPCallDefault" >false</property> <property name="MaximumDGsAllowedInContactList" >10</property> <property name="P2PAppSharingEncryption" >0</property> </propertyEntryList> </provisionGroup> <provisionGroup name="locationPolicy" > <propertyEntryList > <property name="EnhancedEmergencyServicesEnabled" >false</property> <property name="LocationPolicyTagID" >User-tagid</property> <property name="LocationRequired" >yes</property> <property name="UseLocationForE911Only" >false</property> </propertyEntryList> </provisionGroup> <provisionGroup name="mediaConfiguration" > <propertyEntryList > <property name="bypassEnabled" >true</property> <property name="internalBypassMode" >Any</property> <property name="externalBypassMode" >Off</property> <property name="bypassId" >9adbd0b2-866b-4d8c-9b97-e44f05ee61bb</property> </propertyEntryList> </provisionGroup> <provisionGroup name="meetingPolicy" > <instance > <property name="AllowIPAudio" >true</property> <property name="AllowIPVideo" >true</property> <property name="EnableAppDesktopSharing" >true</property> <property name="AllowAppSharingForExternalMeeting" >Desktop</property> <property name="RetainPPTForExternalMeeting" >true</property> <property name="AllowPresenterToRecord" >true</property> <property name="EnableDataCollaboration" >true</property> <property name="MeetingSize" >100</property> <property name="EnablePSTNConferencing" >true</property> <property name="TrustedConferencingPinRequired" >false</property> <property name="AllowParticipantControl" >true</property> <property name="AllowAnnotations" >true</property> <property name="AllowAnonymousParticipants" >true</property> <property name="AllowExternalUserControl" >true</property> <property name="AllowExternalUsersToSaveContent" >true</property> <property name="AllowExternalUserRecording" >false</property> <property name="AllowPolls" >true</property> <property name="AllowRecording" >true</property> <property name="EnableP2PRecording" >false</property> <property name="AllowFileTransfer" >true</property> <property name="MaxConferenceVideoResolution" >VGA</property> <property name="AllowUserToScheduleMeetingsWithAppSharing" >true</property> <property name="EnableP2PFileTransfer" >true</property> <property name="AllowedAppDesktopSharingLevel" >Desktop</property> <property name="AudioBitRate" >200</property> <property name="VideoBitRate" >50000</property> <property name="AppSharingBitRate" >50000</property> <property name="FileTransferBitRate" >50000</property> <property name="EnableP2PVideo" >true</property> </instance> </provisionGroup> <provisionGroup name="presencePolicyV2" > <propertyEntryList > <property name="EnablePrivacyMode" >false</property> <property name="AutoInitiateContacts" >true</property> <property name="PublishLocationDataDefault" >true</property> <property name="DisplayPublishedPhotoDefault" >true</property> <property name="PersonalNoteHistoryDepth" >3</property> <property name="SubscribeToCollapsedDG" >true</property> </propertyEntryList> </provisionGroup> <provisionGroup name="privacyPublicationGrammar" > <containerManifestList xxxxxxDeletedxxxx </containerManifestList> </provisionGroup> <provisionGroup name="publicationGrammar" > <containerManifestList xxxxxxDeletedxxxx </containerManifestList> </provisionGroup> <provisionGroup name="ServerConfiguration" > <absWebServiceEnabled>true</absWebServiceEnabled> <lisInternalURL>https://lync01.msxfaq.de:443/locationinformation/liservice.svc</lisInternalURL> <absInternalServerURL>https://lync01.msxfaq.de:443/abs/handler</absInternalServerURL> <absExternalServerURL>https://lyncweb.msxfaq.de:443/abs/handler</absExternalServerURL> <abwqInternalURL>https://lync01.msxfaq.de:443/groupexpansion/service.svc</abwqInternalURL> <abwqExternalURL>https://lyncweb.msxfaq.de:443/groupexpansion/service.svc</abwqExternalURL> <dlxInternalURL>https://lync01.msxfaq.de:443/groupexpansion/service.svc</dlxInternalURL> <dlxExternalURL>https://lyncweb.msxfaq.de:443/groupexpansion/service.svc</dlxExternalURL> <dlxEnabled>true</dlxEnabled> <UpdatesServerInternalURL>https://lync01.msxfaq.de:443/RequestHandler/ucdevice.upx</UpdatesServerInternalURL> <UpdatesServerExternalURL>https://lyncweb.msxfaq.de:443/RequestHandlerExt/ucdevice.upx</UpdatesServerExternalURL> <UpdatesServerEnabled>true</UpdatesServerEnabled> <ucPortRangeEnabled>false</ucPortRangeEnabled> <ucMinMediaPort>5350</ucMinMediaPort> <ucMaxMediaPort>5389</ucMaxMediaPort> <ucMinSipDynamicPort>7100</ucMinSipDynamicPort> <ucMaxSipDynamicPort>7102</ucMaxSipDynamicPort> <ucMinAudioPort>5350</ucMinAudioPort> <ucMaxAudioPort>5389</ucMaxAudioPort> <ucMinVideoPort>5350</ucMinVideoPort> <ucMaxVideoPort>5389</ucMaxVideoPort> <ucMinAppSharingPort>5350</ucMinAppSharingPort> <ucMaxAppSharingPort>5389</ucMaxAppSharingPort> <ucMinFileTransferPort>5350</ucMinFileTransferPort> <ucMaxFileTransferPort>5389</ucMaxFileTransferPort> <ucPC2PCAVEncryption>SupportEncryption</ucPC2PCAVEncryption> <ucMaxVideoRateAllowed>Hd720p-1.5M</ucMaxVideoRateAllowed> <qosEnabled>false</qosEnabled> <ucDiffServVoice>40</ucDiffServVoice> <ucVoice802_1p>0</ucVoice802_1p> <UCEnforcePinLock>false</UCEnforcePinLock> <ucMinPinLength>6</ucMinPinLength> <ucPhoneTimeOut>10</ucPhoneTimeOut> <UCExchangeMWIPoll>3</UCExchangeMWIPoll> <UCEnableSIPSecurityMode>High</UCEnableSIPSecurityMode> <UCEnableUserLogging>false</UCEnableUserLogging> <loggingLevel>Off</loggingLevel> <enableBWPolicyCheck>false</enableBWPolicyCheck> <poolUri>sip:lync01.msxfaq.de@msxfaq.de;gruu;opaque=srvr:HomeServer:xJwxxxxxMdwAA</poolUri> <mrasUri>sip:nawlyncedge.msxfaq.de@msxfaq.de;gruu;opaque=srvr:MRAS:b-l67axxxxxxxxxM9QPixAAA</mrasUri> <qosUri>sip:lync01.msxfaq.de@msxfaq.de;gruu;opaque=srvr:HomeServer:xJwxxxxxMdwAA</qosUri> <callParkServerUri>sip:lync01.msxfaq.de@msxfaq.de;gruu;opaque=srvr:Microsoft.Rtc.Applications.Cps:N8xxxxOC1gwAA</callParkServerUri> <responseGroupServiceInternalURL>https://lync01.msxfaq.de:443/RgsClients/AgentService.svc</responseGroupServiceInternalURL> <responseGroupServiceExternalURL>https://lyncweb.msxfaq.de:443/RgsClients/AgentService.svc</responseGroupServiceExternalURL> <responseGroupServiceInternalAgentURL>https://lync01.msxfaq.de:443/RgsClients/Tab.aspx</responseGroupServiceInternalAgentURL> <responseGroupServiceExternalAgentURL>https://lyncweb.msxfaq.de:443/RgsClients/Tab.aspx</responseGroupServiceExternalAgentURL> <botSipUriForTestCall>sip:lync01.msxfaq.de@msxfaq.de;gruu;opaque=srvr:Microsoft.Rtc.Applications.TestBot:yxGAxxxxxjS6gAA</botSipUriForTestCall> <cwaInternalUri>https://meet.msxfaq.de/dialin</cwaInternalUri> <cwaExternalUri>https://meet.msxfaq.de/dialin</cwaExternalUri> <ucLocationProfile>Paderborn.msxfaq.de</ucLocationProfile> <focusFactoryUri>sip:User1@msxfaq.de;gruu;opaque=app:conf:focusfactory</focusFactoryUri> <voiceMailUri>sip:User1@msxfaq.de;opaque=app:voicemail</voiceMailUri></provisionGroup> <provisionGroup name="ucPolicy" > <instance > <property name="name" >Default Policy</property> <property name="AllowSimultaneousRinging" >true</property> <property name="AllowCallForwarding" >true</property> <property name="EnableDelegation" >true</property> <property name="EnableTeamCall" >true</property> <property name="EnableCallPark" >true</property> <property name="EnableCallTransfer" >true</property> <property name="EnableMaliciousCallTrace" >false</property> <property name="enableBWPolicyOverride" >false</property> <property name="UCEnabled" >true</property> </instance> </provisionGroup> <provisionGroup name="UserSetting" > <disableFileTransfer>false</disableFileTransfer> <ucUserLocationProfile>Paderborn.msxfaq.de</ucUserLocationProfile> </provisionGroup> </provisionGroupList>
Sie sehen also sehr umfangreich die komplette Clientvorgabe.
Media Relay
In einem getrennten Request werden dann die Relay-Einstellungen mit den Daten des Edge-Servers geliefert
02/17/2015|19:53:20.552 1D08:1D0C INFO :: SIP/2.0 200 OK CSEQ: 1 SERVICE CONTENT-LENGTH: 1019 CONTENT-TYPE: application/msrtc-media-relay-auth+xml SERVER: RTCC/6.0.0.0 MRAS/3.0 <?xml version="1.0"?> <response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" requestID="841745152" version="3.0" serverVersion="3.0" to="sip:sipedgeSN20A.infra.lync.com@online.lync.com;gruu;opaque=srvr:MRAS:HOVwnJC_g1WS-euJvmbl7QAA" from="sip:nawdemo365b@netatwork.de" reasonPhrase="OK" xmlns="http://schemas.microsoft.com/2006/09/sip/mrasp"> <credentialsResponse credentialsRequestID="841745152"> <credentials> <username>xxx+xxx//xxx==</username> <password>xxxx=</password> <duration>480</duration> </credentials> <mediaRelayList> <mediaRelay> <location>internet</location> <hostName>mediaedge0A.online.lync.com</hostName> <udpPort>3478</udpPort> <tcpPort>443</tcpPort> </mediaRelay> </mediaRelayList> </credentialsResponse> s</response>
Sie sehen hier die Zugangsdaten in Form von Username/password, die eine bestimmte Zeit gültig sind und der Client ist wohl extern, so dass ich als Location ein "Internet" bekomme und der Hostname des Media-Relay dann über das Internet auflösbar sein muss. Auch die Ports für UDP (3478) und TCP (443) sind ja nicht unbekannt
Konferenzeinstellungen
Auch die für den Anwender verfügbaren Konferenzeinstellungen sind in einem SIP 200 OK enthalten, der aber eine Antwort auf einen "Service"-Request ist und nicht auf einen Register kommt.
SIP/2.0 200 OK Content-Length: 2170 From: "Carius, Frank"<sip:User1@msxfaq.de>;tag=c42fcb1ac4;epid=110531d8e4 To: <sip:User1@msxfaq.de;gruu;opaque=app:conf:focusfactory>;tag=ADB630276E90FD30E742440D1C2AA84C Call-ID: c161cd50b4114d9e93edcd2c14b7ad87 CSeq: 1 SERVICE Content-Type: application/cccp+xml <response xmlns="urn:ietf:params:xml:ns:cccp" xmlns:mscp="http://schemas.microsoft.com/rtc/2005/08/cccpextensions" xmlns:msci="http://schemas.microsoft.com/rtc/2005/08/confinfoextensions" xmlns:msci2="http://schemas.microsoft.com/rtc/2008/12/confinfoextensions" xmlns:cis="urn:ietf:params:xml:ns:conference-info-separator" requestId="4229968" C3PVersion="1" from="sip:User1@msxfaq.de;gruu;opaque=app:conf:focusfactory" to="sip:User1@msxfaq.de" code="success"> <getConferencingCapabilities capability-version="0"> <mcu-types> <mcuType>applicationsharing</mcuType> <mcuType>audio-video</mcuType> <mcuType>data-conf</mcuType> <mcuType>chat</mcuType> </mcu-types> <pstn-bridging> <enabled>true</enabled> <access-numbers> <msci:internal-URL>https://meet.msxfaq.de/dialin</msci:internal-URL> <msci:external-URL>https://meet.msxfaq.de/dialin</msci:external-URL> <msci:region name="NetatWork Paderborn, DE"> <msci:access-number> <msci:language tag="de-DE" lcid="1031"/> <msci:language tag="fr-FR" lcid="1036"/> <msci:language tag="en-US" lcid="1033"/> <msci:number>+49 5251 304 699</msci:number> </msci:access-number> </msci:region> <msci2:default-region>Paderborn, DE</msci2:default-region> </access-numbers> </pstn-bridging> <conference-key-optional>true</conference-key-optional> <anonymous-scheduling>true</anonymous-scheduling> <default-admission-policy>anonymous</default-admission-policy> <cis:separator/> <mscp:schedule-locked>true</mscp:schedule-locked> <msci:autopromote-allowed>2147516416</msci:autopromote-allowed> <mscp:default-autopromote>32768</mscp:default-autopromote> <msci:pstn-lobby-bypass-allowed>true</msci:pstn-lobby-bypass-allowed> <mscp:static-meeting-limit>1</mscp:static-meeting-limit> <mscp:default-meeting-static>true</mscp:default-meeting-static> <msci:recording-allowed>true</msci:recording-allowed> <msci:externalUser-recording-allowed>false</msci:externalUser-recording-allowed> <mscp:schedule-key-optional>true</mscp:schedule-key-optional> <msci:default-entry-exit-Announcements>false</msci:default-entry-exit-Announcements> </getConferencingCapabilities> </response>
Auch hier sind nicht nur die "Simple-URLs" sichtbar, sondern auch alle "Berechtigungen", die der Anwender hat, z.B. anonyme Teilnehmer erlaubt sind etc.
Telefoneinstellungen
Ein Lync Telefon bekommt über den Weg auch seine Konfigurationsdaten. Zwar können auch Lync Telefone ein Protokoll schreiben und hochladen, aber die Auswertung ist schon mühseliger, so dass hier das Mitschneiden auf dem Lync Server der geeignetere Weg ist. Ein Mitschnitt per Netmon ist aufgrund der TLS-Verschlüsselung nicht sinnvoll.
<provisionGroup name="ucPolicy" > <instance > <property name="name" >Default Policy</property> <property name="AllowSimultaneousRinging" >true</property> <property name="AllowCallForwarding" >true</property> <property name="EnableDelegation" >true</property> <property name="EnableTeamCall" >true</property> <property name="EnableCallPark" >true</property> <property name="EnableCallTransfer" >true</property> <property name="EnableMaliciousCallTrace" >false</property> <property name="enableBWPolicyOverride" >false</property> <property name="UCEnabled" >true</property> </instance> </provisionGroup>
Weitere Links
- In-Band Provisioning and
Microsoft Lync Server 2010
http://blogs.technet.com/b/csps/p/cmgmtprovisioning.aspx - Group Policy Settings für Lync 2013
http://technet.microsoft.com/en-us/library/jj204924.aspx
ADMX/ADML sind Bestandteil von Office 2013 (lync15.admx) - Group Policy Administrative
Template files (ADMX, ADML) and
Office Customization Tool (OCT)
files für Office 2013
http://technet.microsoft.com/en-us/library/cc178992(office.15).aspx#section2 - Office 2013 Administrative
Template files (ADMX/ADML) and
Office Customization Tool
http://go.microsoft.com/fwlink/p/?LinkId=257051 oder http://www.microsoft.com/en-us/download/details.aspx?id=35554