• Asterisk 1.6.0 + Exchange 2007 SP1 Unified Messaging

    Last week I discussed how to connect Asterisk with OCS Mediation Server over TCP.  I figured since we can connect Asterisk to OCS, why not to Exchange UM.  I will go over the configuration changes I made to Asterisk for this, but will not go into detail – since most of it was covered last week.

     

    ** Just wanted to add a side note.  This configuration is not supported, but again I like to play – so here you go. **

     

    Asterisk Configuration Changes

     

    SIP.CONF

     

    [general]

    context = default

    bindport = 5060

    bindaddr = 0.0.0.0

    tcpbindaddr = 0.0.0.0

    tcpenable = yes

    promiscredir = yes  ** This is new line added **

     

    promiscredir -> If set to yes, allows 302 or REDIR to non-local SIP Address

     

    [SIP_VM]

    type = peer

    host = 10.100.16.20

    qualify = yes

    transport = tcp

     

    [50012]

    type = friend

    callerid = Exchange User <50012>

    secret = 50012

    host = dynamic

    canreinvite = no

    dtmfmode = rfc2833

    mailbox = 50012

    disallow = all

    allow = ulaw

    transport = udp

     

    You have seen most of this configuration before.  We created a new Trunk/Peer that will connect to the Exchange UM Server.  I also created a new Extension since I setup my Exchange DialPlan to support 5-Digit extensions.

     

    Now we have to make some changes to the Asterisk Dialplan.  There are two different configurations.

     

    1.  If you are going to call into Exchange UM.

     

    ;Exch VM

    exten => 79999,1,Answer

    exten => 79999,n,Dial(SIP/SIP_VM/${EXTEN})

    exten => 79999,n,Busy

    This just gets added to the outbound context in your dialplan.

     

    2.  Here we will create a simple Macro to dial the extension then redirect to Exchange UM if no one answers.

     

    ; User Extension Macro

    [macro-stdexten]

    exten => s,1,Answer

    exten => s,n,Set(MBEXT=${ARG1})

    exten => s,n,Dial(SIP/${ARG1},20)

    exten => s,n,SipAddHeader(Diversion:<tel:${MBEXT}>)

    exten => s,n,Dial(SIP/SIP_VM/${EXCHUM})

    exten => s,n,Busy

     

    exten => _5XXXX,1,Macro(stdexten,${EXTEN})

     

    So your extension.conf file will now look like this:

     

    [general]

    static=yes

    writeprotect=no

     

    [globals]

    EXCHUM = 79999

     

    [default]

    exten => _5XXXX,1,Macro(stdexten,${EXTEN})

     

    include => outbound

     

    [macro-stdexten]

    exten => s,1,Answer

    exten => s,n,Set(MBEXT=${ARG1})

    exten => s,n,Dial(SIP/${ARG1},20)

    exten => s,n,SipAddHeader(Diversion:<tel:${MBEXT}>)

    exten => s,n,Dial(SIP/SIP_VM/${EXCHUM})

    exten => s,n,Busy

     

    [outbound]

    exten => _NXXNXXXXXX,1,Set(EXT=+${EXTEN})

    exten => _NXXNXXXXXX,n,Dial(SIP/SIP_TRUNK/${EXT})

    exten => _NXXNXXXXXX,n,Busy

     

    ;Exch VM

    exten => 79999,1,Answer

    exten => 79999,n,Dial(SIP/SIP_VM/${EXTEN})

    exten => 79999,n,Busy

     

    Now this is done we will move onto the Exchange UM configurations.

     

    The first step is to create a UM Dial Plan.  Open up Exchange Management Console -> Under Organization Configuration -> Unified Message.  Select New UM Dial Plan.  There will be a wizard that walks you thru the configuration.  The important pieces are: 

      

    -    URI Type: Telephone Extension

    -    VoIP Security: Unsecured

     

     

    Once you have the Dial Plan configured -> edit the dial plan and create a Subscriber Access Number.

     

     

    This is the number that is dialed from Asterisk to reach your VM Box.

     

    Next we need to configure a UM IP Gateway.  This is done by using the New UM IP Gateway wizard.

     

     

    You can leave the default UM Mailbox Policy that was created when you created the Dial Plan.  The only thing left is it to associate the Dial Plan with your UM Server.

     

    Under Server Configuration -> Unified Message -> Properties.

     

    Add your new Dial Plan to the UM Settings.

     

     

    Last is to apply the Dial Plan to a User Mailbox. You can use the Wizard to enable the User for Unified Messaging.

     

    Now you are ready to test making a call from your SIP Client to Exchange UM.

     

    When you make a call from Asterisk and if it fails with the following error, you will need to patch asterisk and recompile.

     

     

     

    The formatting of the SIP call is incorrect.  It is showing SIP/::::TCP@79999@10.100.16.20:5065.

     

    To download the patch http://bugs.digium.com/view.php?id=13523

     

    Download the second patch ‘13523v2.patch’ and apply the patch.  To apply the patch you can follow these instructions.

     

    -    Change to install directory (/usr/src/pbx/asterisk-1.6.0)

    -    Download patch

    -    patch –p0 < 13523v2.patch

    -    You will get a success once this patch is installed

    -    /etc/init.d/asterisk stop

    -    make clean

    -    make

    -    make install

    -    /etc/init.d/asterisk start

     

    Now when you make the same call you should see the following output:

     

     

    You can see the difference in how the SIP call is formatted.

     

    Well that’s it.  Have fun – enjoy playing. 

  • Asterisk 1.6 with Office Communications Server 2007

    I’ve personally been waiting for this release of Asterisk for some time now! After researching a little, I found out that Asterisk 1.6 now supports TCP & TLS.  Currently it is still considered experimental – but hey, it’s always fun to play!

    For those of you who are only familiar with Trixbox or FreePBX, there is no support for any graphical interface on 1.6 as of yet.  But,I will keep this simple and to the point.  Installing Asterisk on a Linux box with Kernel 2.6 is fairly straightforward.  In this Lab, I deployed CentOS 5 - Kernel 2.6.18 with Asterisk 1.6.  When installing the OS you will also need the Kernel Sources and Kernel Headers packages.

    First step of course is to build a Linux Box – I built mine in a VM, but installing on hardware will work just the same. 

    You can download Asterisk from www.asterisk.org. On your Linux box make a directory under /usr/src – called pbx.  From that directory you can use the following command:

    wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.6.0.tar.gz

    Next step is to unpack the package:

    tar zxvf asterisk-1.6.0.tar.gz

    With that done – we use the common method to build the source:

    Change into that directory – cd asterisk-1.6.0

    ./configure

    make

    make install

    make config

    make samples

    Start Asterisk by running /etc/init.d/asterisk start

    Then run asterisk –vr.  This will bring you into the Asterisk CLI:

    Now you know Asterisk is up and running and we can get into modifying some configuration files.  For this Lab there are only 2 files we need to be concerned with; SIP.CONF & EXTENSIONS.CONF which can be found under /etc/asterisk.

    Starting with the Sample Config files that were created we can just select and delete everything and then paste these example configs in:

    SIP.CONF

    [general]

    context = default

    bindport = 5060

    bindaddr = 0.0.0.0

    tcpbindaddr = 0.0.0.0

    tcpenable = yes

     

    [SIP_TRUNK]

    type = peer

    host = 10.100.16.78

    qualify = yes

    transport = tcp,udp

     

    [5001]

    type = friend

    callerid = Linux User <5001>

    secret = 5001

    host = dynamic

    canreinvite = no

    dtmfmode = rfc2833

    mailbox = 5001

    disallow = all

    allow = ulaw

    transport = udp

     

    EXTENSIONS.CONF

     

    [general]

    static=yes

    writeprotect=no

     

    [globals]

      

    [default]

    exten => _+XXXX,1,Answer()

    exten => _+XXXX,n,Set(CALLERID(name)=You Did It)

    exten => _+XXXX,n,Set(CALLERID(num)=${CALLERID(num):1})

    exten => _+XXXX,n,Goto(${EXTEN:1},1)

     

    exten => 5001,1,Answer()

    exten => 5001,n,Dial(SIP/5001,20,tr)

    exten => 5001,n,Hangup

     

    include => outbound

     

    [outbound]

    exten => _NXXNXXXXXX,1,Set(EXT=+${EXTEN})

    exten => _NXXNXXXXXX,n,Dial(SIP/SIP_TRUNK/${EXT})

    exten => _NXXNXXXXXX,n,Busy

    SoftPhone

     

    Next we will use X-Lite SoftPhone to register extension 5001 to Asterisk.

     

     

     

    Configure the SIP Account on the SoftPhone:

     

     

    When you hit the Apply button you will be registering the SoftPhone with Asterisk:

     

     

    You can also see the registered extension from the Asterisk CLI/Console:

     

     

    Now onto the OCS Configuration (In my lab I have a single SE server, and I installed a Mediation Server).  Let’s start with the Mediation Server. 

     

    As you see below, there are 2 IP Addresses on the Mediation Server.  Both of them are on the same network.  Of course you can place them on different networks if needed.  Note, if they are in the same Network make sure that the External or PSTN facing interface set to not register with your internal DNS:

     

     

    On the Next Hop Connections Screen, you can see that we are pointing this back to the Asterisk PBX and the Inbound Routing is pointing back to the OCS Pool.

     

     

    The Mediation Server configuration is not any different than other configuration when setting up Enterprise Voice pointing to any other SIP Gateway.

    Now, onto the Global Forest Property and Pool configurations.

     

    I have added this Location Profile Normalization Rule for this test:

     

     

    Now that you have a Normalization Rule built you will need to make a Policy and Route.  Here is an example of the Route I built for Testing:

     

     

    One final step before making a call from the OCS MOC Client to the Softphone is to configure your OCS User for Enterprise Voice.

     

    Under your OCS Pool, select Users then right click to get to the Properties of the user.  Click Configure on the User Properties Screen.

    When you log in from you MOC 2007 Client, you will be able to dial 5001.  This will get normalized to +5001 and Dial out via the Mediation Server then through Asterisk to the SoftPhone. 

     

    On the PC with the SoftPhone you will a pop-up for the call will appear and you can answer or ignore it:

     

     

    Now let’s make a call in the other direction.  On the “MOC Side” you will get the toast indicating a call is coming in:

     

     

     

    Well that’s about it! I am sure I could have gone into more detail regarding setting up OCS and the Mediation server.  But I wanted to concentrate on showing how to configure Asterisk, since the configuration for OCS is the same as when configuring it for any other SIP Proxy/SIP Trunk (Mediation Server/Media Gateway).

     

    Also there is so much you can do with Asterisk.  No physical TDM cards were used, but in a production environment one could easily add Analog and/or T1 TDM and make phone calls across the PSTN.