Quantcast
Channel: UC Corner
Viewing all 54 articles
Browse latest View live

Calendar presence with CUPS and Exchange

$
0
0
Cisco Unified Presence Server (CUPS) has the capability to retrieve calendar (Exchange) status and populate to clients (CUPC). When your calendar status is "busy" in calendar, CUPC will display your status as "in a meeting".



To enable this feature, there are server-side configuration (CUPS/Exchange) and client side configuration(CUPC).

CUPC configuration

On CUPC side, you go to "File > Preferences > Status" and put a check mark on "Show me as 'In a Meeting' whenever my Exchange calendar shows me as busy".


Please note that when multiple 'presence' arrIve, CUPC can only display one of them. The priority, from high to low is: Phone Presence > Calendar Presence > Availability Status.

For example:

You logged into CUPC ==> Availability Status = "Available"
You're on the phone ==> Phone Status = "On the Phone"
Your calendar is busy ==> Calendar Presence = "In a Meeting"

In this scenario, CUPC will display the status as "On the Phone". You won't see "In a Meeting". However, you may move the mouse over a contact (or your self-status) to see all the presence.

In the screenshot below, you'll see the CUPC display its self-status as "On the phone". When you move the mouse over the self-status, you'll see "Online, On the phone, In a meeting" in the tooltip. This is how to explore the "hidden" presence from CUPC.


CUPS configuration

The most confusing (instead of difficult) part on CUPS is the SSL/Certificate configuration. CUPS can only talk to Exchange via HTTPS. Why is that?

That is because CUPS use an Exchange "service account" to read everybody's mailbox (calendar). If the communication was not encrypted (SSL), it would pose a threat to information security. A hacker could easily intercept the packets on network and retrieve everybody's (including CEO's) email and calendar.

With that said, here are the requirements on Exchange and CUPS to set up a SSL connection:
1) HTTPS needs to be enabled for OWA (Outlook Web Access)
2) The CA certificates of Exchange need to be trusted by CUPS.

Regarding #1, there's a catch. We'll discuss that in the "Exchange" section below.

Regarding #2, there are two catches -
A) Don't confuse the CA cert with identity cert.
B) Request address has to match certificate.

A) What is a "CA cert" and what is an "identity cert"?

For example, if your Exchange OWA has a certificate to identify itself as "owa.acme.local". This certificate is called "identity cert". Let say, this identity cert was issued by a CA (Certificate Authority) called "my-ca-server.acme.local". On the CA server, it has a certificate to identify itself. We call that cert a "CA cert".

It is the "CA cert" CUPS server needs to trust. In our example above, it's the "my-ca-server.acme.local" certificate needs to be uploaded to CUPS as "Presence Engine-Trust".

B) When you configure the "Outlook presence gateway" on CUPS, the address you put in there is the address CUPS will use to sent request to Exchange.

For simplicity, quite a few people just put the IP address of Exchange there. This is not going to work with SSL. For security, the request address has to match with the common name in the identity certificate. Usually, the certificate will identity the server in FQDN (e.g. owa.apps.local). Thus, you'll have to configure the same name in presence gateway configuration page.

Please note: I used the word "same name" instead of "FQDN". Because technically, you could configure any name in the certificate. Let's take a look at a couple examples:

Your OWA server IP = 192.168.1.100
Your OWA server FQDN in DNS = owa.apps.local

Example #1: You configured the common name in the OWA cert as "email.apps.local".

This won't work. Because:

If you used "192.168.1.100" in presence gateway configuration, it doesn't match "email.apps.local" in the identify cert.

If you used "owa.apps.local" in presence gateway configuration, it doesn't match "email.apps.local" in the identify cert.

If you used "email.apps.local" in presence gateway configuration, CUPS won't be able to resolve the name, because it's not in DNS.

Or even worse, you don't have DNS configured on CUPS so you can't use any FQDN.

Solution:
1) Add "email.apps.local" to DNS
2) Configure CUPS used DNS (use "set network dns primary" command)
3) Use "email.apps.local" in presence gateway

Example #2

In a lab environment, you may configure the certificate so it identifies the OWA server with common name "192.168.1.100" (though it's not a common practice, it's technically legit).

In this scenario, you may use IP address 192.168.1.100 in presence gateway config.

Whenever you made changes to presence gateway, don't forget to restart Presence Engine service.

Exchange

You don't have to be an Exchange expert. But you should at least know the following:

OWA, WebDAV, Receive-As permission, IIS certificate, CAS/Mailbox roles, authentication methods, Power Shell. (did I say you don't have to be an expert? :) )

OWA

OWA - Outlook Web Access, a web interface to access Exchange emails, calendars, etc. HTTPS needs to be enabled on OWA for CUPS integration to work.

OWA is actually a very useful tool for troubleshooting. For example:

When you tried to access OWA via HTTPS, OWA server will present you a certificate. You may view that certificate from web browser. You should be able to tell what the CA cert is from the web browser.

In the screenshot below, you open a web page to OWA. If you double-click the "lock" icon at the bottom of IE, you'll see a certificate viewer window. From the "certification" tab, you'll see the CA cert is "sametime.apps.local". The identity cert is "owa.apps.local".



Now you know that:
1) You need to upload "sametime.apps.local" cert to CUPS as "Presence Engine - Trust".
2) You need to configure "owa.apps.local" as the "presence gateway" on CUPS > Presence > Presence Gateway.

WebDAV

WebDAV is a protocol (on top of HTTP) to retrieve email/calendar information. See http://en.wikipedia.org/wiki/WebDAV for more details.

CUPS uses WebDAV for calendar integration. Microsoft obsoletes WebDAV on Exchange 2010 and advocates its own protocol EWS (Exchange Web Service). By the time this blog was being written, CUPS doesn't support EWS yet. Which means, CUPS doesn't work with Exchange 2010. I'm not sure if you can have an E2007 CAS in E2010 as a "WebDAV" gateway. I'll test it later.

Though WebDAV sits on HTTP/HTTPS, it's different from OWA. Don't assume WebDAV is working just because OWA was working.

Up to Exchange 2007, WebDAV was enabled by default. You don't have to explicitly enable it. Some people reported that WebDAV was not installed/enabled on E2007 with Win2008. This is not true. The "WebDAV Publishing" in screenshot below has nothing to do with CUPS integration. It's OK to leave it uninstalled.


Since E2007, Microsoft change the OWA URL from /exchange to /owa, but WebDAV URL stays the same (/exchange). This caused more confusions in troubleshooting.

When you troubleshoot CUPS calendar integration, you'll see CUPS always request to URL /exchange, which is the WebDAV URL. This is right and expected.

If you tried to "test" it by typing "https://owa.acme.local/exchange", you'll be redirected to "https://owa.acme.local/owa". This is also right and expected. For more details, please see: http://msexchangeteam.com/archive/2007/02/07/434523.aspx

The point is: there's no easy way to tell if WebDAV is working. But it's easy to tell if WebDAV is NOT working.

If you typed "https://owa.acme.local/exchange" and got some error like "401 unauthorized" or "503 service unavailable", WebDAV is more than likely not working. Though regular OWA might be working fine at this point.

If you got "401 unauthorized", you may take a look at http://msexchangeteam.com/archive/2008/02/01/447989.aspx. Default settings should work. If it doesn't work, most likely your authentication was expecting username in a different format. e.g. "domain\user" instead of "user".

If you got "503 service unavailable" or "500 internal server error", please make sure "ISAPI Extensions" is installed on mailbox server. See screenshot below. This usually happens if mailbox server and CAS are on two different servers.

Certificate

OWA/WebDAV relies on IIS to server HTTP request. It's IIS that presents certificate to SSL client.

By default, when you installed IIS, it'll generate a self-signed certificate. Unfortunately, this self-signed certificate doesn't work with CUPS, because it doesn't contain CA bit in its extension. Below is an example of the certificate that HAS the CA bit:


If your CA cert does not have CA bit, CUPS won't trust it. This is per RFC 2459. Don't blame Cisco on that.

Solution? Get a certificate from a CA (either external or internal) or use "makecert.exe" to create a self-signed cert with CA bit (see my book for details).

Receive-As Permission

In order to see everybody's calendar, CUPS needs an account with this permission. So the FAQ is: what's the minimum permission required?

The minimum permission required is "Receive-As" on the end user's mailbox.

Cisco documents said you need "View Only Administrator". That's not true. All you need is "Receive-As" permission on the end user's mailbox. Not more, not less.

How do we assign "Receive-As" permission to the account? I would recommend use Exchange Management Shell (command line).

Let say, in Active Directory, the service account used by CUPS is called "cupsexch". The end user account is called "JDoe" (full name: John Doe). The following command give "cupsexch" Receive-As permission on John Doe's mailbox:

Add-ADPermission -Identity "John Doe" -User cupsexch -ExtendedRights Receive-As
Of course, you're not going to repeat this command for 1000 users. The better way to do it is to assign permission on a "container" that contains the end users' mailboxes.

In Exchange, the "container" for mailboxes is "Mailbox Database". The container for "Mailbox Databases" is "Storage Group". You may have multiple databases in a storage group. And you may have multiple storage groups in your Exchange environment.


You may assign permission at different levels:

End User Mailbox
Mailbox Database
Storage Group

Since "Storage Group" is the highest level of "container", we usually assign permissions on storage group level. Permissions would populate down to end user mailboxes. This "population" takes some time (from 30 minutes to hours).

The command to assign permission on "First Storage Group" is as below:

Add-ADPermission -Identity "First Storage Group" -User cupsexch -ExtendedRights Receive-As
What if you have multiple storage groups and want to automate the process? You may use the command below:

Get-StorageGroup | add-ADPermission –user cupsexch -ExtendedRights Receive-As
"Get-StorageGroup" command will get all storage group names from system and feed the names to "Add-ADPermission" command.

The command to verify permission is as below:

Get-MailboxPermission jdoe -user cupsexch | Format-Table -autosize
This command will display "cupsexch" permission on jdoe's mailbox. Anything after the pipe sign (|) is just for formatting purpose.

If you got nothing, that means "no permission". If you assigned the permission on higher containers, it might not have flowed down yet.

If the permission has been populated, you should see something like the screenshot below:


"AccessRights = {FullAccess}" means "cups7exch" account has permission to read "John Doe's" mailbox.
"Is Inhereited = True" means this permission was inherited from some higher level containers.

This is the only reliable way to test permissions.

Cisco documents described a test method which use OWA to test the URL "https://owa-address/exchange/some_user/calendar" with the service account. This method may or may not work depending on other permissions you configured for the service account. For example, if you are like me to give minimum permissions, Cisco test method would yield a "no permission" page as below. However, CUPS calendar works just fine with the "minimum permission".


Troubleshooting

If calendar integration doesn't work, "Presence Engine" (PE) logs are the only traces we need.

Ideally, we want the logs since PE started. Thus if you could, do the following:

1) Restart PE
2) Wait unti PE started and stabilized
3) Log into CUPC
4) Collect PE logs since the time of restart
5) Use WinGrep to search for keyword "owa". It'll give you all message regarding OWA transactions.

Following are some common problems:

"Certificate not trusted"

This could be caused by the following:

  • The name configured in "CUPS > Presence > Presence Gateway" does not match with the name in identity certificate. (e.g. IP address vs. FQDN)
  • CA certificate was not imported as "Presence Engine - Trust". If there are multiple CAs in the certificate chain, all of them need to be imported.
  • CA bit was not set (usually happens on IIS self-signed certificate)

"440 Login Timeout"

When FBA (Form-Based Authentication) was enabled, you'll see one "440 login timeout" in PE log for each transaction. This is normal. If you keep getting "440 login timeout", it usually indicates an authentication issue.

To reveal the nature of the problem, it's recommended to change "Form-Based Authentication" to "Standard Authentication" on "/Exchange" virtual directory on OWA. See screenshot below:


Changing this will not change the way or feel of regular OWA logon. It's just change the authentication method for WebDAV. (you'll need to reset IIS by using command "iisreset /noforce")

"401 Unauthorized"

This is usually caused by permission issue. See "Receive-As" permission configuration above for testing method.

Another testing method would be configuring an end user's credential on presence gateway. An end user's credential would definitely have permission on his own mailbox. If you log in to CUPC with that end user account, calendar integration should work. This is a good way to do "problem isolation".

To be continued...

Client Convergence

$
0
0
In the "Unified Communication" world, you might have many different client software installed on your computer -

  • Click-to-Call for making calls easy
  • IP Communicator to be a soft phone
  • Video Advantage to be a "video add-on"
  • Personal Communicator to be an IM and presence client
It's kind of "un-unified" with so many different things. Fortunately, your voice was heard. In the future, you might have a truly "unified" client, which does everything with one piece.

Client Service Framework - CSF

$
0
0
History

Once upon a time, Cisco built a client software called "Cisco Unified Personal Communicator" (a.k.a. CUPC). CUPC has many features like Rich Presence, Instant Message, Desk Phone control (CTI), Soft Phone (SIP), Voicemail (IMAP), Web Conference, etc.

Later on, when Cisco built other client software (such as plug-in for Sametime Connect, plug-in for MOC), developers realized that there were many commonalities between those software and CUPC. Instead of "reinventing the wheel", they could just reuse the existing codes in CUPC.

However, "reuse" is not as simple as it sounds to be in software development. You'll have to "shape" the codes to fit into your specific software. To make the work easier, they decided to "extract" the codes from CUPC and standardize it. So any other software teams can easier build their application on top of it. This "extracted", "standardized" component is called "Client Service Framework". (if you have ever heard about ".Net Framework" from Microsoft, the concept is pretty similar).

The idea is: CSF has all the common feature built in and provides unified interfaces to upper applications (such as CUCIMOC, CUPC 8, CUCI Connect, etc.).

The code of CSF is usually referred as "core" (e.g. "core log" of CUCIMOC).

Because of the history, we sometimes see the "marks" of CUPC. For example, CUCIMOC dial rules are put in the "CUPC" folder on TFTP.

Applications using CSF

Right now, applications using CSF are:

  • CUCIMOC (for Microsoft Office Communicator)
  • CUCI Connect (for Webex Connect)
  • CUPC 8.0

Confusions

To use the Cisco Unified Personal Communicator soft phone feature, we have to create a device in CUCM. The device type happened to be called "Cisco Unified Personal Communicator". This is really a BAD idea. If I were the decision maker, I would name it with some netrual name like "Cisco SIP soft phone".

Because the device type has the same name as the client software, many people (including Cisco TAC engineers) thought it was required for CUPC to work. More confusion when it comes to licensing and troubleshooting. Such as:

  • "I licensed UPC on CUCM > System > Licensing > Capability Assigments. That took 1 DLU. But when I ran the license calculator, the 'Cisco Unified Personal Communicator' is taking 3 DLUs"
  • "My CUPC is not registering""Did you mean the CUPC on your desktop(Windows XP)? Or the CUPC on CUCM?"

They made the same mistake again with CSF. To use the soft phone feature of CSF, you have to create a device in CUCM. The device type is called "Client Service Framework". Again, if I were the decision maker, I would name it with a neutral name like "Cisco SIP soft phone (2nd Generation)".

The point is: don't confuse one of the features with the whole piece. You don't need to configure CSF device in CUCM to get the CSF worked on client applications. Without CSF device on CUCM, the only feature you're missing is soft phone.

Interface

As you can guess, CSF does not have a user interface. User interface was provided by the upper layer applications such as CUCIMOC, CUCI Connect, CUPC 8 etc.

The only way you can "see" CSF is to use Windows Task Manager. You'll see a process called "cucsf.exe". This process usually starts up and close down with the upper layer applications (such as CUPC 8). But not every application does the same thing. For example, CUCIMOC does not shutdown CSF when you close MOC. If you want to kill or restart CSF for whatever reasons, you'll have to kill it from Task Manager.

Configuration

In current version of CSF, there's no GUI to configure it. All configuration was done via Windows registry.

Depending on your deployment, configuration data could be in either one of the following locations:

  • HKEY="HKCU\Software\Cisco Systems, Inc.\Client Services Framework\AdminData"
  • HKEY="HKCU\Software\Policies\Cisco Systems, Inc.\Client Services Framework\AdminData"

If both keys exist, "HKCU\Software\Policies\Cisco Systems, Inc.\Client Services Framework\AdminData" takes priority.

For centralized management, you may use a logon script (BAT) or a group policy to update the client's registry.

Registry key requirement varies between applications.

For CUCIMOC, registry key info as below: http://www.cisco.com/en/US/partner/docs/voice_ip_comm/cucimoc/7_1/english/integrat/guide/config_clients.html. CUCIMOC also provides a sample BAT file and REG file for your convenience. Those sample files are zipped into cucimoc-Admin-ffr.x-y-z.zip (x-y-z is the version of CUCIMOC. e.g. cucimoc-Admin-ffr.7-1-3.zip)

Limitations

  • Application Dial Rules (ADR)

Current version of CSF does not have an interface to "dip" into CUCM database to retrieve ADRs. As a workaround, Cisco provides a COP file. Whenever you run(install) the COP file on CUCM, CUCM will generate XML files in TFTP folder to reflect the latest ADRs. Then CSF needs to be restart to download those XML files. For details, see: http://www.cisco.com/en/US/partner/docs/voice_ip_comm/cucimoc/7_1/english/integrat/guide/config_servers.html#wp1054388

This means, whenever you make changes to CUCM > Call Routing > Dial Rules, you'll have to run the COP file and restart CSF.

  • Soft Phone

CSF soft phone is a SIP phone. It has quite a few limitations comparing with SCCP (skinny) phones. For example, the following features are not supported on SIP:

  • CUVA support
  • FAC/CMC support
  • MLPP target device
  • Direct transfer
  • Hold tone

... to be continued

Place to ask questions

New book and Cisco Live

$
0
0
New edition of the book has been published. Use coupon code "SHOWERS" to get 10% off.Use coupon "FREEMAIL305" to save on shipping. (Offer ends April 30, 2010)

It covers new topics like: XMPP, Jabber, CSF (Client Service Framework), Message Archiver, Persistent Chat, 3rd-Party Compliance, external database, etc.

If things worked out, I'll go to Cisco Live (Networkers) at Las Vegas from Jun 28 to July 1. I'll be at the Technical Solution Clinics. See you there.


Make a non-bootable ISO image bootable

$
0
0
For whatever reason, Cisco only post "non-bootable" ISO images on CCO for download. In some urgent situations, you might need a bootable disc to recover the system (or your client/boss would shoot you in the head). Here's the procedure to make a non-bootable ISO image bootable.

Before you continue, be aware that this procedure is NOT approved by Cisco. Neither Cisco nor I will be responsible for any loss caused by this.

Any bootable disc has to follow "El Torito" specification. No exception for Cisco discs. The only difference between a bootable disc and non-bootable disc is the "boot sector". Thus the solution is very simple - extract the boot sector from a bootable disc and inject it into a non-bootable disc.

The boot sector is a very small file (usually less than 10k). And the boot sector is usually content independent (i.e. you may extract the boot sector from CUCM 7.1.3 and inject it into 7.1.5). You may save the boot sector on your USB thumb drive and keep it handy.

To extract/inject the boot sector, you need some disc image tools like UltraISO. (You may also use other ISO tools with similar features)

Step 1: Get the boot file

There are two ways to get a boot file - extract from a bootable DVD's boot sector, or extract from the DVD's file system (regardless bootable or not).

Option 1: Extract the boot sector from a bootable DVD

Put a bootable CUCM disc into the DVD drive and launch UltraISO. Go to menu "Bootable > Extract Boot File from CD/DVD..."


Save the file to your hard drive as a "boot info file" (bif). In our example, we call it "boot.bif"


If you couldn't find a bootable DVD, you may also get the file from the non-bootable DVD itself (yes, the file was there.  It's just not at the boot sector).

Option 2: Extract from DVD's file system (regardless bootable or not)

The boot file is available on any CUCM DVD, regardless bootable or not.  It is located in the "isolinux" folder.  File name is isolinux.bin.





Step 2: Inject the boot file

Open the non-bootable image in UltraISO. Go to menu "Bootable". Make sure "Generate Bootinfotable" was checked. Then choose "Load Boot File...".


Choose the boot file we saved before (boot.bif or isolinux.bin).


Note that the image type changed to "Bootable".

Now, you may go to "File > Save As" to save the bootable image to an ISO file. Then you may burn the ISO to a disc with your favorite disc burner software.



Test mobility feature without PSTN

$
0
0
The core of the mobility feature is "Remote Destination". Per SRND http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/srnd/7x/mobilapp.html#wp1043943,

"Remote destinations must be Time Division Multiplex (TDM) devices or off-system IP phones on other clusters or systems. You cannot configure IP phones within the same Unified CM cluster as remote destinations. "
So if you'd like to test mobility feature without involving PSTN gateways, you may build another CUCM cluster (with VMWare, it should be just another VM). Then you may create ICT (Inter-Cluster Trunk) between two clusters. You may use the IP phones on another clusters as "Remote Destination". With this setup, you may test the following features:

1) Mobile Connect (SNR)
2) Enterprise Feature Access (EFA)

You won't be able to test the following feature:

MVA (Mobile Voice Access), because it requires IVR function of the voice gateway.

If you have a voice gateway but does not have T1/PRI, you may use CME to simulate PSTN phones.

Unified Communications Manager (CallManager) Upgrade Tool

$
0
0
It seems that when planning a Cisco Unified Communications Manager (CUCM) upgrade, the amount of releases are sometimes dizzying! Can I direct upgrade or not? Do I need to PUT (product upgrade tool) for a license and CD? How do I match the release ID with the CUCM version ID (7.1(3a) vs. 7.1.3.20000-2). I know that pain and Cisco has created a tool to help us with the process. Check out the link here.

With this tool, you can input your version (supports only 5.1(3)+) and which version you want to migrate to. It will let you know if you can upgrade directly and what the licensing implications are. As a customer looking at upgrading to 8.x, this tool is a terrific resource for upgrade planning. Check it out!

-MW

See ya in Las Vegas

$
0
0
I'll be leaving for Las Vegas Sunday afternoon.

During Cisco Live (Networkers), I'll be in the Technical Solution Clinic (Unified Communications). I'll attend the CCIE party at VooDoo Lounge Tuesday (June 29).

See you guys there.

By the way, I'll bring two copies of my "Deploying Cisco Unified Presence" book. For those who need it, just drop by and take it. :)

7/1/2010 13:30 PDT - Whoever brought me a dessert at Technical Solution Clinic, thank you very much! I really enjoyed it. (though I don't know who it was) :)

Michael

Happy birthday, CUPC 8!

$
0
0
Two months after CUPS 8 was released, Cisco finally releases the next generation of communication client - Cisco Unified Personal Communicator 8.

With XMPP, now CUPC can do:

  • Group Chat
  • Persistent Chat Room
  • Chat History
  • Message Archiving and Auditing
  • Federation with external IM systems (like GoogleTalk, Sametime, Webex, OCS)
  • Integrated HD Video with soft phone or hard phone

Happy Birthday! :)

What is XMPP and why it is important in Unified Communication

$
0
0
To get a complete understand of XMPP, I recommend the book "XMPP: The Definitive Guide".

In short, XMPP is a protocol (like SIP). XMPP was majorly used for presence and Instant Messaging. But it is being expanded to other areas like call signaling control.

XMPP is getting more and more popular in Unified Communication products like CUPS (Cisco Unified Presence), Cisco Quad (SharePoint-like product), Contact Center, etc.

Since it's a direct competitor with SIP, frequently asked questions would be:
  • Shall I learn XMPP?
  • Will SIP be replaced by XMPP?
For the first question, Yes. You definitely should learn XMPP because
  • XMPP was built from ground to support presence and IM
  • XMPP is "eXtensible"
  • XMPP is being (or has been) adopted by many big vendors like Cisco, Microsoft, Google, etc.
For the 2nd question, it really depends. On call control and telco interfacing, SIP will still dominate for quite a while because the install base and impact of change.

Anyway, you should take an hour or two to understand XMPP so you can understand what it can do (or do better) on different systems.

Voice IE: Mysterious phone registration issue

$
0
0
It's a hub-and-spoke topology - CUCM was at the HQ site while two branches BR1 and BR2 are connected to HQ router via Frame-Relay.

One of the phones on BR2 was not able to register to CUCM. The phone's screen displays "Registering".

Since the other phone on BR2 was able to registered, I thought the problem was specific to the phone. Thus I checked the phone configuration, reset the phone, restore it to factory default, re-located it to HQ site, etc.

The phone was able to register while it's on HQ. But it doesn't work while it's on BR2. So it seems to be site specific. However, if it's site specific, why the other phone on the same site could register?

Since the network path was "phone -> BR2 router -> Frame Relay -> HQ router -> CUCM", I focused on every elements on the path. The phone was able to get the correct IP config (subnet mask, default gw, TFTP) from DHCP. I wiped out the router configuration and reconfigure it. I deleted the phone from CUCM and re-added it. Reloaded CUCM and routers. Still no avail.

I pinged the BR2 phones from CUCM CLI. I can ping phone1 but not phone2. Then I realized it HAS TO be the network. But how come? For two hosts in the same subnet, if I could ping one but not the other, it HAS TO be the host's issue. But I already proved phone2 was working fine when it's on HQ site.

With the help of "debug ip packets detail", I found out that HQ router chose different paths for phone1 and phone2. But I didn't configure host routes. How could this happen?

"show ip route" discovered that BR1 was advertising same route as BR2. They both claimed to have the BR2 phones' subnet. Since they are equal cost routes, HQ router will load-balance the two routes (uses BR2 to reach phone1, then uses BR1 to reach phone2). That's why phone1 is always reachable while phone2 is always unreachable.

By reviewing BR2 router's config, I found out that I fat-fingered the IP address for the data VLAN (with the address of BR2 voice subnet).

This kind of mistake could easily cost you couple hours in the lab unless you had experienced it before and have some routing knowledge.

Some tools for home lab

$
0
0
1) Pegboard - A board with holes so you can hang things on it.
So you can hang IP phones like this:

2) Remote Power Switch - allows you to power on/off device remotely through network.

I got NPS 115 from eBay for about $40. I used it a lot when I'm away from home. So I can practice from office or hotel room.
Please note that this one has 8 outlets and allows you to power on/off devices (routers/switch) individually. Some cheaper ones (like $20) have only one outlet. You have to power everything on or off at once.

Bypass CUCM/Unity hardware check

$
0
0
I was trying to install the UC 8.6.1 suite on my VMware ESXi.  I'm pretty savvy at VMware and UC, thus I didn't bother to download the OVA template from Cisco.  I created a VM with 75G hard drive and 2G RAM.

I had no problem getting UCM installed.  However, when it came to Unity Connection, I realized that the option was not presented on  screen like it did in previous versions (see below).


Maybe there's some magic in the OVA template.  So let's download it.

Open up the OVA file with Notepad.  You'll see that the minimum hardware requirement is 4G RAM and 160G hard disk.


If you're just testing it in the lab and want to save some hard disk space, you may choose "Thin Provision" while deploying the OVA.  VMware will dynamically allocate space as needed up to 160G.  ie. if the initial install occupies 75G, it'll only takes 75G physical space (even though the hard disk "looks like" 160G).  This is not recommended for production environment for performance consideration.


But if you're the kind of people that like to control everything, this is pretty annoying.  Why can't it just install on a 75G disk?  Ya, why not?  Let's hack it.

On the installation disc, look for the folder "Cisco/Install/conf".


Open the file "callmanager_product.conf" and search for "Unity Connection VMware rule".  A couple lines below, you'll see the line "NOT,   VMware,     *,      *,    *,      *,     *,      *,    *,      *".  Change it to "VAL,   VMware,     *,      *,    *,      *,     *,      *,    *,      *".  This will allow any virtual machine specification.


You may do the same if you want to use a physical server.  For example, if you have an old 7825H server and want to install Unity Connection 8.6.1 on it, just change the line "NOT,    7825H,     *,      *,    *,      *,     *,      *,    *,      *" to "VAL,    7825H,     *,      *,    *,      *,     *,      *,    *,      *".

You may also change the sections for CUCM and CUCM BE so they have less restricted requirements.

Save the file to the disc (image).  Boot from it.  Now you see the Unity Connection is available as shown below.


By the way, UC 8.6 supports VMTools (finally).  However the VMTools bundled with the install might not be up to date.


From CUCM CLI:


You may update the version from VM client.


The installation will take a while.  During install, you'll see the VMTools status as "not running".  This is normal.


When the install is completed, you'll see the version is updated.


From CUCM CLI:

Root Access on Linux-based UC appliances

$
0
0
There are many posts on Internet teaching you how to get root access on CUCM.  This is not a secret.  Since CUCM is Linux-based, the method is pretty straight forward - use a Linux boot CD to boot into rescue mode and modify the relevant files.  Here's a simple walk through.

Assuming CUCM was already installed.  Boot the box with a Linux installation CD (e.g. RedHat).  Type "linux rescue" in the boot prompt.


Chose language.  Default is 'English':


Choose keyboard.  Default is 'US':


We don't need to set up network.  Thus choose 'No' here.


Choose "Continue" to mount the CUCM file system.


The following message is telling you that the CUCM file system has been mounted under /mnt/sysimage.  If you want to map the root directory to the CUCM file system (which is recommended), you may use command "chroot /mnt/sysimage".


Below are the commands and explanations.


chroot /mnt/sysimage

This is to map the root directory to CUCM file system.

cd /etc

Change the working directory to /etc, where most of the system configuration files are stored.

rm securetty

Remove file "securetty" to allow remote connections with root.

passwd root

Reset (change) password for the root user.  Type a password that is easy for you to remember.  Retype it to confirm.  If the password was changed successfully, you'll see the prompt "passwd: all authentication token updated successfully".

Notes:
  • If you typed a simple password, you might get a warning like "BAD PASSWORD: it is based on a dictionary word".  Just ignore it and retype to confirm.
  • There's no screen display for the password you're typing.  Type carefully.

The following steps require some basic knowledge of the vi editor.  If you're not familiar with vi, please search Internet for vi commands help.

vi passwd

Change the passwd file so the root user has a shell (command line interpreter) to use.  Use vi commands.  Change the line
 To

Save and exit file.

For those who are not familiar with vi, here are the command sequence (case-sensitive):
  1. Type /s to search for character 's'
  2. Type D to delete to the end of line
  3. Type A to enter append mode
  4. Type bin/bash to set the shell
  5. Press ESC key (it's a key on the upper-left corner of your keyboard) to exit append mode
  6. Type :wq to save and exit file.

vi ssh/sshd_config

Change the sshd_config file so you can SSH as root (it's disabled by default).  Use vi commands.  Change the line
To
Save and exit file.

For those who are not familiar with vi, here are the command sequence (case-sensitive):
  1. Type /Per to search for the word begins with 'Per'
  2. Type X to delete the letter on the left (which is '#' in this case)
  3. Type :wq! to save and exit this read-only file

Back to command prompt and type exit command twice to reboot the system.


Use a SSH client (such as putty) to test.  You should be able to SSH into CUCM with root account.

This method applies to all Linux-based appliances such as Unity Connection, CUPS, CER, UCCX (Linux version), etc.


Database Access

$
0
0
Many UC appliances (like CUCM, CUPS, etc.) use database to store configuration.  For security and supportability reason, the regular CLI provides limited access to database.  However, if you could get root access to the box, you would have full access.


su - informix

Change user role to 'informix' which is a built in Linux user to access the Informix database.

dbaccess $(dblutil -c) -

dbaccess is a SQL client to access Informix database.  'dblutil' is a DB role.

select * from licenseinfo

A standard SQL command to view all records in 'licenseinfo' table.

Notes:
  • Press Ctrl-D to execute SQL commands
  • Press Ctrl-C to exit
  • On some terminals, you may have to press Delete to Backspace
If you want to know the relationship between different database tables, refer to "Data Dictionary" on CCO Docs.

To list all tables:
select tabname from systables where tabid > 99 and tabtype = "T"

Grab a some books like "SQL for Dummies" and test in your lab.

I wondered what does this do?  ;)

Modify License MAC

$
0
0
Cisco used to bind license file to physical MAC address.  Now, it moves to "License MAC", which is a hash value of multiple system parameters such as NIC speed, NTP, DNS, hostname, etc.

To view the license MAC, you need to install the system first (CUCM, UCCX, CUPS, etc.).  Then use the "show status" command.


This is somehow inconvenient:

1) You cannot get the license file before finishing the installation.

I personally prefer to get everything ready before starting the installation, such as IP address, hostname, password, license file, installation media, etc.  You could run into lots of surprises when trying to get the license file.

2) When the system parameter was changed, the license file yield invalid.

For example, you add/change DNS server settings on the system, which is pretty common during system integration.

It would be better if you could dictate what license MAC the system use.  You may also use some schema like: AABBCCDDEEFF, where AA is the product code, BB is the site code, CC is the node number, DD is the version number, etc.


In the example above, the "License MAC" was changed to "abcdef123456".

Since you can use whatever License MAC you like, you may:
  • Get the license file before the system was installed
  • Keep using the same license file after system parameters was changed (such as DNS)
To specify the license MAC, you need to have root access to the system.  Then you'll modify the file /usr/local/bin/base_scripts/LicenseMac.sh.  To the bottom of the file, replace the line

FinalString=`expr substr "$SHA1sum" 1 12`

to

FinalString="abcdef123456"

In newer versions, you might have to change the /etc/selinux/config file so that selinux runs in permissive mode.
Reminder: Don't be evil.  ;)

CET Tool for UCCX

$
0
0
Back in the age of Windows-based CallManager (4.x and before), UCCX (a.k.a CRS) stores its configuration in CallManager DC Directory.

When CallManager moves to Linux based (CUCM 5.0 and above), it removes the concept of DC directory.  Thus UCCX has to store its configuration on UCCX server in XML files.

Cisco provides a tool called CET (Configuration Editing Tool?) to edit those configurations.  The tool is supposed to be used by Cisco TAC only.

For Windows-based UCCX (7.x and before), you may find the CET tool on UCCX server C:\program files\wfavvid\cet.bat.  Just the the cet.bat file.

For Linux-based UCCX (8.0 and above), you may find the CET installer on the UCCX installation DVD (\Installer\CetTool\CetTool.exe).  Or download from an already-installed UCCX server http://142.100.64.14/uccxinstalls/CetTool.exe (case-sensitive).  You'll have to install it on a Windows workstation.

You may use CET tool to modify the configuration of UCCX, such as removing license file or reset the system back to before-initialization state (for password recovery purpose).  Please note that on Linux-based UCCX, you'll need a root credential to use CET tool.  Either get it from Cisco TAC or follow instructions here.

You may also modify the configuration without CET tool.  But it requires some reserve engineering.

For example, you want to set the UCCX 8.5 back to FRESH INSTALL state.  You may edit the XML file in /opt/cisco/uccx/ClusterData/default/com.cisco.crs.cluster.config.AppAdminSetupConfig.  Look at the blobValue.  It's encoded in ASCII.


Translate that with the ASCII table:




You'll get:

46 = F
52 = R
45 = E
53 = S
48 = H
5F = _
49 = I
4E = N
53 = S
54 = T
41 = A
4C = L
4C = L

If you want to set the value to a specific string, you'll translate the string into ASCII code and put it in blobValue.

UCCX Demo License

$
0
0
Disclaimer: The following information is for research and experiment purpose only.  It's not the author's intention to circumvent Cisco's licensing.  Neither does the author encourage software piracy.  You cannot hold the author responsible for any disputes/lawsuits caused by this information.  If you disagree, please stop reading.

UCCX installation DVD comes with some demo licenses.  Unfortunately, unlike CUCM, UCCX demo license expires in 30 days.  And you'll get the warning every time you log into UCCX administration page.



If you look at the NodeConfig in CET Tool, you'll see the "Grace Period Starting Date" and "Demo License Flag".



To stop the demo license from expiring, three things need to be done:
1) "Demo License Flag" should be "false"
2) "Grace Period Staring Date" should be blank.
3) Most importantly, your license MAC has to match the MAC in license file (which is "FFFFFFFFFFFF" in this case).

For #1 and #2, you need to modify the XML file in /opt/cisco/uccx/ClusterData/default/com.cisco.crs.cluster.config.NodeConfig.  Change the last 16 characters in the block to 0 (zero).

First 8 characters (4 bytes) is the "Grace Period Starting Date" in epoch time format.  Second 8 characters (4 bytes) is the "Demo License Flag" (1 stands for "true" while 0 stands for "false").

Before:

After:

Then change the License MAC to "FFFFFFFFFFFF".

Before:

After:

Reboot the system to take effect.  You'll notice that you don't get the license expiring warning when you log into UCCX admin web page.

Restart CET just to verify the changes we made:

Users and Authentication for Cisco UC

$
0
0

History


Cisco UC (Unified Communication) family has many members - CUCM (CallManager), Unity, UCCX (IPCC Express), CER, CUPS, etc.

Previously, Cisco UC products are running on Microsoft Windows platform as regular applications.  Since from CUCM 5.0, Cisco starts migrating UC products to RedHat Linux platform.  For security and supportability consideration, Cisco decided to lock down user access to Linux OS.  Users can only access the application via web interface or a Cisco tailored CLI (Command Line Interface).

For redundancy and load balancing, there might be multiple nodes (servers) in a cluster.  For example, there are usually Publisher and Subscribers in a CUCM cluster.  Different nodes will communicate with each other for database synchronization and "Change Notification".  For security, these communications needs to be encrypted and authenticated.

Because of historical reasons, there's no unified structure for user management and authentication across UC products.  Each product has its own way.  Cisco is working hard to unify it but not quite there yet (as of today).

Passwords during Installation


We'll use CUCM as example to explain passwords during installation.  There are three usernames/passwords you may need to enter during installation.  Please note that even though you may use same username/password for all of them, they are actually three different credentials.  Changing one of them will not change the others.  They are stored in different places for different purposes.

1. Platform Administrator



"Platform Administrator" is also known as "OS Administrator" or "CLI Administrator".  This is a Linux user stored in /etc/passwd file.


"Platform Administrator" is used for command line interface (CLI), OS Administration and Disaster Recovery web interface.




Platform Administrator's password will NOT be synchronized across nodes.  It can be changed from CLI using "set password user admin" commands. (ref: http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/cli_ref/8_6_1/cli_ref_861.html#wp156897)



2. Security Password



If  you're installing subscribers, you'll see a different screen as below.  You should enter "First Node" (Publisher's) security password instead of an arbitrary password.



Security Password is stored in /usr/local/platform/conf/PlatformConfig.xml file.



Security Password is used by the system to secure communication between nodes.  Once it's set, you rarely "use" (type) it.  The only occasion you use (type) it is when you adding a new node (e.g. add a new CUCM server to the cluster, add a CUPS server to the clusters, etc.)

Since security password is used for inter-node communication, it needs to be identical on all nodes.  i.e. if you should change the security password, you should change it manually on all nodes.  Security password will NOT be synchronized across nodes.

To change security password, use "set password user security" command (ref: http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/cli_ref/8_6_1/cli_ref_861.html#wp156897)


 3. Application Administrator


Application Administrator is the most frequently used credential.  You use it for daily administration (through "CM Administration" web page).

Application Administrator is stored in database (in "applicationuser" table).


Database will be synchronized across different nodes.  Thus application administrator password will be synchronized as well.  To change application administrator password, go to CM Administration > User Management > Application User.


Application User vs. End User


If you ever noticed that on CM Administration > User Management, there is a "Application User" menu and a "End User" menu.  What's the difference?


"Application Users" and "End Users" are two different sets of user stored in separate database tables - "applicationuser" and "enduser".


Why two sets of user?  Why not just one set?  Good questions.

Linux and Windows only have one user repository.  For Linux, it's /etc/passwd file.  For Windows, it's C:\Windows\System32\config\sam file.  Why Cisco UC has two user tables?

It's really a choice of the Cisco developers'.  Yes, it's possible to use one table for all users.  But in Cisco developers' opinion, it complicates the design of the system.

As the name indicates, "Application User" credentials are supposed to be used by application instead of a human being.  For example, an AXL credential could be used by UCCX, CUPS or other application to access the CUCM database.  This AXL credential is used by application only, not by a human being.

Some of the credential policies might not apply to "Application Users".  For example, we might want end users change their password every month for security concerns.  However, we don't want the same policy apply to application users because those passwords are less likely to be leaked.

CUCM has the option to synchronize LDAP (e.g. Active Directory) users into "enduser" table.  If there should be conflicts in LDAP and the database table, things would be complicated.  For simplicity and safety, Cisco decided to have a separate database table called "applicationuser".  "applicationuser" table will not synchronize with LDAP.  Nor will it use LDAP authentication.

Shall I use "Application User" or "End User"?


Generally speaking, if the credential is used by human being, it should be in the "End User" table (either created manually or synchronized from LDAP.  For example, system administrators, call center agents, phone users, UC application users, etc.

In contrast, if the credential is used by software for internal communication purpose, it should be created in the "Application User" table.  For example, AXL, CTI, JTAPI credentials.

One exception is the "System Administrator" account.  You should always have a backup account in "Application User" on top of the accounts in "End User".  This is especially critical when you're using LDAP authentication.  If for some reason, CUCM was not able to communicate with LDAP server, none of the "End User" accounts would be able to authenticate.  In this situation, you need an "Application User" account to get into the system.  Remember "Application User" is exempt from LDAP authentication.


Can I have identical user ID in "Application User" and "End User"?

No.  Even though "Application User" and "End User" are two separate tables, they are treated as one big pool of users.  User ID needs to be unique across "End User" and "Application User".

For example, if you already have a user named "John Doe" in "Application User", you cannot have "John Doe" in "End User".  This is a commonly seen problem in CUCM LDAP synchronization.

Will "Application User" and "End User" be synchronized across different nodes?

Yes.  "Application User" and "End User" are part of CUCM database.  They will be synchronized to all CUCM nodes within the same cluster.  But database will not be synchronized to different types of nodes.  i.e. CUCM database will not be synchronized to UCCX, CUPS, etc.

Password Recovery

To recover "Application Administrator" password, use CLI command "utils reset_application_ui_administrator_password" (ref: http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/cli_ref/8_6_1/cli_ref_861.html#wp222750)

To recover "Platform Administrator" or "Security Password", follow procedure on http://www.cisco.com/en/US/partner/docs/voice_ip_comm/connection/9x/os_administration/guide/9xcucosag020.html#wp1053218

User Authentication

User authentication is probably the most confusing part in Cisco UC world:
  • End User vs. Application User
  • Local Authentication vs. LDAP Authentication
  • Different applications (Web Page, RTMT, Extension Mobility, Voicemail, Agent Desktop, CUPC/Jabber Client)

Authentication Target

Depending on what you're trying to access, the system (e.g. CUCM) will authenticate against different user repositories (file, database table, LDAP).

CLI, "OS Administration" or "Disaster Recovery" web page

  • CLI (Command Line Interface)
  • "Cisco Unified OS Administration" web page
  • "Disaster Recovery System" web page
When you're trying to access the above, the system will authenticate against file /etc/passwd, which holds your "Platform Administrator" account.  This does NOT involve any "Application User", "End User", or LDAP.

RTMT, "CM Administration", "Unified Serviceability", "Unified Report", "User Options" web page

  • RTMT (RealTime Monitoring Tool
  • "Cisco Unified CM Administration" web page
  • "Cisco Unified Serviceability" web page
  • "Cisco Unified Reporting" web page
  • "Cisco Unified CM User Options" web page
When you're trying to access the above, the system will authenticate against CUCM database ("applicationuser" table and "enduser" table).  The system may also authenticate external LDAP server (e.g. Active Directory) if "LDAP Authentication" was enabled on CUCM.

Diagram below shows the authentication flow chart.



Please note that having the right username/password does NOT guarantee your access.  Appropriate permissions also need to be configured inside the system to grant you access.  For example, you need to put a user into "Standard CCM End Users" group before he can access the "User Options" page.

Complications and Confusions of different Applications

As mentioned before, different applications (CUCM, UCCX, CUPS, etc.) are developed by different groups.  Unfortunately, at the time when the applications were first developed, there's no unified architecture.  Now Cisco labels them as "Unified Communication Applications".  However, lots of work still needs to be done before they are really "unified".

UCCX

UCCX (Unified Contact Center Express) is also known as IPCC Express or CRS (Customer Response System).

Since from version 8.5, UCCX was migrated to Linux platform (just like CUCM).  The installation process is very similar to CUCM.  However, the use of "Application Administrator" is quite different.

To explain the reason behind the design, we need to travel back to the Windows time.

When CallManager was based on Windows, there's only one user database - end users.  UCCX relies heavily on CallManager.  Instead of managing a duplicated set of users, it makes sense for UCCX to "import" users from CallManager and make them call center agents, supervisors, administrators, etc.  All UCCX authentication was referred from UCCX server to CallManager server via AXL protocol.

Now here comes the "chick-and-egg" question.  How do we get into UCCX to configure the AXL parameters?  In order configure AXL parameters, we need to log into UCCX administration web page.  However without AXL being set up, how do we authenticate the administrator credential?

UCCX developer found a "creative" way (which was not a good idea in my opinion) - The first time you log into UCCX Administration web page, you use a temporary credential "Administrator" with password "ciscocisco".  After you logged in, you do all kinds of "initialization" such as upload license, configure AXL parameters, etc.

After AXL parameters were configured, UCCX server is able to see the end users on CUCM.  Then you specify one of the end users as "UCCX Administrator".  After this initialization, the temporary "Administrator" account is disabled.  You need to log in with the specified CUCM end user account thereafter.

This model has quite a few drawbacks:

1. Many customers are not aware that the first-time account "Administrator" is a temporary/one-time account.  I've seen cases that after years customer still thought they could use the "Administrator" account to log into UCCX Administration.

2. UCCX Administration solely relies on CUCM end user database.  In UCCX, there's no way to specify an "Application User" as "UCCX Administrator".  If the end user was deleted/disabled from CUCM or LDAP, there's no way to get into UCCX Administration.

3. The "Application Administrator" credential created during UCCX installation is practically useless.   You can't use it for UCCX Administration.  You can't use it for UCCX Serviceability.  (The only place you use it is "Cisco Unified Serviceability" which is almost useless for a UCCX server.)  This is VERY different from CUCM.

* It was said that from UCCX 9.0, "Application Administrator" credential can be used as UCCX Administrator.  If that's true, it would be a BIG improvement.

4. Agent authentication (such as Agent Desktop login) was referred from UCCX server to CUCM server (via AXL).  i.e. if something wrong with AXL, UCCX agent won't be able to log in.

Agent Desktop login flow chart as below:

CUPS

For CUPS, the "Application Administrator" credential created during installation works the same as CUCM.  i.e. You may use that credential to log into CUPS Administration.

Like UCCX, CUPS also import users from CUCM "end user" table.

Unlike UCCX, CUPS also import end user passwords.  The advantage is - CUPC/Jabber client authentication is NOT referred to CUCM server.  It's done either locally on CUPS server or LDAP server (if LDAP Authentication was enabled).

CUPC/Jabber login flow chart as below:


JTAPI/CTI

JTAPI and CTI are two different protocols.  But from end user perspective, they do similar things - allows software control telephones.

UCCX uses JTAPI to control phone calls.  CUPC/Jabber client uses CTI.  Besides protocol difference, the authentication models are quite different as well.

When CAD (Cisco Agent Desktop) is trying to control the call, it does not talk to JTAPI server (CUCM) directly.  It talks to UCCX server.  The request was proxied by UCCX server to JTAPI server.  A single 'JTAPI' credential is used for UCCX server to authenticate with JTAPI server (CTIManager service on CUCM).

Below is the Call Control flow chart of Agent Desktop:


When CUPC/Jabber is trying to control the call (DeskPhone Control), it talks to CTI server (CUCM) directly.  The individual end user accounts are used to authenticate with CTI server (CTIManager service on CUCM).

Below is the Call Control flow chart of CUPC/Jabber:

What does this mean as far as "authentication" is concerned?

Proxied Authentication (UCCX/JTAPI)

Proxied Authentication happens between UCCX server and CUCM server.  Most likely, those servers are in the same server farm (same subnet/location).  It's unlikely to have firewall/access-lists between those servers.  Thus communication is considered more reliable.

JTAPI credential can be created as "Application User" in CUCM.  So it's less dependent on external entities (such as LDAP).

However, any change to the JTAPI credential will affect all agents, because they rely on the same JTAPI account.

Direct Authentication (CUPC-Jabber/CTI)

Direct Authentication happens between CUPC-Jabber client and CUCM server.  Communication issues would be the major part of troubleshooting.  Clients and servers are usually in different subnets across different networks (possible Wide Area Networks).  Not to mention numerous firewalls (standalone network-based firewalls, software-based PC firewalls, etc.).

If LDAP authentication was enabled, things would be more complicated.  In order to do call control, clients need to authenticate with CTIManager, which in turn, needs to authenticate with LDAP.  More than 90% of the phone control issue was caused by LDAP authentication referral.

It takes another book to explain why LDAP referral would cause problem.  But as a rule of thumb, go to CUCM > System > LDAP > LDAP Authentication.  Make sure you're using Global Catalog port (3268 by default.  3269 if you're using LDAP over SSL).  Don't forget to restart Cisco Tomcat service after making changes.
Viewing all 54 articles
Browse latest View live