Sunday, December 19, 2010

Configuring trixbox and voip test

Hi, and thanks for reading part III of this tutorial.

In this part, I'm going to introduce you to setting up SIP extensions in
trixbox, and establishing voip calls.

We'll test VoIP calls between X-lite, a Windows based Software VoIP Phone,
and Sipdroid, a voip client for Android.

The purpose of this test is to verify our networking with trixbox is
operational just a tad before we lay out the big guns.

Configuring IP


If you're not satisfied in the IP automatically assigned to your VM, you can
modify it, if it's fine go ahead and skip to the next section.


  1. Launch VirtualBox if it's not up yet.

  2. In the login screen use root as user name
    and the password you entered during the installation (I hope you remember it!).

  3. Type system-config-network-tui to enter
    networking configuration screen:



  4. Choose Edit Devices and hit Enter, then choose your device and hit Enter again:



  5. You can modify its parameters. If you'd like to change to static IP, hit the spacebar when cursor is on Use DHCP to uncheck it, and customize parameters as needed:

    trixbox eth0 configuration

  6. Save everything by choosing OK and at the end, Save&Quit.

  7. We're not done yet, now we have to restart our network card, type
    (assuming eth0 is your NIC):

    ifdown eth0
    ifup eth0

    Then to verify your IP was indeed set type:
    ifconfig





Setting up extensions in trixbox

Before we start, I assume you've configured your IP, if not return to the previous section.
I'll be using [trixboxip] notation instead of a true IP in the examples follow.

In thie section we'll be setting up two SIP extensions.
Extension are basically endpoints that interface with asterisk.
You can configure extensions manually by editing various configuration scripts
and typing in some terminal commands, but trixbox comes with a very versatile
web interface to do almost everything through GUI.
For our purposes it is more than sufficient.


  1. Browse to http://[trixboxip] OR https://[trixboxip] for SSL secured page in your
    favorite browser to enter the web interface.
    Click switch at the top right corner of the page
    to enter Administration mode.



  2. The default credentials are:

    user: maint
    password: password



    NOTE: You can change the password using the command passwd-maint in the terminal.
    I suggest you do so for security purposes.

  3. To create new extensions head into PBX>PBX Settings:


  4. Now, head into Extensions:

  5. In the Add an Extension page make sure
    Generic SIP Device is selected (should be the default) and click Submit.

  6. Create an extension and later create another one in the same manner.
    The fields which are relevant are the following:

    User Extension - it's analogous to User Name.
    Display Name - optional, but nicer for SIP Caller Id.
    secret - account's password.



    Click Submit when you're done.

  7. After you've created 2 extensions click Apply Configuration Changes at the top of the page.

    The idea behind this approach is that you can do as much changes as you'd like
    to asterisk, and submit them, and all this without reloading the asterisk server.
    When you are ready to commit those changes the server is reloaded by clicking
    that button.



  8. Confirm reloading of the PBX:




OK, now that we've set-up extensions we're ready to test them out.

Configuring X-Lite and Sipdroid



First of all, we'll install X-Lite and connect to the server as the
first extension we've setup - I named it's user 500.
Second, we'll install Sipdroid on Android from the Market, and connect as the
second extension - I named it's 600.

  1. Download X-Lite from here

  2. Launch it, and right click on the display screen, choose SIP Account Settings:


  3. Now, choose Add... on the right:


  4. Fill in user first user's credentials:

    Display Name - Anything you'd like, its internal to X-Lite.
    User Name - First user's name.
    Password - Second user's password.
    Domain - trixbox's server url.




  5. Confirm you entries, wait a few moments and if everything's OK it should look like this:




Let's get to installing and configuring Sipdroid.
I'm assuming you have WiFi since this test is performed in a local network, in later tutorials,
I will explain how to expose to server outside of the LAN and through out NAT.

NOTE: If your phone supports SIP (I know some Symbian phones have
support built in, iPhone users should look for SIP client in the AppStore, Windows Mobile users should
do the same).


  1. First, enter the Market app and type in sipdroid in the search box, and download it (as of writing the article, the latest
    Sipdroid version was 2.0.1 beta).

  2. Open Sipdroid:
    Sipdroid main screen

  3. Press the phone's Menu button and choose Settings, fill in:

    Authorization Username - Second user's name.
    Password - Second user's password.
    Server or Proxy - trixbox's server url.
    Use WLAN - Check this checkbox so WiFi dialing will be enabled.

    Sipdroid account settings

  4. Now, press the phone's Back button to return to main screen and
    slide down the Notifications Bar to see if registration succeeded, if it does you should
    see [userName]@asterisk Registered:

    Sipdroid registered notification Android

    NOTE:
    If registration failed due to:

    • Timeout - make sure you've entered
      the proper server address, that the used port is 5060 and
      the protocol is UDP (in Sipdroid's settings).

    • Unauthorized access - make sure the user name and password entered in
      settings are correct.







Dialing from Sipdroid to X-Lite



If you've reached here you've just set-up a basic VoIP configuration, let's test it by
dialing from Sipdroid:


  1. Head into your phone's dialer and type in the user name you used in X-Lite and dial:


    NOTE: I once encountered an issue that seems to be an X-Lite bug which cause the call to fail,
    restart X-Lite in retry in such case.

  2. Answer the incoming call and make sure voice passes on each end:



    NOTE: If there's a problem recording within
    X-Lite you can configure recording device by right clicking it's display,
    and going into Options>Device and
    choosing the proper Microphone Device.



Excellent, now we've tested our quickly assembled VoIP system in our nifty
in-house WiFi.

In the next tutorial section we'll connect and configure the Linksys SPA3102 to
a router and an analog phone line.
Then, we'll create an extension for it in Asterisk and
configure its gateway to work for our VoIP to Analog Phone line
conversion purposes.

Stay tuned,
Max.

Sunday, December 12, 2010

Installing trixbox in VirtualBox

Hello again, thanks for bearing with me.

I'm going to explain step-by-step how to install trixbox in VirtualBox, this guide
assumes you have VirtualBox installed, if not, you can download it from here.

Virtual machine setup



  1. Grab the latest trixbox ISO from here, version 2.8.0.4 was latest at the time I wrote this tutorial.

  2. Start VirtualBox

  3. Click New


  4. You'll see this dialog, click next:


  5. In Name type trixbox, In OS Type select Operating System: Linux, Version: Red Hat
    and click Next.


  6. 512MB of memory is more than enough, if you've low memory in your PC, even 256MB should suffice, click Next.


  7. Now, let's create a virtual hard drive for trixbox, click Next


  8. The following wizard will start, click Next.


  9. Make sure Dynamically expanding storage is checked, this way the disk will
    expand on demand, this saves space.


  10. Pick a location into which you'd like to store the virtual disk file.
    The size of 8.00GB should suffice, remember that it will not really take up
    the whole 8.00GB since we've selected Dynamically Expanding Storage earlier.
    After initial installation, trixbox virtual drive consumes around 1.8GB.
    Click Next.


  11. Click Finish in the summary dialog:


  12. Click finish again in the Create New VM (Virtual Machine) summary dialog:





Configure VM


Now that we have created a virtual machine, we need to configure it in order to achieve the following goals:

  1. Make the VM boot from the trixbox ISO so we can install it.

  2. Make our the VM see our LAN so we'll be able to connect to it from
    the Outside world.



Let's accomplish these:

  1. Open settings dialog by selecting trixbox and clicking Settings:


  2. From the left pane, select Storage and on the right under IDE Controller choose Empty and click the folder icon.

  3. In the Virtual Media Manager click Add and browse for trixbox ISO file you've downloaded earlier.


  4. After choosing the trixbox ISO, click Select.


  5. The steps above made that the ISO will appear as a bootable CD-ROM to the machine.
    Now we need to make our machine visible in the network.
    To do so, on the left pane click Network and then on the right choose
    Attached to: Bridged Adapter and under Name choose your active network interface card, in my case I had to choose my Ralink WiFi card.

    You can use ipconfig /all in cmd to determine which card is connected to the network according to it's IP in the network.
    Close the settings dialog afterwards by clicking OK.




Installing trixbox


Now we're finally ready to install trixbox.
Before we start you may receive informative messages from VirtualBox regarding
the mouse being not active and the Host key being Right Control.

The host key (Right Ctrl) allows you to exit the VM and return to Windows.
If you have no mouse active in the VM use the Tab key to switch between
inputs and list boxes (more on that soon).


  1. Click Start:
  2. In the boot screen hit Enter.


  3. Choose your keyboard layout, not really important in truth since we'll be
    doing our configurations using a web browser, the keyboard layout is internally in
    Linux.

    To switch between Ok, Back and the list box use the Tab key.

    Focus on OK and hit Enter when ready.


  4. Choose your time zone, again, to move between buttons use the Tab key,
    focus on OK and hit Enter when ready to continue:


  5. Enter you root account password (Don't forget it!), focus on OK and hit Enter when done.


  6. Grab a beer while trixbox installs:


  7. The VM will reboot, now we need to remove the virtual CD-ROM or else we'll be stuck in an infinite setup loop, to do so go to the Devices Menu - remember to hit Right Ctrl if you're inside the VM to return keyboard and mouse focus to windows).
    In the devices menu choose CD/DVD Devices and click Unmount CD/DVD Device.


  8. Now, reboot - go to the Machine menu and choose Reset:


  9. After reboot you'll see this startup screen, hit Enter:


  10. OK, now wait a couple of seconds until Trixbox boots, you should see the following
    login screen:



    ***NOTE the IP might be different, in case
    you don't see an IP but only http:// you may have not setup the network card correctly.
    In that case, shut down the machine by choosing Machine>ACPI Shutdown, go to
    Settings, there go to Network and switch the network interface card to another one.
    Start the machine again and see if you get an IP address.



End of part II


I hope this tutorial has been useful to you. In the next one we'll be configuring
trixbox and testing it with a free softphone, called X-lite, to see if networking
works.

Thursday, November 18, 2010

Introduction

Welcome,
My name is Max, I'm a student majoring in software engineering in Israel.

In my final B.Sc project, I had a goal of figuring out how to
make cheaper cellphone calls using VoIP (Voice over IP),
and taking advantage of the lowering of landline
phone calls prices in Israel.

Cheaper calls virtualized asterisk based system

My project instructor suggested I checkout Asterisk,
an open source VoIP PBX (=Private Branch eXchange,
a sophisticated switchboard app).


I also wanted to experiment with Google Android OS
based phones.
So the VoIP client had to be written for Android.

*** Please note that the VoIP protocol mentioned later is not restricted to
Android but clients are available for iPhone, Nokia, Windows Mobile, Blackberry etc.


And so, I began digging through the net to figure out how can I combine
the jigsaw parts above and create a working cheaper-phone call system.

What I learned is that there exists a well known protocol for VoIP called
SIP (Session Initiation Protocol) which is in essence, resembles HTTP.
SIP is for serving the needs of VoIP like HTTP is for serving the needs
of web pages.

Asterisk supports SIP out of the box but on it's own its quite complex to setup as
it's a Linux based app and takes time to configure thoroughly.
To make life easy there are some companies like Fonality which
create custom-made and tailored distributions of Asterisk.
Fonality's distro is called Trixbox,
latest version is based on CentOS 5.5 with Asterisk 1.6 and a web based frontend
for configuring settings based on FreePBX.

The trouble with Trixbox is that it requires a clean hard drive,
as its installation by default, formats everything, so what I
came up with is installing it inside a virtual machine using VirtualBox.

More so, I found out about another really cool open source project
called Sipdroid which is a SIP client for the Android OS.

Finally, the last piece of the puzzle is how to convert analog phone line to
a digital SIP based line.
Asterisk supports various hardware devices ranging from internal PCI cards to external ATAs
(Analog Telphone Adapters) router like devices.
Most of those converters are very expansive (amounting to thousands of USD).

Being a broke student, I looked for a cheap, yet flexible enough converter and I stumbled
upon the Cisco Linksys SPA3102 which price amounts to around $100 - $120.
It's a marvelous piece of hardware, although limited to only FXO port
(the port into which you plug-in your phone line) and has no echo cancelling
features, does the trick pretty well at an affordable price.

In the end, I glued everything together and created a method for calling from
my cellphone using WiFi/3G/EDGE/GSM from my landline plain simple telephone network.
And thus getting quite a discount when doing so, it's quite nice when you're abroad
and feel like calling cheap through WiFi.

Please stay tuned, I'm going to describe the whole process of making this
possible starting with installation of trixbox via VirtualBox,
configuration and setup of SPA3102
and finally, connecting and calling through Sipdroid.



Cheers, Max.