Following on from similar post I did a few years back about CCM7 in VirtualBox with a SIP trunk to a 2621XM, I’ve recreated the process for CCM9 with a few differences.
The final environment looks like the below:
- Cisco SRP527W ADSL2+ Router
- Ethernet to Ubuntu 11.04 running as the VirtualBox Host
- Call Manager 9 Virtual Machine Guest
- Ubuntu 12.04 Guest
- GNS3 inside the 12.04 Guest
- 2621XM running as CUBE inside GNS3
- SIP trunk between Call Manager 9 and the 2621XM
- SIP trunk between external provider and the 2621XM (my provider is Internode)
I won’t detail the SRP or VirtualBox Host config – it’s far too simple. The only note to add is to turn SIP ALG on on the SRP and forward 5060-5062 to the IP of your GNS3 router.
Call Manager 9 Build
Call Manager 9 SIP Trunk Config
This is reasonably straight forward, just add a new SIP trunk and make sure all your normal DP, CDC, CSS etc are all set.
Make sure you set the Inbound CSS aswell.
Under SIP information add the IP address of your future router interface in GNS3.
I left my security profile as non-secure.
I created a new SIP profile however the standard will work just fine.
I followed this guide to install GNS3 in 12.04 as the default apt version didn’t work for me.
Make sure you run GNS3 as root otherwise you’ll have issues making the NIO work.
Add your IOS (I’m running c2600-ipvoicek9-mz.124-15.T14) but any working version with voice should be fine for you.
Add the router and cloud. Add the cloud and add the nio_gen_eth:eth0 nic as shown below.
Connect the two up and boot your router.
As this router will be only be performing CUBE my config is pretty light. If you’ve got more requirements on your network you can throw them in, but I’m not sure how well performance will stack up being run inside of a VM. I even managed to crash my VM by doing a debug ccsip all so just be careful.
My external SIP provider is Internode. I receive 1 DID from them which I have to auth for. As I only have 1 DID the way I handle inbound is to translate the 1 DID it to a common number (1000 in my case) that I pass to CCM. From here it can hit a hunt, shared line, TP, DID whatever. Outbound is a similar fashion although I usually translate it in a RP before passing it back to the CUBE.
This is just one method that you can use so don’t expect the config to work if you’ve got different requirements.
x90-cube#sh run Building configuration... Current configuration : 2251 bytes ! version 12.4 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname x90-cube ! boot-start-marker boot-end-marker ! ! no aaa new-model memory-size iomem 15 no network-clock-participate slot 1 no network-clock-participate wic 0 ip cef ! ! ! ! ip name-server 10.10.0.1 multilink bundle-name authenticated ! ! ! voice service voip allow-connections sip to sip sip bind control source-interface FastEthernet0/0 bind media source-interface FastEthernet0/0 localhost dns:sip.internode.on.net ! ! voice class codec 1 codec preference 1 g711ulaw ! ! ! ! ! ! ! ! ! ! ! voice translation-rule 1 rule 1 /1000/ /<YOURDIDHERE>/ ! voice translation-rule 2 rule 1 /<YOURDIDHERE>/ /1000/ rule 2 /<YOURDIDHERE>/ /1000/ ! ! voice translation-profile sip-incoming translate called 2 ! voice translation-profile sip-outgoing translate calling 1 ! ! ! ! ! ! archive log config hidekeys ! ! ! ! ! ! interface FastEthernet0/0 ip address 10.10.0.199 255.255.255.0 duplex auto speed auto ! interface FastEthernet0/1 no ip address shutdown duplex auto speed auto ! ip forward-protocol nd ip route 0.0.0.0 0.0.0.0 10.10.0.1 ! ip http server no ip http secure-server ! ! ! control-plane ! ! ! ! ! sccp local FastEthernet0/0 sccp ccm <YOURCCMIPHERE> identifier 1 sccp ! sccp ccm group 1 bind interface FastEthernet0/0 associate ccm 1 priority 1 ! ! dial-peer voice 1 voip description Internode incoming to CCM translation-profile incoming sip-incoming destination-pattern .... voice-class codec 1 session protocol sipv2 session target ipv4:<YOURCCMIPHERE> incoming called-number .T dtmf-relay sip-notify rtp-nte ! dial-peer voice 2 voip description CCM outgoing to Internode translation-profile outgoing sip-outgoing destination-pattern 0T voice-class codec 1 session protocol sipv2 session target dns:sip.internode.on.net dtmf-relay sip-notify rtp-nte ! ! sip-ua credentials username <YOURUSERNAME/DIDHERE> password <YOURPASSWORDHERE> realm BroadWorks authentication username <YOURUSERNAME/DIDHERE> password <YOURPASSWORDHERE> realm BroadWorks registrar dns:sip.internode.on.net expires 240 sip-server dns:sip.internode.on.net ! ! line con 0 logging synchronous line aux 0 line vty 0 4 ! ! end
That should be everything needed to get up and running. When troubleshooting the CUBE function, debug ccsip messages, debug voice translation and debug voice dialpeer are your friends.