Friday, July 24, 2009

Configuring Asterisk/trixbox for Kuwait

WARNING: I want to alert everyone to NOT use trixbox due to security concerns.

I've been told by some guys in asterisk-related IRC channels that trixbox has known security problems and is not fixing them.

A quick search turns many results.

There are alternatives and I will document their installation process in a later post.


This post talks about how to setup a Private Branch Exchange (PBX) using an open-source solution called Asterisk. It's similar to solutions from Panasonic, Cisco, or Avaya for houses, offices or enterprises, only provides various features at very low cost.

What is Asterisk?

Asterisk is a software implementation of a PBX, that is, it's an application that runs on top of an Operating System. It allows you to receive and make phone calls over your telephone landlines (analog or digital) and over the network. And yes, it's free.

Why use it?

A small PBX from Panasonic that offers 2 input phone lines and about 8 extensions, with 6 phones comes around at 170 KD. You're limited to Panasonic's phones and you can't carry your extension outside the house (or wherever you implemented the solution). If you want wireless phones, you have to buy proprietary Access Points (APs) from Panasonic and if you have Wireless Access Points in your place, it's gonna look ugly to have 2 APs next to each other!

Asterisk works on standard network protocols and equipment. This means you can connect a computer, laptop, or a phone that uses the standard SIP protocol (newer mobile phone models support SIP, too!). This also means that if you have a wireless AP at home to distribute your Internet connection, you can buy a wireless phone which will work with Asterisk!

Another great option is that since it's all networked together, you can connect to your extension over the Internet. Say you implement Asterisk in your house, configure your mobile phone to connect to Asterisk, then anyone who calls you at home, will have the phone call sent to you over the Internet to your mobile phone!

What features does it offer?

Everything a normal PBX does, and more!
  • Voice mail

  • Voice mail to email

  • Conference calling

  • Interactive Voice Response (IVR) / phone menus

  • Automatic call distribution

  • Fax to email

  • Call queues

  • And more!

Check out the list on Asterisk's website.

What is trixbox?

trixbox (all in small letters) is an Asterisk-based distribution, that combines Asterisk and a few more packages to enhance the PBX functionality and experience.

I used both trixbox and AsteriskNow (another distro), but felt more comfortable with trixbox, and this post assumes the use of trixbox 2.6.2 Community Edition (CE) based on Asterisk 1.4 (1.6 exists but I haven't explored it as it seems to be still in beta).

trixbox also offers a business edition, as well as the original Asterisk. Feel free to visit their websites and explore the options.

Table of Contents

  1. Hardware Requirements and Configuration

    1. Addon Card

    2. Computer Specifications

  2. Download trixbox

  3. Installing trixbox

  4. Configuration

    1. Network Configuration

    2. Create An Extension

    3. General Settings

    4. Outbound Routes

    5. Trunks

    6. Inbound Routes

    7. Configuring Caller ID

  5. Applying Settings

  6. Installing a softphone

  7. Configuring Ekiga

  8. Notes

  9. Sources

  10. Image Index

1. Hardware Requirements and Configuration

Below are the required hardware specifications and addon cards. Read carefully!

1.1 Addon Card

To connect Asterisk to an analog phone line (Public Switched Telephone Network / PSTN, also known as Plain Old Telephone Service / POTS), you need a PCI card that converts signals from analog to digital and vice-versa.

Companies typically sell a base PCI card and pluggable modules. On, the base card from Digium is TDM410P and the module required to connect the machine to PSTN is called X100M.

The X100M enables what is called an FXO port. FXO port is the port you connect your PSTN line to. The other type of ports is called FXS; you connect analog phones to this port.
To easily remember these ports, follow this:
FXS -> Station -> Phone device.
FXO -> Office -> PSTN line.

A company called OpenVox offers the same base card and the FXO port for much less than Digium.

1.2 Computer Specifications

My test computer is a stretch to what I actually need for home. According to what I read online of previous implementations, each phone call requires 33MHz of CPU power. People were able to achieve 40 concurrent calls over an 800MHz processor with 256MB RAM!

My PC is a Pentium D 3.0GHz with 1GB RAM. Pentium D is dual core, so I have 6GHz at my disposal!
Initial installation takes 1.3GB only, so you could do fine with a 20GB hard disk for a home setup.

2. Download trixbox

trixbox has known security problems. USE AT YOUR OWN RISK! Alternatives are: AsteriskNow and PBX in a Flash.

I will post on how to install one of those in a later post.

Download trixbox CE here. Make sure to get the 2.6.x version as it's based on Asterisk 1.4.

3. Installing trixbox

After you download the ISO file, burn it on a CD as an image using your favorite burning software. Before proceeding with the installation, make sure you have installed the module on the base card and the card is plugged properly into the PCI port. Load the CD into the PC and boot up the CD.

By default, trixbox uses all disks in the computer; use "advanced" to make up your own partitioning, that is, when the CD boots, type "advanced" (without double quotes) and press enter.

Proceed with defaults unless otherwise specified below.

Upon reaching the partitioning stage, deselect disks that you don't want to be touched, and select: Remove all partitions & create default layout. (It's still safer to physically remove disks you don't want to be touched). Formatting the disk takes a long time. They use ext3 filesystem by default.

The password you type during setup is used to login to the machine later for any maintenance you may need (not required for web configuration). SSH is enabled by default, with root access.

4. Configuration

Skip section 4.1 if you have a router assigning dynamic IPs. If you wish to assign a static IP, then follow its steps.

4.1 Network Configuration

If you don't have a DHCP server running (A router that assigns IP addresses to devices on the network), define the IP manually by logging in to the terminal, using the username "root" (case sensitive!) and the password you chose during installation.

In the command prompt (shell), type: system-config-network
Press enter to select the proper device, then go to "Use DHCP" and press the space bar to deselect it and enable the other options.

Static IP: Make up an IP that is not used by any other device on the network.
Netmask: should be a safe bet.
Default gateway IP: The IP of your router.
Quite to save.

When going back to the shell type: service network restart

Now you should be able to login to the web interface: http://<static ip>

On the top-right, click the link "switch" -- user: maint, pass: password. [image1]

4.2 Create An Extension

You'll first create an extension for yourself to receive and make phone calls from using your computer.
After you login, you'll reach the home page [image2]. Click on the PBX menu then choose "PBX Settings." Now you are at the System Status page [image3]. Click the Extensions link in the left menu, then select "Generic SIP Device" from the drop list and click "Submit" [image4].

SIP Device:
* User extension: 200 (safe bet. make sure you don't use a range of existing system extensions)
* Display name: Your name
* Secret: <alphanumeric>

* Vocie mail: Enabled
* Voicemail password: <numeric>
* Email: your full email address.
* Pager: Leave it blank
* Email attachment: Yes
* Play CID: Yes

4.3 General Settings

* Ringtime Default: Reduced it to 5 seconds for testing
* Find users in the company directory: First or last
* Announce extension: Yes
* Country: United States (Default)
* 24-hour format: No (Changed it from Yes so that time service is said in AM/PM -- mom is not a fan of the 24 hour format)
* Check updates: No (Not a fan of background checking & installation...)

4.4 Outbound Routes

This defines how you're going to call outside. The info below means that you dial 9 to get an external line, then it will dial the rest of the number.

* Default auto-created route: 0 9_outside: Details:
Password: left it blank
Dial patterns: 9|. (Default)
No need to submit as nothing has changed

4.5 Trunks

A trunk is a phone line (PSTN) in this case. In cases of using ISDN, it means having 30 lines at your disposal. The trunks page [image5] shows the available trunking options.

Auto created trunk: Trunk ZAP:
* Outbound Caller ID: Your phone number
* Never override: Checked
* Max channels: 1 (Since it's a phone line, it can make only one phone call at a time)
Note that the above are not required, but recommended.

4.6 Inbound Routes

Where and how should incoming calls be treated. Remember, these are just basics to get things started.

I created a general rule for all phone numbers [image6]: Leave all fields blank & scroll down to "Set Destination"
* Select "Extension" and choose your extension (should be the only one for now)
This will redirect all phone calls to your extension (for now)

4.7 Getting Caller ID to work

It doesn't work out of the box, and it requires that you have Caller ID (CID) service enabled by the Ministry of Communication!

I figured that since we had telephone lines way back, it's most likely similar to the British system, and what do you know, I was right! :D

PBX menu -> Config File Editor -> zapata.conf [image7]
Add these lines below threewaycalling

cidsignalling=v23 ;added manually: valid values: bell, v23, dtmf
cidstart=polarity ;added manually: valid values: usehist, ring, polarity


5. Applying Settings

After you've done all this, there's an orange link at the top [image8], just below the menus, click it to save the new settings [image9] and then go to System menu -> System Maint -> Reset Now [image10] and [image11]. This will restart the Asterisk service and activate the new settings.

6. Installing a softphone

Now you just need to test it out with a softphone (software on a PC/laptop). I used Ekiga for my tests. You can download it for free here.
How can you not use this client, when they advertise their client with a picture of a cute girl?! ;p
Feel free to use any softphone you find suitable. The settings below should apply to any.

7. Configuring Ekiga

When you first run Ekiga, ignore/skip the initial account creation stuff. When the main window appears, go to Edit -> Accounts, then click on Account menu and add a SIP account:

Name: Display name
Registrar: The static IP you chose for trixbox
User: Your extension number
Authentication user: Your extension number
Password: the "secret: you chose while creating your extension
Timeout: Leave it at its default value.

If everything is fine, it will say that your account has been registered. Go to the web interface and click on PBX -> PBX Settings, and you'll see that you have 1 phone online.

8. Notes

* trixbox runs on CentOS, which is a RedHat Enterprise spin-off. RPMs will work fine with it.
* trixbox runs smartd and it did detect bad sectors on one of the disks!
* When the system boots, before using the web interface, memory usage is: 70MB. After doing the configurations over the web: 120MB.
* During a call from my laptop to my mobile over a landline, the CPU is 2% utilized. Memory usage didn't change.
* Asterisk writes a lot of data into its log files and they grow quite fast. Keep an eye at /var/log/asterisk/full
* In theory, each phone call requires 30-33MHz of CPU power, so a 3GHz CPU can handle 90 concurrent calls using G711 encoded audio. If you use A-law codec, you can achieve about 310 concurrent calls.
There are reports that have tested 700 concurrent calls on a Pentium4 2.5GHz + 2GB RAM machine. See Asterisk Dimensioning link below.

9. Sources and References

10. Image Index

Image 1: Login Screen

Image 2: Home

Image 3: System Status and PBX Settings

Image 4: Extensions

Image 5: Trunks

Image 6: Inbound Routes

Image 7: Config File Editor

Image 8: Apply Settings

Image 9: Confirm Applying Settings

Image 10: System Maintenance

Image 11: Restarting Asterisk Service