Installing and Configuring CME 7.1

This post will document my first attempt at setting up a basic CME install.  I’ve got a free lab SIP trunk from SIP-UA (Thanks again!), a 2801 route that will support the CME instance, and a 7960 VOIP phone.  It’s probably worthwhile to mention that CME itself is usually just considered as the GUI for managing the routers VOIP instance.  You can configure all of the options through the command line which is what I’ll be doing today.  I will, however, still install the GUI and set it up so you can see the process.  Alright, let’s get started.

Cabling/Topology
I’ve created another VLAN (20) of my Cisco 3750 called ‘Voice’.  This will be the voice VLAN and will be where the CME instance lives.  My standard data VLAN is 10 so I used the ‘switchport access vlan 20’ command on the port connecting to the 2801 interface and the ‘switchport voice vlan 20’ command on the port connecting to the phone.  Additionally, I created a SVI on VLAN 20 to route traffic back and forth between VLANs.

2801 Configuration
First things first, we need the right code and the right CME version.  I can’t stress enough that these need to match the Cisco specification exactly.  Make sure that your CME version and IOS version are the same per the Cisco document listed here…

http://www.cisco.com/en/US/docs/voice_ip_comm/cucme/requirements/guide/33matrix.htm

If you don’t use the recommended combination of IOS and CME you can run into weird issues.

Basic Setup – Configure the hostname and basics
Router(config)#hostname VOIP2801
VOIP2801(config)#int faste0/0
VOIP2801(config-if)#ip address 10.20.20.2 255.255.255.0
VOIP2801(config-if)#no shut
*Apr 17 22:14:24.767: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
VOIP2801(config-if)#
exit
VOIP2801(config)#ip route 0.0.0.0 0.0.0.0 10.20.20.1
VOIP2801(config)#ip domain-lookup
VOIP2801(config)#ip name-server 10.20.30.10

Configure NTP
Note: NTP Is important in CME since that’s what the phone will get their time from.  I resolved ‘time.gov’ to an IP and used that.

VOIP2801(config)#
clock timezone CST -5
VOIP2801(config)#ntp server 129.6.13.35
VOIP2801(config)#
*Apr 17 22:17:04.295: %SYS-6-CLOCKUPDATE: System clock has been updated from 22:17:04 UTC Sun Apr 17 2011 to 17:17:04 CST Sun Apr 17 2011, configured from console by console.

DHCP Scope configuration
Note: I define the DHCP scope for the phones on the router itself.  If you wanted it somewhere else you could use the ‘ip-helper’ command to send the DHCP requests somewhere else.

VOIP2801(config)#
ip dhcp excluded-address 10.20.20.1 10.20.20.50
VOIP2801(config)#ip dhcp pool VOIP
VOIP2801(dhcp-config)# network 10.20.20.0 255.255.255.0
VOIP2801(dhcp-config)# option 150 ip 10.20.20.2
VOIP2801(dhcp-config)# lease 7

Install CME Code
Note: The Version of 7.1 I downloaded was a ZIP file. I opened the Zip and extracted the files and TARs I wanted to a new folder called ‘CME71’.  I extracted the following files…
cme-gui-7.1.0.0.tar – The Web GUI files for CME
P00308000500.tar – The phone files for my 7960G
ringtones.tar – Ringtone files, we’ll talk about these in a later post
I use the archive command to copy the files and install them into specific folders at the same time.  I also use FTP rather than TFTP.

VOIP2801# archive tar /xtract ftp://10.20.30.50/CME71/cme-gui-7.1.0.0.tar flash:CME_GUI
Loading CME71/cme-gui-7.1.0.0.tar
extracting admin_user.html (3987 bytes)!
extracting admin_user.js (650596 bytes)!!
<***Output Omitted***>
[OK – 800768/4096 bytes]

VOIP2801#

archive tar /xtract ftp://10.20.30.50/CME71/P00308000500.tar flash:CME_PhoneLoads
Loading CME71/P00308000500.tar
extracting P00308000500.bin (129824 bytes)!
extracting P00308000500.loads (458 bytes)
extracting P00308000500.sb2 (705536 bytes)!!!
extracting P00308000500.sbn (130228 bytes)
<***Output Omitted***>
[OK – 969728/4096 bytes]

VOIP2801#

archive tar /xtract ftp://10.20.30.50/CME71/ringtones.tar flash:CME_RingTones
Loading CME71/ringtones.tar
extracting Analog1.raw (8160 bytes)!
extracting Analog2.raw (8160 bytes)
<***Output Omitted***>
[OK – 326144/4096 bytes]

VOIP2801#dir flash:
Directory of flash:/
    1  -rw-    47773976  Oct 26 1906 00:15:44 -05:00  c2801-advipservicesk9-mz.124-22.YB8.bin
    2  drw-           0  Apr 17 2011 17:26:24 -05:00  CME_GUI
   21  drw-           0  Apr 17 2011 17:26:38 -05:00  CME_PhoneLoads
   26  drw-           0  Apr 17 2011 17:26:52 -05:00  CME_RingTones

512065536 bytes total (462004224 bytes free)

Note: So as you can see, we have three separate folders.  One for the GUI, one for actual phone code, and one for ringtones.

Configure the Router to host phone files through local TFTP Server
Note: Now we need to tell the router to host the phone loads on a local TFTP server.  The phones will use option 150 to find the phone loads and download them locally.  Take note that we are using the ‘alias’ command because the files are not in the root of the flash directory.

VOIP2801(config)#
tftp-server flash:/CME_PhoneLoads/P00308000500.bin alias P00308000500.bin
VOIP2801(config)# tftp-server flash:/CME_PhoneLoads/P00308000500.loads alias P00308000500.loads
VOIP2801(config)# tftp-server flash:/CME_PhoneLoads/P00308000500.sb2 alias P00308000500.sb2
VOIP2801(config)# tftp-server flash:/CME_PhoneLoads/P00308000500.sbn alias P00308000500.sbn

Configure the router for CME Web GUI
Note: The only thing we have to do here is tell the router where the HTTP files are to host and turn on the local HTTP server.  Then we enable telephony services on the router, set a web admin account, and enable configuration from the web GUI.

VOIP2801(config)#
ip http server
VOIP2801(config)#ip http path flash:CME_GUI
VOIP2801(config)#telephony-service
VOIP2801(config-telephony)# web admin system name admin secret 0 cisco
VOIP2801(config-telephony)# dn-webedit

Note: At this point you should be able to get to the web GUI by browsing to…

http://<Router IP>/telephony-service.html

Login using the credentials you just configured.  We won’t be using the GUI for any other configuration.

Finish the default settings for CME in Telephony-Service
VOIP2801(config-telephony)#load 7960-7940 P00308000500
Updating CNF files
CNF-FILES: Clock is not set or synchronized, retaining old versionStamps
CNF files update complete for phonetype(7940)
CNF-FILES: Clock is not set or synchronized, retaining old versionStamps
CNF files update complete for phonetype(7960)
Note: This command loads the phone code as part of the CME instance.  It also updates the CNF files which are used for phone configuration.

VOIP2801(config-telephony)#max-ephones 8
VOIP2801(config-telephony)#max-dn 8
Note: These commands set the max values for extensions and phones.  Its required to set these values so the system knows what it has to work with.

VOIP2801(config-telephony)#ip source-address 10.20.20.2
Updating CNF files
CNF-FILES: Clock is not set or synchronized, retaining old versionStamps
CNF files updating complete
Note: This command sends the IP address of the CME system.  Another CNF update occurs when this is modified.

VOIP2801(config-telephony)#create cnf-files
Creating CNF files
CNF-FILES: Clock is not set or synchronized, retaining old versionStamps
Note: This command actually creates the CNF files.  It’s probably not required at this point since they were already updated twice but I always do it for good measure.

Check your phone
At this point if your phone is plugged in it should boot and you should see the standard phone window.  Date, time, and a message indicating that you are on a ‘Cisco Unified CME’.  If the phone is not booting, check your switchport configuration.

Configure the extension and phone
VOIP2801(config)#ephone-dn 1
VOIP2801(config-ephone-dn)#number 1000 secondary 4175209020
VOIP2801(config-ephone-dn)#label Jon’s Extension
VOIP2801(config-ephone-dn)#name Jon’s
Note: The number command sets the extension.  The label command sets what the line button on the phone displays as.  The name command is for caller ID purposes. 

VOIP2801(config)# ephone-dn 2
VOIP2801(config-ephone-dn)# number 4175209020
VOIP2801(config-ephone-dn)# label External Line
VOIP2801(config-ephone-dn)# name External Line
Note: For this second DN I’m configuring the external phone number.  I’ll attach this to the phone so that the incoming calls ring on this particular phone.

VOIP2801(config)#ephone 1
VOIP2801(config-ephone)#description Jon’s Phone
VOIP2801(config-ephone)#mac-address <Phone’s MAC>
VOIP2801(config-ephone)#type 7960
VOIP2801(config-ephone)#button 1:1 2:2
Note: The type defines what type of handset the phone is.  The button command maps ‘ephone-dn 1’ to button 1 and ‘ephone-dn 2’ to button 2 on the physical phone.

Reboot the phone to make sure the settings come through
VOIP2801#config t
Enter configuration commands, one per line.  End with CNTL/Z.
VOIP2801(config)#
telephony-service
VOIP2801(config-telephony)#reset <Phone’s MAC>

Configure the SIP trunk
VOIP2801(config)# sip-ua
VOIP2801(config-sip-ua)# credentials username <SIP Username> password <SIP Password> realm sip-ua.com
VOIP2801(config-sip-ua)# registrar dns:proxy.sip-ua.com expires 60
VOIP2801(config-sip-ua)# authentication username <SIP Username> password <SIP Password>
VOIP2801(config-sip-ua)# sip-server dns:proxy.sip-ua.com
Note: I’m not going to really discuss this just yet.  I’m putting it in so you can get SIP working but I plan on doing an entire post on the SIP trunk configuration so we’ll talk about it then.  Same thing goes for the dials plans covered next.

Configure Inbound and Outbound dial plans
VOIP2801(config)# dial-peer voice 1 voip
VOIP2801(config-dial-peer)#  description *** 10 Digit Calls ***
VOIP2801(config-dial-peer)#  destination-pattern [2-9]..[2-9]……
VOIP2801(config-dial-peer)#  session protocol sipv2
VOIP2801(config-dial-peer)#  session target sip-server
VOIP2801(config-dial-peer)#  dtmf-relay rtp-nte
VOIP2801(config-dial-peer)#  codec g711ulaw
VOIP2801(config-dial-peer)#  no vad
VOIP2801(config)# dial-peer voice 2 voip
VOIP2801(config-dial-peer)#  description *** 11 Digit Calls ***
VOIP2801(config-dial-peer)#  destination-pattern 1[2-9]..[2-9]……
VOIP2801(config-dial-peer)#  session protocol sipv2
VOIP2801(config-dial-peer)#  session target sip-server
VOIP2801(config-dial-peer)#  dtmf-relay rtp-nte
VOIP2801(config-dial-peer)#  codec g711ulaw
VOIP2801(config-dial-peer)#  no vad
VOIP2801(config)# dial-peer voice 3 voip
VOIP2801(config-dial-peer)#  description *** Lab Extensions ***
VOIP2801(config-dial-peer)#  destination-pattern 7……
VOIP2801(config-dial-peer)#  session protocol sipv2
VOIP2801(config-dial-peer)#  session target sip-server
VOIP2801(config-dial-peer)#  dtmf-relay rtp-nte
VOIP2801(config-dial-peer)#  codec g711ulaw
VOIP2801(config-dial-peer)#  no vad
VOIP2801(config)#dial-peer voice 100 voip
VOIP2801(config-dial-peer)#  description *** Incoming Dial-Peer ***
VOIP2801(config-dial-peer)#  session protocol sipv2
VOIP2801(config-dial-peer)#  incoming called-number .
VOIP2801(config-dial-peer)#  dtmf-relay rtp-nte
VOIP2801(config-dial-peer)#  codec g711ulaw
VOIP2801(config-dial-peer)#  no vad
Note: As I said above, we’ll talk about these in more detail in a future post.  I actually got these straight from the SIP-UA website.

Testing and Conclusion
At this point inbound and outbound calling should work just fine.  I apologize for not talking about the SIP and dial peer configuration just yet.  Both those topics deserve their own posts to do any sort of justice to the topic.  Hopefully this has been enough to get you up and running.  Feel free to ping me with questions, I’m still learning the CME piece as well.

Tags:

  1. yomi’s avatar

    Thanks dude, well written and easy to understand. Your article helped me out as i was scratching my head on whether i needed to have a whole router just to serve DHCP to the phones.

    Reply

  2. James’s avatar

    hi, Thanks for your article, well written and helpful.

    I am trying to configure CME on a 2901 running on IOS 15.0(1)M5. I am hopping to use the SPA 303 and 509g IP phones.

    1. I think i need to download the cme-full-7.1.0.0.tar but i dont have a cisco contract so am failing to download. any help?

    2. Do i really need to install the cme-full-7.1.0.0.tar since SPA IP phones are not included

    3. How do I configure trunks in CME?

    Please help.

    Reply

Reply

Your email address will not be published. Required fields are marked *