Catalyst 3850 IOS 16.1.1

Upgraded my 3850 to Denali 16.1.1 today. The new unified web GUI for the whole switch is pretty slick.  There are a ton of new features. See the Release notes here.  Now this is the first release of 16 so I don’t know I’d jump on it for a production network until there is a bug fix rebuild, or at least without checking the open caveats.

I ran into a problem that the APs would register, the radios just wouldn’t come up. Nothing I tried in the GUI (like bouncing the radios between disabled and enabled) would get them to go Operationally UP.

Turns out the secret was to go into the guy and do a “no ap dot11 5ghz shutdown” and a “no ap dot11 24ghz s.”  The radios came right up and everything is working again.

CUBE SIP Lineside Phone Proxy Configuration

Today I finally worked through getting a Cisco 9971 SIP phone to register to CUCM via CUBE lineside SIP proxy for a tech session I am presenting in a few weeks.   A few notes follow…

Go grab IOS 15.3(3)M2 code and put it on the router you’re using.

The CUBE Cisco Unified Communications Manager Line-Side Support configuration guide is a train wreck and has multiple errors and omissions.  Work through it but make the following changes…

From the Guide…

In the Configure a PKI Trustpoint section make on step enter the line as “crypto pki trustpoint self-trustpoint” (or another unique name that will be used below in a later step).

There is a critical step missing in this section.   Step 8 which actually enrolls the trustpoint.  Type “crypto pki enroll self-trustpoint” (or the unique name yo used when defining the trustpoint.

In the Importing the CUCM and CAPF Key section don’t forget to repeat the process twice, once for the CallManager.pem certificate, and once for the CAPF.pem certificate.  Call the CAPF trustpoint “capf-trustpoint.”

In the Creating a CTL File section Step 2 – the name of the trustpoint is “self-trustpoint” (ignore the 6s), or the unique name you assigned above.

In Step 3 the capf-trustpoint name is “capf-trustpoint” (ignore the 6s)

 

Quit following the configuration guide at this point.

Now bail on the configuration guide and add this to your configuation.  Please note, if you are alreadying doing CUBE or SIP turnks to you gateway YOU MAY NOT WANT TO PASTE THIS IN TO A PRODUCTION VOICE GATEWAY!!

Enable CUBE (recall this is a licensed feature from Cisco)

voice service voip
no ip address trusted authenticate  !- DANGER DANGER DANGER — This is disabled by default and enabling this could open your gateway to TOLL FRAUD.  My system is isolated, and I used this command to allow CUBE to pass RTP from the outside to the inside in my lab environment.  Consult Cisco documentation before enabling this on a CUBE that is exposed to the internet!
allow-connections sip to sip
sip
header-passing
registrar server
nat auto
pass-thru headers unsupp
pass-thru subscribe-notify-events all
pass-thru content unsupp
registration passthrough
extension cucm
!
!

Define your URIs that will be modified

This is the outside interface of CUBE
voice class uri 1 sip
host ipv4:10.21.1.1

This is the inside interface of CUBE

!
voice class uri 2 sip
host ipv4:10.25.1.20

This is the CUCM Publisher

!
voice class uri 3 sip
host ipv4:10.25.1.60

Build the requisite SIP profiles – These can be cut and pasted EXCEPT for the part in Bold that needs to be changed to your CUCM PUB IP address before pasting

voice class sip-profiles 10
request INVITE peer-header sip contact copy “>(;.*)” u01
request REGISTER peer-header sip contact copy “>(;.*)” u02
request INVITE sip-header Cisco-Guid remove
request INVITE sip-header Contact modify “(.*)” “\1\u01”
request REGISTER sip-header Contact modify “(.*)” “\1\u02”
!
voice class sip-profiles 11
request INVITE peer-header sip contact copy “>(;.*)” u01
request INVITE peer-header sip SIP-Req-URI copy “sip:([^@]*@)” u02
response 200 peer-header sip contact copy “>(;.*)” u03
request CANCEL peer-header sip SIP-Req-URI copy “sip:([^@]*@)” u04
request INVITE sip-header Cisco-Guid remove
request INVITE sip-header Contact modify “(.*)” “\1\u01”
request INVITE sip-header SIP-Req-URI modify “.*” “INVITE sip:\u0210.25.1.60 SIP/2.0″
response 200 sip-header Contact modify “(.*)” “\1\u03”
request CANCEL sip-header SIP-Req-URI modify “.*” “CANCEL sip:\u0410.25.1.60 SIP/2.0″
!
voice class sip-hdr-passthrulist 10
passthru-hdr Remote-Pary-ID
passthru-hdr Call-Info
passthru-hdr Content-ID
passthru-hdr supported
passthru-hdr require
passthru-hdr Referred-By
!
voice class sip-copylist 10
sip-header SIP-Req-URI
sip-header contact
!
voice class sip-copylist 11
sip-header contact

 

Build the Phone Proxy – Modify anything below in Bold to your IP addresses

voice-phone-proxy cubepp
tftp-server address ipv4 10.25.1.60 local-addr ipv4 10.25.1.20 acc-addr ipv4 10.21.1.1
ctl-file ct1
access-secure
service-map server-addr ipv4 10.25.1.60 port 8443 acc-addr ipv4 10.21.1.1 port 8443
service-map server-addr ipv4 10.25.1.60 port 8080 acc-addr ipv4 10.21.1.1 port 8080
service-map server-addr ipv4 10.25.1.60 port 3804 acc-addr ipv4 10.21.1.1 port 3804
complete

 

voice-phone-proxy tftp-address ipv4 10.21.1.1
port-range 40000 50000
voice-phone-proxy tftp-address ipv4 10.25.1.20
port-range 40000 50000
voice-phone-proxy file-buffer size 30

Build your Dial Peers to proxy registrations

dial-peer voice 2 voip
description DP_facing_CCM
session protocol sipv2
session target ipv4:10.25.1.60
session transport tcp
destination uri 1
incoming uri via 3
voice-class sip extension cucm
voice-class sip call-route url
voice-class sip profiles 11
voice-class sip pass-thru headers 10
voice-class sip copy-list 11
dtmf-relay rtp-nte
codec transparent
!
dial-peer voice 1 voip
phone-proxy cubepp signal-addr ipv4 10.21.1.1 cucm ipv4 10.25.1.60
description DP_Access_Side
session protocol sipv2
session target registrar
session transport tcp tls
destination uri 2
incoming uri request 1
voice-class sip call-route url
voice-class sip profiles 10
voice-class sip registration passthrough registrar-index 1
voice-class sip pass-thru headers 10
voice-class sip copy-list 10
dtmf-relay rtp-nte
codec transparent

Enable the SIP User Agent

sip-ua
timers connection aging 60
registrar 1 ipv4:10.25.1.60 expires 3600 refresh-ratio 100 tcp

 

Test it out

Connect a phone to the inside of the network and register it successfully to your CUCM.  Perform a test call to make sure audio is working.

Move it to the outside (in my case I created VLAN21 and only had it routed on the outside interface of the CUBE router) and delete the CTL/ITL.  Change the TFTP to the outside IP address of CUBE (in my case 10.21.1.1).

If phone proxy is working it will register.  It can take a couple minutes.

 

Some debugging commands

  • show sip registration passthrough status
  • Debug voice dial-peer inout
  • Debug voice phone-proxy all

 

The Relevant Bits of my Lab Router Config

IP Address Scheme:

CUCM – 10.25.1.60

CUBE Inside – 10.25.1.20 (ip routable inside to CUCM)

CUBE Outside – 10.21.1.1 (typically this would be a public IP or natted to the outside)

 

Cisco 2951 Config

version 15.3

!
hostname C2951-LAB
!
crypto pki trustpoint cucm_trustpoint
enrollment terminal
revocation-check none
!
crypto pki trustpoint cucm_capf
enrollment terminal
revocation-check none
!
crypto pki trustpoint self-trustpoint
enrollment selfsigned
serial-number
subject-name CN=C2951-LAB
subject-alt-name 8945_SEC.lab.domain.com
revocation-check crl
rsakeypair pp_uno
!
!
crypto pki certificate chain cucm_trustpoint
certificate ca 6749FF335ACDECF99948DB3A35527681
308202A4 3082020D A0030201 02021067 49FF335A CDECF999 48DB3A35 52768130
0D06092A 864886F7 0D010105 05003064 310B3009 06035504 06130255 53311630
14060355 040A130D 43697363 6F6F6F6F 6F6F6F6F 6F310C30 0A060355 040B1303
534C4331 14301206 03550403 130B534C 434C4142 32352D36 30310B30 09060355
04081302 5554310C 300A0603 55040713 0353434C 301E170D 31333130 32353035
33343236 5A170D31 38313032 34303533 3432355A 3064310B 30090603 55040613
02555331 16301406 0355040A 130D4369 73636F6F 6F6F6F6F 6F6F6F31 0C300A06
0355040B 1303534C 43311430 12060355 0403130B 534C434C 41423235 2D363031
0B300906 03550408 13025554 310C300A 06035504 07130353 434C3081 9F300D06
092A8648 86F70D01 01010500 03818D00 30818902 818100A3 54BD2EFD D87226F1
CDAAC4BA 8567040A 9814A2A3 8057E803 57AD56E4 6933D2E0 05B392F4 0091ECA6
B9609FE8 DC386317 75844DCD 5F78E8BB 055E77D4 AC03B99A EBE4184C A432D784
AB2CAEEB 539DEC55 409D1CC6 EE1E45C4 A8E1F89B 128ABAD9 C80D8DF0 5DD761FB
16B27305 49545567 F53B65E1 4461CF25 1CF5BE53 B8059F02 03010001 A3573055
300B0603 551D0F04 04030202 BC302706 03551D25 0420301E 06082B06 01050507
03010608 2B060105 05070302 06082B06 01050507 0305301D 0603551D 0E041604
14F5EC15 F22A21B2 02EB351E 2F7E9DB7 21226E3D 8F300D06 092A8648 86F70D01
01050500 03818100 321D20AB C0980512 2A9843BC 33D78624 A62E82AC C0CE9387
23EA2E5D 9BE12EFE 1A63114E 316A42B5 F36D73E5 68C93053 902D1FCB 86F0FA59
A14E7845 610F8590 4132D0A9 1A10D393 61D7A14C 6E8DAEEB BF33950F 676F7EE2
A0699D96 7E7121DE 820FE5BB F0332E61 1BDE9F43 D2FEB42C 2623A1B5 E768501D
B624BEBC 49C9500B
quit
crypto pki certificate chain cucm_capf
certificate ca 6109543C30968DE66EB25CE2C58CD0A7
3082029E 30820207 A0030201 02021061 09543C30 968DE66E B25CE2C5 8CD0A730
0D06092A 864886F7 0D010105 05003066 310B3009 06035504 06130255 53311630
14060355 040A130D 43697363 6F6F6F6F 6F6F6F6F 6F310C30 0A060355 040B1303
534C4331 16301406 03550403 130D4341 50462D30 61666333 39323031 0B300906
03550408 13025554 310C300A 06035504 07130353 434C301E 170D3133 31303235
30353334 32395A17 0D313831 30323430 35333432 385A3066 310B3009 06035504
06130255 53311630 14060355 040A130D 43697363 6F6F6F6F 6F6F6F6F 6F310C30
0A060355 040B1303 534C4331 16301406 03550403 130D4341 50462D30 61666333
39323031 0B300906 03550408 13025554 310C300A 06035504 07130353 434C3081
9F300D06 092A8648 86F70D01 01010500 03818D00 30818902 818100A9 F234D83D
13CA75FE 2F9C6041 921DB77A 869CA6E3 29AC94E3 8EBB099F 2C33AE51 A5EFEC3D
B151D31A C2A1A02D 79727287 6F2910E3 DC308D1D E4841409 F6B7131C 5D0A40CA
DA4DDF8A 49682465 2BCA05F5 D3B8CF86 DC2D5136 2CB0F6F6 35747B7D 696AEE6C
F0947654 8A49D275 1D8501CA 1808F948 BAB32B37 8B5AD708 E122E902 03010001
A34D304B 300B0603 551D0F04 04030202 A4301D06 03551D25 04163014 06082B06
01050507 03010608 2B060105 05070305 301D0603 551D0E04 160414DF D666E78A
FCE19727 F039EF69 B44BA2DF B59D3730 0D06092A 864886F7 0D010105 05000381
81003667 BD568296 1280E5EF 26F22309 0901B655 1A694158 4731AAE7 E6EFD071
0FF1D024 F180A918 BC98DAF8 61DBB2BE FFD1A75B 56D49325 F49F75EB E22CB3C0
94447F2D 5E89B4D7 E511E554 374F4E52 7983A054 4F9B9EA3 4305042B EDB15EBD
3B5EDB8D FF4C8C83 5B0FF139 D5D7DD0D 001445F2 93E3DE30 5612DFF0 112B4214 783C
quit
crypto pki certificate chain self-trustpoint
certificate self-signed 01
308202A1 3082020A A0030201 02020101 300D0609 2A864886 F70D0101 05050030
59311530 13060355 0403130C 43323935 312D534C 434C4142 31403012 06035504
05130B46 54583137 3431414B 534B302A 06092A86 4886F70D 01090216 1D433239
35312D53 4C434C41 422E736C 636C6162 2E636973 636F2E63 6F6D301E 170D3134
30343038 31383032 31395A17 0D323030 31303130 30303030 305A3059 31153013
06035504 03130C43 32393531 2D534C43 4C414231 40301206 03550405 130B4654
58313734 31414B53 4B302A06 092A8648 86F70D01 0902161D 43323935 312D534C
434C4142 2E736C63 6C61622E 63697363 6F2E636F 6D30819F 300D0609 2A864886
F70D0101 01050003 818D0030 81890281 8100A67C DB60E221 6621A5B2 2F691BFC
5956086E 6B9AE741 885CAB9D B6898DFC C328A19C E4A4A981 DF0A76EB 1CA33CDA
016E1DE5 FD68FF6F 85F1CEBE 1F5A7D2B CD00F5BB DE3080D7 035A69DD 0C260447
0957E19D 2F27A9ED 0B1F6DE4 45AAACCB 16EE480C 1B7D1F51 7E652D36 DB208A00
F05956C4 07A7483D 1EC310AC F1D05346 CEB90203 010001A3 79307730 0F060355
1D130101 FF040530 030101FF 30240603 551D1104 1D301B82 19383934 355F5345
432E736C 636C6162 2E636973 636F2E63 6F6D301F 0603551D 23041830 16801464
E3A180EB 3CA73479 7E3AF3B7 E1181782 CB0B9630 1D060355 1D0E0416 041464E3
A180EB3C A734797E 3AF3B7E1 181782CB 0B96300D 06092A86 4886F70D 01010505
00038181 00A11F68 786EA2B2 EA741486 EF863E81 BF646077 DBE5CBDC 41159E24
15535334 9CF2427C A8A5271B 4D0D406B 4AB8E2D0 07F0ABCC E369616F 859CC789
EC25802C A34F89DC 2233A7D9 DD7EAE9D 0E2D831D 781D0B0B 54F43C8F 7F8FF899
6184A6D2 E882EF4B 3D2D5EC3 6475ACD5 72E4428D 71A9F0AF 43CB5F74 0CDD97D3
3CD36B8A 6B
quit
!
!
!
!
!
ip dhcp excluded-address 10.21.1.1 10.21.1.99
!
ip dhcp pool VLAN21
network 10.21.1.0 255.255.255.0
option 150 ip 10.21.1.1
default-router 10.21.1.1
!
!
!
ip domain name lab.domain.com
!
!
voice service voip
no ip address trusted authenticate
allow-connections sip to sip
sip
header-passing
registrar server
nat auto
pass-thru headers unsupp
pass-thru subscribe-notify-events all
pass-thru content unsupp
registration passthrough
extension cucm
!
!
voice class uri 1 sip
host ipv4:10.21.1.1
!
voice class uri 2 sip
host ipv4:10.25.1.20
!
voice class uri 3 sip
host ipv4:10.25.1.60
voice class sip-profiles 10
request INVITE peer-header sip contact copy “>(;.*)” u01
request REGISTER peer-header sip contact copy “>(;.*)” u02
request INVITE sip-header Cisco-Guid remove
request INVITE sip-header Contact modify “(.*)” “\1\u01”
request REGISTER sip-header Contact modify “(.*)” “\1\u02”
!
voice class sip-profiles 11
request INVITE peer-header sip contact copy “>(;.*)” u01
request INVITE peer-header sip SIP-Req-URI copy “sip:([^@]*@)” u02
response 200 peer-header sip contact copy “>(;.*)” u03
request CANCEL peer-header sip SIP-Req-URI copy “sip:([^@]*@)” u04
request INVITE sip-header Cisco-Guid remove
request INVITE sip-header Contact modify “(.*)” “\1\u01”
request INVITE sip-header SIP-Req-URI modify “.*” “INVITE sip:\u0210.25.1.60 SIP/2.0”
response 200 sip-header Contact modify “(.*)” “\1\u03”
request CANCEL sip-header SIP-Req-URI modify “.*” “CANCEL sip:\u0410.25.1.60 SIP/2.0”
!
voice class sip-hdr-passthrulist 10
passthru-hdr Remote-Pary-ID
passthru-hdr Call-Info
passthru-hdr Content-ID
passthru-hdr supported
passthru-hdr require
passthru-hdr Referred-By
!
voice class sip-copylist 10
sip-header SIP-Req-URI
sip-header contact
!
voice class sip-copylist 11
sip-header contact
!
interface GigabitEthernet0/1
ip address 10.25.1.20 255.255.255.0
duplex auto
speed auto
!
interface GigabitEthernet0/2
ip address 10.21.1.1 255.255.255.0
duplex auto
speed auto
!
voice-ctl-file ct1
record-entry selfsigned trustpoint self-trustpoint
record-entry capf trustpoint cucm_capf
record-entry cucm-tftp trustpoint cucm_trustpoint
complete
voice-phone-proxy cubepp
tftp-server address ipv4 10.25.1.60 local-addr ipv4 10.25.1.20 acc-addr ipv4 10.21.1.1
ctl-file ct1
access-secure
service-map server-addr ipv4 10.25.1.60 port 8443 acc-addr ipv4 10.21.1.1 port 8443
service-map server-addr ipv4 10.25.1.60 port 8080 acc-addr ipv4 10.21.1.1 port 8080
service-map server-addr ipv4 10.25.1.60 port 3804 acc-addr ipv4 10.21.1.1 port 3804
complete
voice-phone-proxy tftp-address ipv4 10.21.1.1
port-range 40000 50000
voice-phone-proxy tftp-address ipv4 10.25.1.20
port-range 40000 50000
voice-phone-proxy file-buffer size 30
!
dial-peer voice 2 voip
description DP_facing_CCM
session protocol sipv2
session target ipv4:10.25.1.60
session transport tcp
destination uri 1
incoming uri via 3
voice-class sip extension cucm
voice-class sip call-route url
voice-class sip profiles 11
voice-class sip pass-thru headers 10
voice-class sip copy-list 11
dtmf-relay rtp-nte
codec transparent
!
dial-peer voice 1 voip
phone-proxy cubepp signal-addr ipv4 10.21.1.1 cucm ipv4 10.25.1.60
description DP_Access_Side
session protocol sipv2
session target registrar
session transport tcp
destination uri 2
incoming uri request 1
voice-class sip call-route url
voice-class sip profiles 10
voice-class sip registration passthrough registrar-index 1
voice-class sip pass-thru headers 10
voice-class sip copy-list 10
dtmf-relay rtp-nte
codec transparent
!
!
sip-ua
timers connection aging 60
registrar 1 ipv4:10.25.1.60 expires 3600 refresh-ratio 100 tcp
!

 

 

Migrating your PRI gateways from MGCP (or h.323) to SIP

One of the recommendations in the CSR version 10 SRND is to use SIP trunks from CallManager to your IOS voice gateway.

This makes sense for multiple reasons:

  1. Avoid dealing with MGCP’s finicky nature when making changes.
  2. A big step towards moving your PSTN connections to SIP trunks and using CUBE as an SBC.
  3. Gateway call forking for call recording.

CUCM 10 includes the ability to fork calls at the gateway to the call recording server.  This is great news for large deployments where using the phone’s BIB for forking isn’t desirable.  Some information about gateway forking is here.

Migrating from h.323

The conversion process is pretty straightforward for anyone running h.323 as they’ll already have all of the necessary dial-peers built typically and will only need to deal with SIP DTMF issues and SIP SDP Early Offer issues for SCCP phones.

In a recent conversion that I did I did the following:

Modified the GW -> CUCM dial peers to look like this:

dial-peer voice 101 voip
preference 1
destination-pattern 5…$
session protocol sipv2
session target ipv4:192.168.65.10
session transport tcp
voice-class codec 1
dtmf-relay sip-notify

There are several ways to deal with DTMF.  I prefer OOB to In-band (rtp-nte / RFC 2833) personally, so I go with sip-notify.

We must make adjustments to the SIP Trunk Security Profile to Accept unsolicited notification so that the DTMF information will be allowed into CUCM.  I copy the normal Non-secure SIP Trunk Security profile to a new name (e.g. Non-secure SIP Trunk Security Profile — GW) and change this option.  I then apply this security profile to the trunk I create from CUCM to the Gateway.

DTMF becomes a problem for SCCP phones unless you do either an Early Offer SIP trunk, or you provide an MTP to deal with it.  There’s an excellent document here – https://supportforums.cisco.com/blog/154706 that discusses all of the various options.

I don’t really like having to force MTP for every call, especially since SIP phones won’t need it for DTMF, so I opted to create a new SIP Profile that enabled Early Offer support for voice and video calls (insert MTP if needed) and apply it to the trunk.

Converting from MGCP

Converting from MGCP is a more significant undertaking.  The PRI configurations all move from CUCM to the Gateway as dial-peers.  I’ll add more to this post to include a sample build of dial-peers to accomplish this.

 

CoolTerm – Great Windows / OS X USB-Serial Console App

I typically have used iTerm and the screen command for USB-Serial console access.  But CTRL-Break is a nightmare.  SecureCRT is a great app, but they are up to $99 w/only 1-year of upgrades.

CoolTerm is a fantastic little free Windows and OSX Console program.  With a little tweaking it is perfect for serial console into routers/switches.

Once loaded, make the following changes in Options:

  • Select your USB-Serial adapter on the Port list.  Re-Scan serial ports if you didn’t plug it in before launching.
  • On the Terminal menu option select “CR” for Key Emulation, and Check the “Handle Backspace Character.”

Good to go.  Control-Break is just Command-B on the Mac.  Can’t beat that.