Note: This article is pulled from Cisco.com, the credit goes to the original author:
All credit goes to Cisco.com
(PS, Cisco keep moving the pages here and there so, I thot to keep a copy of it for benifit of everyeone.)
Today, the telecommunications industry is in the process of making the transition from long establishing, switching and transport technologies to IP-based transport and edge devices. The IP communication revolution has started to create a tremendous commercial impact in small and medium businesses. These small and medium businesses are realizing that the use of IP is very efficient because IP can use Voice, Video, and Data capabilities over a single network, instead of using three separate special-purpose networks. Figure 1 shows an IP telephony deployment trending towards IP trunking.
Figure 1 – IP Telephony System
IP PBXs are starting to predominate in the business of the Voice technology, and the TDM PBXs are no longer the primary source as the crossover going between two Voice networks. The usage of the TDM PBXs has decreased in the last couple of years, and the use of the IP PBX is becoming a good investment in IP LANs and WANs. In order to connect to the PSTN, PBXs need some sort of trunking such as TDM (T1/E1) or analog lines. IP PBXs can access the PSTN using these types of trunks, but need a media gateway that converts the IP voice traffic to traditional PSTN, which sometimes can result in successive translation from IP domain to TDM domain. These successive translations increase the maintenance costs of the gateways, increases latency, and reduces voice quality.
In order to avoid these problems, the IP PBXs use protocols for session initiation and management, the most prominent of which is Session Initiation Protocol (SIP). This document provides a description on SIP trunking and Cisco CallManager Express (CME), and a configuration to implement an IP-based telephony system with CME using SIP trunking for inbound and outbound calls.
Ensure that you meet these requirements before you attempt this configuration:
- CME release 4.1 is installed
- An image of Cisco IOS® Software Release 12.4(11)XJ or IOS 12.4(6th)T is on the router
- An NM-CUE module is installed with CUE release 2.3.4
The information in this document is based on these software and hardware versions:
- Cisco 3825 Router on Cisco IOS Software Release 12.4(11)XJ
- Cisco Catalyst 3550 Switch on Cisco IOS Software Release 12.4
- Cisco IP 7960 Phone
- Cisco CallManager Express 4.1
- Cisco Unity Express 2.3.4
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.
Refer to the Cisco Technical Tips Conventions for more information on document conventions.
SIP is an ASCII based, application-layer control protocol that can be used to establish, maintain, and terminate calls between two or more endpoints. SIP has rapidly emerged as the standard protocol used in IP communications, because it is a multimedia protocol that can be used for video sessions and instant messaging in addition to voice. Also, SIP can handle conference sessions and broadcasts, as well as one-to-one sessions. SIP has great potential in transforming and developing the way people communicate. For this reason, Cisco has and continues to play an important role in taking a leadership to create new technologies that make SIP and its applications the standard of IP communications.
SIP trunks are similar to a phone line, except that SIP trunks use the IP network, not the PSTN. In addition, SIP trunks permit the convergence of voice and data onto common all-IP connections. In order to access the IP network using an SIP trunk, it is necessary that configurations be made on the service provider, as well as on the customer side. Customers need to set and configure CME, which is the PBX that will interpret the SIP signal adequately and pass traffic successfully. The service provider needs to configure an SIP Proxy Server. However, SIP trunks are more complicated to establish than regular PSTN trunks. The reason is that a customer faces challenges in handling different interpretation and implementations of SIP by equipment vendors, delivering security, managing quality of service (QoS), enabling Network Address Translation (NAT) and firewall traversal, and ensuring carrier-grade reliability and continuity of service.
These points describe why SIP trunks are becoming so apparent in small and medium businesses:
- Quick and Easy Deployment
- Improved Utilization of Network Capacity
- Potential for Consolidating and Lowering Telephony Costs
- Economical Direct Inward Dial (DID)
- Business Continuity
Cisco CME is an IP telephony solution that is integrated directly into Cisco IOS software. CME permits small and medium businesses to deploy voice, data, and video on a single platform. An IP telephony network is simple to set because CME runs on a single router, which delivers a PBX functionality for businesses. Therefore, by using CME, small and medium businesses can deliver IP telephony and data routing using a single converged solution with minimal costs.
CME started to support SIP trunking when CME 3.1 was released. However, some problems existed when an SIP phone called an SCCP phone or tried to access voicemail. The problem is that SCCP phones connected to CME require the use of out-of-band DTMF relay to transport DTMF (digits) across VoIP connections, and SIP phones use in-band tranports. A DTMF distortion existed between the two devices. When CME 3.2 was released, support was added to the DTMF relay. DTMF digits from SCCP could be converted to in-band DTMF relay mechanism through RFC2833 or Notify methods.
CME currently supports this list of DTMF internetworking for SIP to SIP calls:
- Notify <—> Notify since 12.4(4)T
- RFC2833 <—> Notify since 12.4(4)T
- Notify <—> RFC2833 since 12.4(4)T
- Inband G711 <—> since 12.4(11)T [Requires Transcoder]
CME currently supports this DTMF internetworking for SIP to SCCP calls:
- SCCP out-of-band—SIP Notify / RFC2833 since 12.4(4)T
Another important aspect to consider when you set up an SIP trunk is the codecs supported. Codecs represent the pulse-code modulation sample for signals in voice frequencies. SIP trunks support these codecs: G.711 and G.729. However, for different features such as Cisco Unity Express (CUE) and Music on Hold (MOH), only codec G.711 is supported. This means that voice calls that use SIP trunks using codec G.729 cannot access CUE, unless a transcoder exists to permit the compression and decompression of voice streams to match the CUE capabilities. MOH can also use codec G.729 to save bandwidth, but the codec does not provide adequate quality MOH streams. This is due to the fact that G.729 is optimized for speech. Therefore, you must force MOH to use G.711.
When a call comes in on an SIP trunk and gets forwarded (CFNA / CFB / CFA), then the default behavior is for the CME to send the 302 “Moved Temporarily” SIP message to the Service Provider (SP) proxy. The user portion of the Contact Header in the 302 message might need to be translated to reflect a DID that the SP proxy can route to. The host portion of the Contact Header in the 302 message should be modified to reflect the Address of Record (AOR) using the host-registrar CLI under sip-ua and the b2bua CLI under the VoIP dial peer going to the CUE.
Some SIP proxies might not support this. If so, then you need to add this:
Router(config)#voice service voip
Router(conf-voi-serv)#no supplementary-service sip moved-temporarily
Figure 2 shows the behavior of the CME system when the 302 message is disabled.
Figure 2 – Call Forward Busy (CFB) flow with 302 message disabled
This method will allow hairpinning of the 302 SIP messages for call forwards on the CME. The above is also required if there are certain extensions that have no DID mapping as the SP proxy might not know how to route such calls. If you disable the 3xx response, the calling-number initiator can be used to preserve the caller ID of the original calling party.
When a call comes in on an SIP trunk to an SCCP Phone or CUE AutoAttendant (AA) and is transferred, the CME by default will send a SIP REFER message to the SP proxy. Most SP Proxy Servers do not support the REFER method. This needs to be configured in order to force the CME to hairpin the call:
Router(config)#voice service voip
Router(conf-voi-serv)#no supplementary-service sip refer
Figure 3 shows the behavior of the CME system with the REFER method disabled.
Figure 3 – Transfer with REFER disabled
If REFER is supported on the SIP proxy, the user portion of the Refer-To and Referred-By must be translated to a DID that the SP proxy understands. The host portion of the Refer-To and Referred-By fields must be an IP address or DNS that the SP proxy can route to as well (this occurs by default on CME 4.1).
If an SCCP phone places a call from PSTN on HOLD, the CME locally changes the media. No SIP messages are sent across on the SIP trunk. Music on Hold will be played to the user across the SIP trunk based on the CME configuration.
In this section, you are presented with the information to configure the features described in this document.
This document uses this network setup:
These configuration elements provide an outline of the steps required to configure your CME with SIP trunks:
- Infrastructure Elements: Interfaces, TFTP and DHCP services, NTP, etc
- Telephony-service: Enables IOS “PBX” call control on the CME platform including elements of phone management
- Ephones an Ephones-dns: Define IP phones and their telephone numbers
- Dial Plan: Dial-peers, extensions, voice-translation rules
- IOS SIP Configuration: Enables SIP, phone registration with SIP proxy, call routing over trunks, etc
- Voicemail Support: Cisco Unity Express
- Switch Catalyst Configuration: IP address, Interfaces, etc
This is the complete configuration needed to deploy a CME system with SIP trunks:
|Router – CME Configuration|
! AUSNML-3825-01#show run Building configuration... Current configuration : 8634 bytes ! version 12.4 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname AUSNML-3825-01 ! boot-start-marker boot-end-marker ! enable secret 5 $1$vBU1$MCMG1rXM5ejME8Wap6W0H1 ! no aaa new-model clock timezone central -8 clock summer-time central recurring ip cef ! !--- DHCP Configuration --- ip dhcp pool Voice network 172.22.100.0 255.255.255.0 option 150 ip 172.22.1.107 default-router 172.22.100.1 ! ip dhcp pool Data network 172.22.101.0 255.255.255.0 option 150 ip 172.22.1.107 default-router 172.22.101.1 ! ! ip domain name cisco.com ip name-server 188.8.131.52 multilink bundle-name authenticated ! voice-card 0 no dspfarm ! ! ! ! !--- Voice Class and Service VoIP Configuration --- voice service voip allow-connections sip to sip no supplementary-service sip moved-temporarily ! ---Disable 302 sending no supplementary-service sip refer ! ---Disable REFER sending sip registrar server expires max 3600 min 3600 localhost dns:domain.test.com ! ! voice class codec 1 codec preference 1 g711ulaw ! ! ! ! ! ! ! ! ! ! ! !--- Voice Translation Rules --- voice translation-rule 1 rule 1 /5123781291/ /601/ ! --- An inbound rule for AA pilot "601 rule 2 /5123781290/ /600/ ! --- An inbound rule for the voicemail pilot "600" ! voice translation-rule 2 rule 1 /^911$/ /911/ ! --- An outbound rule to allow "911" rule 2 /^9(.*)/ /\1/ ! --- An outbound rule to strip "9" from PSTN calls ! voice translation-rule 3 rule 1 /^.*/ /5123781291/ ! --- An outbound rule to change calling-number CLID to a !--- "main" number ! voice translation-rule 4 rule 1 /^9(.......)$/ /512\1/ ! --- An outbound rule to add areacode for local calls rule 2 /600/ /5123788000/ ! --- An outbound rule to present the voicemail pilot extension as DID rule 3 /601/ /5123788001/ ! --- An outbound rule to present the AA pilot extension as DID rule 4 /^2(..)$/ /51237812\1/ ! --- An outbound rule to support transfers and call-forwards rule 5 /^9(.*)/ /\1/ ! --- An outbound rule to strip "9" from "9+" transfers and call-forwards ! ! voice translation-profile CUE_Voicemail/AutoAttendant ! --- Applied to the inbound dial-peers for CUE translate called 1 ! voice translation-profile PSTN_CallForwarding ! --- Applied to CUE dial-peers translate redirect-target 4 translate redirect-called 4 ! voice translation-profile PSTN_Outgoing ! --- Applied to all outbound dial-peers translate calling 3 translate called 2 translate redirect-target 4 translate redirect-called 4 ! ! ! ! ! ! ! vlan internal allocation policy ascending ! ! ! ! !--- Internet Connection Configuration --- interface GigabitEthernet0/0 no ip address duplex auto speed auto media-type rj45 no keepalive ! interface GigabitEthernet0/0.1 encapsulation dot1Q 1 native ip address 172.22.1.71 255.255.255.0 ! interface GigabitEthernet0/0.20 encapsulation dot1Q 20 ip address 172.22.101.1 255.255.255.0 ! interface GigabitEthernet0/0.100 encapsulation dot1Q 100 ip address 172.22.100.1 255.255.255.0 ! interface GigabitEthernet0/1 no ip address shutdown duplex auto speed auto media-type rj45 no keepalive ! interface Service-Engine1/0 ip unnumbered GigabitEthernet0/0.1 service-module ip address 172.22.1.253 255.255.255.0 service-module ip default-gateway 172.22.1.71 ! ip route 0.0.0.0 0.0.0.0 172.22.1.1 ip route 172.22.1.253 255.255.255.255 Service-Engine1/0 ! ! ip http server no ip http secure-server ! ! ! !--- TFTP Server Configuration --- tftp-server flash:P0030702T023.bin tftp-server flash:P0030702T023.loads tftp-server flash:P0030702T023.sb2 tftp-server flash:P0030702T023.sbn ! control-plane ! ! ! ! ! ! ! !--- SIP Trunk Configuration --- dial-peer voice 1 voip description **Incoming Call from SIP Trunk** translation-profile incoming CUE_Voicemail/AutoAttendant voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server incoming called-number .% dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 2 voip description **Outgoing Call to SIP Trunk** translation-profile outgoing PSTN_Outgoing destination-pattern 9........ voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 3 voip description **Outgoing Call to SIP Trunk** translation-profile outgoing PSTN_Outgoing destination-pattern 9[2-9]..[2-9]...... voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 4 voip description **Outgoing Call to SIP Trunk** translation-profile outgoing PSTN_Outgoing destination-pattern 9[0-1][2-9]..[2-9]...... voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 5 voip description **911 Outgoing Call to SIP Trunk** translation-profile outgoing PSTN_Outgoing destination-pattern 911 voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 6 voip description **Emergency Outgoing Call to SIP Trunk** translation-profile outgoing PSTN_Outgoing destination-pattern 9911 voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 7 voip description **911/411 Outgoing Call to SIP Trunk** translation-profile outgoing PSTN_Outgoing destination-pattern 9[2-9]11 voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 8 voip description **International Outgoing Call to SIP Trunk** translation-profile outgoing PSTN_Outgoing destination-pattern 9011T voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! dial-peer voice 9 voip description **Star Code to SIP Trunk** destination-pattern *.. voice-class codec 1 voice-class sip dtmf-relay force rtp-nte session protocol sipv2 session target sip-server dtmf-relay rtp-nte no vad ! ! ! !--- Voicemail Configuration --- dial-peer voice 10 voip description **CUE Voicemail** translation-profile outgoing PSTN_CallForwarding destination-pattern 600 b2bua ! --- Used by CME to send its IP address to SP proxy instead of CUE session protocol sipv2 session target ipv4:172.22.1.155 dtmf-relay sip-notify ! --- This can also be RFC2833 going to CUE codec g711ulaw ! --- CUE only supports G711ulaw as the codec no vad ! --- With VAD enabled, messages left on CUE could be blank or poor quality ! ! ! dial-peer voice 11 voip description **CUE Auto Attendant** translation-profile outgoing PSTN_CallForwarding destination-pattern 601 b2bua session protocol sipv2 session target ipv4:172.22.1.155 dtmf-relay sip-notify codec g711ulaw no vad ! ! !--- SIP UA Configuration --- sip-ua authentication username 5123781000 password 075A701E1D5E415447425B no remote-party-id retry invite 2 retry register 10 retry options 0 timers connect 100 registrar dns:domain.test.com expires 3600 sip-server dns:domain.test.com host-registrar ! ! !--- CME Telephony Service Configuration --- telephony-service no auto-reg-ephone load 7960-7940 P0030702T023 max-ephones 168 max-dn 500 ip source-address 172.22.1.107 port 2000 calling-number initiator ! --- Preserves the caller-id of a call when transferred or forwarded dialplan-pattern 1 51237812.. extension-length 3 extension-pattern 2.. no-reg voicemail 600 max-conferences 12 gain -6 call-forward pattern .T call-forward system redirecting-expanded ! --- Enables translation rule features for call-forwarding moh music-on-hold.au transfer-system full-consult dss transfer-pattern 9.T secondary-dialtone 9 create cnf-files version-stamp Jan 01 2002 00:00:00 ! ! !--- Ephone and Ephone-dn Configuration --- ephone-dn 11 dual-line number 201 secondary 5123781201 no-reg both ! ---"no-reg both" means do not try to register either extension with SP SIP Proxy name John Smith call-forward busy 600 call-forward noan 600 timeout 15 ! ! ephone-dn 12 dual-line number 202 secondary 5123781202 no-reg both name Enrique Zurita call-forward busy 600 call-forward noan 600 timeout 15 ! ! ephone-dn 13 number 5123788000 description **DID Number for Voicemail** ! ! ephone-dn 14 number 5123788001 description **DID Number for Auto Attendant* ! ! ephone-dn 15 number 8000... no-reg primary mwi on ! ! ephone-dn 16 number 8001... no-reg primary mwi off ! ! ephone 1 mac-address 0008.A371.28E9 type 7960 button 1:11 ! ! ! ephone 2 mac-address 0008.A346.5C7F type 7960 button 1:12 ! ! ! ! line con 0 stopbits 1 line aux 0 stopbits 1 line 66 no activation-character no exec transport preferred none transport input all transport output pad telnet rlogin lapb-ta mop udptn v120 ssh line vty 0 4 password ut69coe login ! scheduler allocate 20000 1000 ntp server 172.22.1.107 ! end
|Router – CUE Configuration|
se-172-22-1-253#show run Generating configuration: clock timezone America/Chicago hostname se-172-22-1-253 ip domain-name localdomain groupname Administrators create groupname Broadcasters create !--- Users --- username Enrique create username John create username Enrique phonenumberE164 "5123781202" username John phonenumberE164 "5123781201" username Enrique phonenumber "202" username John phonenumber "201" !--- AutoAttendant --- ccn application autoattendant description "**AutoAttendant**" enabled maxsessions 4 script "aa.aef" parameter "busOpenPrompt" "AABusinessOpen.wav" parameter "operExtn" "601" parameter "welcomePrompt" "AAWelcome.wav" parameter "disconnectAfterMenu" "false" parameter "busClosedPrompt" "AABusinessClosed.wav" parameter "allowExternalTransfers" "false" parameter "holidayPrompt" "AAHolidayPrompt.wav" parameter "businessSchedule" "systemschedule" parameter "MaxRetry" "3" end application !--- MWI --- ccn application ciscomwiapplication description "ciscomwiapplication" enabled maxsessions 8 script "setmwi.aef" parameter "CallControlGroupID" "0" parameter "strMWI_OFF_DN" "8001" parameter "strMWI_ON_DN" "8000" end application !--- Voicemail --- ccn application voicemail description "**Voicemail**" enabled maxsessions 4 script "voicebrowser.aef" parameter "uri" "http://localhost/voicemail/vxmlscripts/login.vxml" parameter "logoutUri" "http://localhost/voicemail/vxmlscripts/mbxLogout.jsp" end application !--- SIP --- ccn subsystem sip gateway address "172.22.100.1" !--- Must match the "ip source-address" in telephony-service dtmf-relay sip-notify mwi sip outcall !--- Subscribe / Notify and Unsolicited Notify have not been tested transfer-mode blind bye-also !--- Testing with REFER method on CUE has caused certain call flows to break end subsystem !--- Trigger Phones --- ccn trigger sip phonenumber 600 application "voicemail" enabled maxsessions 4 end trigger ccn trigger sip phonenumber 601 application "autoattendant" enabled maxsessions 4 end trigger service phone-authentication end phone-authentication service voiceview enable end voiceview !--- Voicemail Mailboxes --- voicemail default mailboxsize 21120 voicemail broadcast recording time 300 voicemail mailbox owner "Enrique" size 300 description "**Enrique_Mailbox**" expiration time 10 messagesize 120 end mailbox voicemail mailbox owner "John" size 300 description "**John'sMailbox**" expiration time 10 messagesize 120 end mailbox end
!--- Interface Connected to CME/CUE Router --- interface FastEthernet0/2 description Trunk to 3825 switchport trunk encapsulation dot1q switchport mode trunk no ip address duplex full speed 100 !--- Interfaces Connected to the IP Phones --- interface FastEthernet0/7 switchport trunk encapsulation dot1q switchport trunk native vlan 20 !--- Data Traffic --- switchport mode trunk switchport voice vlan 100 !--- Voice Traffic --- no ip address spanning-tree portfast interface FastEthernet0/8 switchport trunk encapsulation dot1q switchport trunk native vlan 20 switchport mode trunk switchport voice vlan 100 no ip address spanning-tree portfast !--- IP Address --- interface Vlan1 ip address 172.22.1.194 255.255.255.0 ! ip classless ip route 0.0.0.0 0.0.0.0 172.22.1.1 ip http server
There is currently no verification procedure available for this configuration.
This section provides information you can use to troubleshoot your configuration.
Note: Refer to Important Information on Debug Commands before you use debug commands.
Troubleshooting the SIP trunk on CME involves the same commands you use for IOS SIP GW troubleshooting and CME troubleshooting. Use these commands in order to check if your DN is registered:
- show sip-ua register status—Use this command to display the status of E.164 numbers that a SIP gateway has registered with an external primary SIP registrar.
- debug ccsip message—Enables all SIP SPI message tracing, such as those that are exchanged between the SIP user-agent client (UAC) and the access server.
Commands for troubleshooting calls over SIP trunks are essentially the same as you use for regular SIP GW and CME troubleshooting.
- show ephone registered—Verifies ephone registration.
- show voip rtp connection—Displays information about RTP named-event packets, such as caller-ID number, IP address, and ports for both the local and remote endpoints.
- show sip-ua call—Displays active UAC and user agent server (UAS) information on SIP calls.
- show call active voice brief—Displays active call information for voice calls or fax transmissions in progress.
- debug ccsip message—Enables all SIP SPI message tracing, such as those that are exchanged between the SIP UAC and the access server.
- debug voip ccapi inout—Traces the execution path through the call control API.
- debug voice translation—Checks the functionality of a translation rule.
- debug ephone detail mac-address <mac of phone> —Sets detail debugging for the Cisco IP phone.
- debug voip rtp session named-events—Enables debugging for Real-Time Transport Protocol (RTP) named events packets.
- debug sccp message—Displays the sequence of the SCCP messages.