Hyper-V: Configure VLAN Trunk on Kemp LoadMaster

One of the Load Balancers that we have in our lab is LoadMaster from Kemp Technologies. We already published an article on how to deploy it:

UC Lobby: Deploying Kemp Technologies Free LoadMaster as Lab Load Balancer/Reverse Proxy

Why do we need to enable VLAN Trunk? The reason for this is that our lab “router” reached the maximum number of Virtual network adapters that we can add in Hyper-V (8 network adapters + 4 legacy network adapters):

Hyper-V scalability in Windows Server 2012 and Windows Server 2012 R2
https://technet.microsoft.com/en-us/library/jj680093.aspx

By enabling VLAN Trunk on the Network Adapter we can bypass that limitation.

In this post, we show you how to enable VLAN Trunk in Hyper-V and configure Kemp LoadMaster. Note that the steps in Hyper-V can also be used for other types of Virtual Machines.

To change the adapter mode to Trunk we need to use PowerShell on the Physical Host. The Network Adapters associated to a Virtual Machine can be listed by running:

Get-VMNetworkAdapter -VMname “LB01” | Select VMName, SwitchName | ft -AutoSize
https://technet.microsoft.com/en-us/library/hh848526(v=wps.630).aspx

So, we know that we want to change the mode to Trunk on the Network Adapter connected to “Gears”. Also, we specifically want to leave VLAN 0 as default and enable two VLANs in the Trunk:

Get-VMNetworkAdapter -VMname “LB01” | ?{$_.switchname -eq “Gears”} | Set-VMNetworkAdapterVlan -Trunk -NativeVlanId 0 -AllowedVlanIdList “1301,1302”


Note: The Default VLAN will be automatically added to the allowed list.

Set-VMNetworkAdapterVlan
https://technet.microsoft.com/en-us/library/hh848475(v=wps.630).aspx

Now that we have enabled VLAN Trunk, the next step takes us to the Kemp LoadMaster Web Management interface. In System Configuration > Network Setup > Interfaces > eth1 — this being the interface in which we want to configure the different VLANs —, we need to click on VLAN Configuration:

In the next screen, we specify the VLAN ID:

After adding the VLAN, a new drop-down list will be added to System Configuration > Interfaces:

 

By selecting the VLAN we can configure the IP address:

We can now ping the above-mentioned interface:

Finally, the Virtual Services status will show as “Up”:

PSScript: Lync/SfB Server Certification Store Validation

In a previous post, we published the checks/validations that we should do in the Certification Store in the Lync/SfB servers.

Checks to do in the Lync/SfB Certificate Store

We decided to write a PowerShell with all these checks to make it simple to use. The script will be kept in sync with the post, meaning that when a new check is added, it will also be included in the script.

The PowerShell script is available in the TechNet Gallery:

Lync/Skype4B Certification Store Validation
https://gallery.technet.microsoft.com/LyncSkype4B-Certification-c80a7143

Both script usage and change log are included in the TechNet Gallery description.

Active Directory contact is changed to the phone number in the contact list of Lync2013/SfB2015

On 14th July 2015, a new Lync2013/SfB2015 client update was released (KB3054946 – 15.0.4737.1001). We were eager to see it released, especially because it includes the following fix:

Active Directory contact’s name is changed to the phone number in the contact list of Skype for Business or Lync 2013
https://support.microsoft.com/kb/3072753

Most users didn’t notice it because this only affects AD Contacts without sip address or email address.

To explain this let’s think in the following scenario: the company Gears has 3 receptions. They are located in the same site and they aren’t Lync/Skype4B enabled. The receptions only have one telephone connected to a traditional PBX and we add them as contacts in AD, so that they are searchable in Lync/Skype4B.

In Lync2013/Skype4B, we add these receptions to our contact list:

displaynamephone01

Now we need to sign off and sign in again. After this, the Display Name is replaced with the contact Phone Number:

displaynamephone02

If we don’t know the exact telephone number, we won’t be able to tell which of the results we need to call.

For the Lync2013/Skype4B client with the July 2015 update, we have the same behaviour as in the Lync 2010 client:

displaynamephone01

displaynamephone03

Address Book search for “First + Last Name” when Display Name is “Last, First Name” (WebSearchOnly)

It is quite common to have users stored in Active Directory (AD) with “Last, First Name” (e. g., “Paulino, David”). Since Lync/SfB is heavily dependent on AD, what will happen to users that want to search for “First + Last Name”?

Regarding the Address Book download, this is an issue that has already been discussed in a previous post:

Last + First name searches in Lync/Skype4B Address Book (GalContacts.db)

However, when we use WebSearchOnly and we have the AD Display Name as “Last, First Name”, we may get some complaints from users saying they cannot search for “First + Last Name”. The reason for this is most likely that their intention is to search for a user with additional text in their Display Name, like “Carmine, Anthony (COG)”, but they end up searching only for “Anthony Carmine”.

Here are some examples:

AddressBookWLFN02

Looking in the RTCAB database, we notice that Display Names with a comma have more entries:

AddressBookWLFN03

AddressBookWLFN04

AddressBookWLFN05

AddressBookWLFN06

Note: The attribute 3 represents the Display Name:

AddressBookWLFN07

AddressBookWLFN08

Again, this will only work if we have a comma in the Display Name. Without it, we will only be able to search for the Display Name itself:

AddressBookWLFN09

AddressBookWLFN10

AddressBookWLFN11

Last + First name searches in Lync/SfB Address Book (GalContacts.db)

In a previous post in Joe Calev’s WebLog, we were shown how to enable Last + First name searches in Lync Server:

How to enable last name, first searches in Lync Address Book
https://blogs.msdn.microsoft.com/jcalev/2012/06/06/how-to-enable-last-name-first-searches-in-lync-address-book.aspx

That workaround works for WebSearchAndFileDownload and FileDownloadOnly — what we basically need is the GalContacts.db file.

Recently, Joe Calev’s workaround was introduced in Lync Server 2013 (Nov 2014 Cumulative Update) and it is also present in the Skype for Business Server 2015 RTM version. For the Lync Server 2010 pools, we need to follow Joe Calev’s post.

The RtcAbAttributeIndexRules.xml file is located — in a default Lync/Skype4B Server installation — in the following folders:

Lync Server 2010
C:\Program Files\Microsoft Lync Server 2010\Server\Core

Lync Server 2013
C:\Program Files\Microsoft Lync Server 2013\Server\Core

Skype for Business Server 2015
C:\Program Files\Skype for Business Server 2015\Server\Core

In Joe Calev’s post, we are proposed to use the following:

<attribute name="displayName">
	<indexRules>
		<indexRule id="displayName_rule_01">
			<description>
				<![CDATA[
          Index displayName as-is
        ]]>
			</description>
			<valuePattern>
				<![CDATA[^.*$]]>
			</valuePattern>
			<indexValues>
				<indexValue>
					<![CDATA[$0]]>
				</indexValue>
			</indexValues>
		</indexRule>
		<indexRule id="displayName_rule_02">
			<description>
				<![CDATA[
          Handle last name first name searches
      ]]>
			</description>
			<valuePattern>
				<![CDATA[(.+)(\s+)(.+)]]>
			</valuePattern>
			<indexValues>
				<indexValue>
					<![CDATA[$3 $1]]>
				</indexValue>
			</indexValues>
		</indexRule>
	</indexRules>
</attribute>

However, the final version is:

<attribute name="displayName">
	<indexRules>
    	<indexRule id="displayName_rule_01">
			<description>
	            <![CDATA[
	              Index displayName as-is
	            ]]>
          	</description>
			<valuePattern>
        		<![CDATA[^.*$]]>
			</valuePattern>
			<indexValues>
				<indexValue>
					<![CDATA[$0]]>
				</indexValue>
			</indexValues>
		</indexRule>
		<indexRule id="displayName_rule_02">
			<description>
            	<![CDATA[
		             Allow search without middle name
        	    ]]>
          	</description>
			<valuePattern>
				<![CDATA[^([^\s]+).*\s([^\s]+)$]]>
			</valuePattern>
			<indexValues>
            	<indexValue>
					<![CDATA[$1 $2]]>
				</indexValue>
			</indexValues>
		</indexRule>
		<indexRule id="displayName_rule_03">
			<description>
				<![CDATA[
					Handle last name first name searches
				]]>
			</description>
			<valuePattern>
				<![CDATA[(.+)(,+)(.+)]]>
			</valuePattern>
			<indexValues>
				<indexValue>
					<![CDATA[$3 $1]]>
				</indexValue>
			</indexValues>
		</indexRule>
	</indexRules>
 </attribute>

The main difference is that we have an additional rule to allow search without a middle name:

<indexRule id="displayName_rule_02">
          <description>
            <![CDATA[
              Allow search without middle name
            ]]>
          </description>
          <valuePattern>
            <![CDATA[^([^\s]+).*\s([^\s]+)$]]>
          </valuePattern>
          <indexValues>
            <indexValue>
              <![CDATA[$1 $2]]>
            </indexValue>
          </indexValues>
        </indexRule>

This will work wherever you have a Display Name like ‘Paulino’, ‘David’ or ‘David Paulino’ in the Active Directory.

Here are some examples:

Display Name: Augustus Cole

AddressBookFLN01

AddressBookFLN02

Display Name: High Priest Skorge

AddressBookFLN03

AddressBookFLN04

Display Name: Carmine, Benjamin

AddressBookFLN07

AddressBookFLN08

Display Name: Carmine, Anthony (COG)

AddressBookFLN05

AddressBookFLN06

Lync Server 2013: Update ‘Windows Fabric Patch’ could not be installed. Error code 1603

In August 2014, an update to Windows Fabric was included in the Lync Server 2013 Cumulative Update. There’s a list for the Windows Fabric updates:

Lync/SfB: Windows Fabric version List

During an update in our Lab, we got the following error message:

Also, an error was logged in Event Viewer:

Log Name:      Application
Source:        MsiInstaller
Date:          06/07/2015 13:49:18
Event ID:      1023
Task Category: None
Level:         Error
Keywords:      Classic
User:          GEARSAdministrator
Computer:      festd.gears.lab
Description:
Product: Windows Fabric – Update ‘Windows Fabric Patch’ could not be installed. Error code 1603. Additional information is available in the log file C:UpdatesWindowsFabricPatch.msp-FESTD-[2015-07-06][13-44-18]_log.txt.

So, for more information we need to check the log. In the log we find the line:

MSI (s) (BC:8C) [13:49:18:709]: Product: Windows Fabric – Update ‘Windows Fabric Patch’ could not be installed. Error code 1603. Additional information is available in the log file C:UpdatesWindowsFabricPatch.msp-FESTD-[2015-07-06][13-44-18]_log.txt.

In the same log, we see that the update failed to start the Performance Logs & Alerts (PLA) service:

CAQuietExec:  Start-Service : Service ‘Performance Logs & Alerts (pla)’ cannot be started due to the following error: Cannot start

Looking in the Services, the Performance Logs & Alerts (PLA) service was disabled, and as a result Windows Fabric updater couldn’t start it:

Right click on the service and select Properties:

Then change the Startup type to Manual:

Now we need to launch again the Cumulative Update Installer. The only update missing in the list is Windows Fabric:

Click Install Updates and, after it finishes, restart the server. After restart, all services should start normally.

Lync/SfB: Windows Fabric version List

In a previous post related to checking the Lync/Skype4B Server component version, we forgot to mention about Windows Fabric:

Lync Server Component Version using PowerShell (Windows Registry)

Skype for Business Server 2015 Component Version using PowerShell

When we published the Component Version PowerShell cmdlet for Lync Server 2010, we only included the Lync Server related components, because at that time Lync Server didn’t use Windows Fabric. Soon afterwards, Lync Server 2013 started to be dependent on Windows Fabric and this dependency is also present in Skype for Business Server 2015.

Another important fact is that Windows Fabric is not an Enterprise pool exclusive, since the Standalone pool will also use it.

In addition, we will update the PowerShell cmdlets in the above-mentioned articles so that they also include Windows Fabric. If we just want to check Windows Fabric, we need to run the following PowerShell cmdlet:

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |  ?{$_.DisplayName -like “Windows Fabric”} | Sort-Object DisplayName | Select DisplayName, DisplayVersion, InstallDate | Format-List

As reference, here is a table of Windows Fabric versions and the Lync Server 2013 Cumulative Update in which they were included:

Windows Fabric Lync Server 2013
1.0.1008.0 5.0.8308.738 (August 2014)
1.0.960.0 5.0.8308.0 (RTM)

And also for Skype for Business Server 2015:

Windows Fabric Skype for Business Server 2015
3.0.8549.9492 6.0.9319.0 (RTM)