To co chcę Wam dać w tym artykule, to prosta instrukcja, która krok po kroku poporowadzi Cię od instalacji, przez konfigurację, do zestawienia pierwszego połączenia telefonicznego przy użyciu software’owej centralki telefonicznej Asterisk PBX. Założenia? Proof of Concept rozwiązania, a więc ma być szybko.

  1. Krok 1 – instalacja linuksa
  2. Krok 2 – instalacja pakietu Asterisk
  3. Krok 3 – konfiguracja pakietu Asterisk
  4. Krok 4 – konfiguracja iptables
  5. Krok 5 – instalacja i konfiguracja 3CX Phone
  6. Krok 6 – instalacja i konfiguracja CSipSimple (opcjonalnie)
Krok 1 – instalacja linuksa

Jeśli już masz zainstalowanego linuksa lub chcesz zainstalować inny linuksopochodny system, pomiń ten krok. Potrzebny nam będzie tylko dostęp do powłoki systemowej z uprawnieniami root’a.

Przyznam, że nie jestem fanbojem linuxów – szczerze mówiąc nie znam łatwiejszego i sprawiającego mniej problemów Linuksa niż Ubuntu. Obraz dysku CD można pobrać tutaj: http://www.ubuntu.com/download/desktop. Jeśli masz zamiar zainstalować ten system na fizycznej maszynie, skorzystaj z tej instrukcji: http://www.ubuntu.com/download/help/install-ubuntu-desktop. Ja skorzystałem z narzędzi do wirtualizacji VMware, gdzie asystent instalacji zrobi to wszystko za Ciebie.

Zainstalowane? Mam nadzieję, że wszystko się udało. Zaczynamy od uruchomienia terminala (program Terminal) oraz przełączenia w tryb root’a:

wcy@ubuntu:~$ sudo su
[sudo] password for wcy:
root@ubuntu:/home/wcy#

Jesteśmy gotowi do rozpoczęcia instalacji Asterisk’a.

Krok 2 – Instalacja pakietu Asterisk

Najpierw musimy zlokalizować paczkę z Asteriskiem. Ściężkę do archiwum można pobrać z sekcji Core Software na stronie http://www.asterisk.org/downloads. Jeśli posiadasz już pełną ścieżkę do paczki, należy paczkę pobrać, przenieść do folderu docelowego, rozpakować oraz zainstalować:

wget http://downloads.asterisk.org/pub/telephony/certified-asterisk/certified-asterisk-1.8.11-current.tar.gz
mv certified-asterisk-1.8.11-current.tar.gz /usr/src
cd /usr/src/
tar zxvf certified-asterisk-1.8.11-current.tar.gz
cd certified-asterisk-1.8.11-cert7/
./configure --disable-xmldoc

U mnie etap konfiguracji rzucił błędami, z których wynikało, że brakuje kilku zależności. Instalacja kilku pakietów pomogła:

apt-get update && apt-get upgrade
apt-get install build-essential libssl-dev zlib1g-dev libncurses5-dev

Jeśli masz już wszystko co potrzebne do instalacji, etap konfiguracji powita Cię czymś takim:

configure: Menuselect build configuration successfully completed

               .$$$$$$$$$$$$$$$=..
            .$7$7..          .7$$7:.
          .$$:.                 ,$7.7
        .$7.     7$$$$           .$$77
     ..$$.       $$$$$            .$$$7
    ..7$   .?.   $$$$$   .?.       7$$$.
   $.$.   .$$$7. $$$$7 .7$$$.      .$$$.
 .777.   .$$$$$$77$$$77$$$$$7.      $$$,
 $$$~      .7$$$$$$$$$$$$$7.       .$$$.
.$$7          .7$$$$$$$7:          ?$$$.
$$$          ?7$$$$$$$$$$I        .$$$7
$$$       .7$$$$$$$$$$$$$$$$      :$$$.
$$$       $$$$$$7$$$$$$$$$$$$    .$$$.
$$$        $$$   7$$$7  .$$$    .$$$.
$$$$             $$$$7         .$$$.
7$$$7            7$$$$        7$$$
 $$$$$                        $$$
  $$$$7.                       $$  (TM)
   $$$$$$$.           .7$$$$$$  $$
     $$$$$$$$$$$$7$$$$$$$$$.$$$$$$
       $$$$$$$$$$$$$$$$.

Instalacja:

make install

Po pomyślnej instalacji stworzymy przykładowe pliki konfiguracyjne, które w kolejnym kroku będziemy modyfikować.

 +---- Asterisk Installation Complete -------+
 +                                           +
 +    YOU MUST READ THE SECURITY DOCUMENT    +
 +                                           +
 + Asterisk has successfully been installed. +
 + If you would like to install the sample   +
 + configuration files (overwriting any      +
 + existing config files), run:              +
 +                                           +
 +                make samples               +
 +                                           +
 +-----------------  or ---------------------+
 +                                           +
 + You can go ahead and install the asterisk +
 + program documentation now or later run:   +
 +                                           +
 +               make progdocs               +
 +                                           +
 + **Note** This requires that you have      +
 + doxygen installed on your local system    +
 +-------------------------------------------+
root@ubuntu:/usr/src/certified-asterisk-1.8.11-cert7# make samples
Installing adsi config files...
/usr/bin/install -c -d "/etc/asterisk"
.
.
.
Krok 3 – konfiguracja pakietu Asterisk

Nas Asterisk już jest prawie gotowy do uruchomienia, ale zanim to, do edycji pozostaje nam kilka plików konfiguracyjnych. Przejdźmy do katalogu /etc/asterisk/, gdzie znajdują się wszystkie pliki konfiguracyjne.

cd /etc/asterisk/

Do modyfikacji plików konfiguracyjnych możemy użyć dowolnego edytora graficznego lub tekstowego.

Gedit:

gedit modules.conf

Nano:

nano modules.conf

# Zarządzanie ładowaniem modułów – modules.conf

W pliku możemy zdefiniować jakie moduły mają być ładowane podczas startu Asterisk’a. Na nasze potrzeby minimalną konfiguracją jest:
[modules]
autoload=yes

Nie zapomnij zapisać zmian ;) Dla edytora nano CTRL+W, CTRL+X.

# Konfiguracja dla protokołu SIP – sip.conf

Do zestawienia połączenia głosowego potrzebujemy dwóch telefonów VoIP. Zatem konfiguracja będzie wyglądać następująco:


[general]
port=5060
bindaddr=0.0.0.0
disallow=all
allow=ulaw

[101]
type=peer
host=dynamic
secret=101
context=users
mailbox=101@default

[102]
type=peer
host=dynamic
secret=102
context=users
mailbox=102@default

Asterisk będzie nasłuchiwał na porcie 5060 (domyślnie dla SIP, jeśli ustawisz inny nie zapomnij odpowiednio skonfigurować klienta SIP) niezależnie od konfiguracji IP interfejsu. Za aliasami 101 i 102 znajduje się konfiguracja dwóch telefonów VoIP. Telefony mogą łączyć się z dowolnego adresu IP za pomocą haseł odpowiednio 101 i 102.

# Konfiguracja “dialplanu” – extensions.conf

W tym pliku Asterisk przechowuje konfigurację do “trasowania” połączeń. Zachowanie centralki można porównać do routera, który kieruje ruchem wg reguł/tras zapisanych w tym pliku. Podstawową konfigurację przedstawiam poniżej:


[macro-phone]
exten => s,1,Dial(SIP/${MACRO_EXTEN},25)
exten => s,n,Goto(${DIALSTATUS},1)
exten => ANSWER,1,Hangup
exten => CANCEL,1,Hangup

[stations]
exten => 101,1,Macro(phone)
exten => 102,1,Macro(phone)

[local]
exten => _NXXXXXX,1,Dial(SIP)

[users]
include => stations
include => local

Na chwilę obecną nie znalazłem jeszcze w Internecie wyczerpujących informacji o tworzeniu dialplanu w przystępnej formie. Postaram się stworzyć o tym osobny artykuł. Więcej o konfiguracji pliku extensions.conf możesz znaleźć tutaj:


Krok 4 – konfiguracja iptables

Zgodnie z tym co podaliśmy w konfiguracji SIP w pliku sip.conf, Asterisk będzie oczekiwał pakietu rejestracyjnego SIP z telefonu na porcie 5060.

W zależności od dystrybucji, możemy mieć domyślnie włączony firewall czyt. linuksowy filtr/router pakietów, który nie pozwoli na wpuszczanie czegokolwiek na tym porcie. Zalecanym rozwiązaniem jest rozważne otwarcie jedynie tego portu, dlatego też zachęcam do zapoznania się z dokumentacją iptables i odpowiednią konfiguracją. W tym artykule ograniczę się po prostu do wyłączenia iptables.

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
Krok 5 – instalacja i konfiguracja 3CX Phone

Sprawdźmy czy Asterisk zadziała. Do testów posłużył mi softphone 3CX Phone, którego można pobrać stąd: http://www.3cx.com/blog/3cxphone/windows/installation/. Instalacja przebiega standardowo, a po uruchomieniu, softphone wygląda mniej więcej tak:

Aby przejść do konfiguracji kliknij “New account” w prawym głównym rogu softphone’a. Do poprawnej konfiguracji będziesz potrzebować IP hosta, na którym zainstalowaliśmy Asterisk. Przykładowa konfiguracja poniżej:

Po zaakceptowaniu konfiguracji konta, 3CX Phone automatycznie rozpocznie próbę rejestracji w centralce Asterisk. W przypadku poprawnej rejestracji, 3CX Phone wyświetli status “On Hook” i będzie gotowy do wykonywania/odbierania połączeń! ;-) Poprawną rejestrację telefonu zakomunikuje także nasz Asterisk przy pomocy komunikatu wyświetlanego na konsoli CLI:

-- Registered SIP '101' at 192.168.127.6:54576

Jeśli coś poszło nie tak, softphone nadal nie może się połączyć, przede wszystkim sprawdź:

  • czy wszystkie moduły Asterisk na pewno zostały poprawnie załadowane?
Do asteriskowego CLI wpisz komendę:
config list
Oczekujemy, że konfigurowane przez nas pliki *.conf zostały załadowane.
  • czy połączenie sieciowe z Asteriskiem działa poprawnie (ping)?
  • czy nasz 3CX Phone wysyła poprawne pakiety SIP Register do poprawnego hosta, jakie odpowiedzi otrzymuje? (polecam użycie Wireshark)
  • czy użyłeś prawidłowego numeru i hasła? ;-)
Krok 6 – instalacja i konfiguracja CSipSimple (opcjonalnie)

Zamiast konifugracji innego klienta SIP, możesz użyć tego samego co w kroku 5, tylko że na innym hoście. Ponieważ w mojej sieci LAN razem z moim windows’owym 3CX Softphoone oraz linuksową centralką Asterisk obecny jest także smartphone z Androidem, postanowiłem wykorzystać go do testów. Jeśli chodzi o klienta SIP na system Android padło na CSipSimple (do pobrania w Google Play: https://play.google.com/store/apps/details?id=com.csipsimple&hl=pl). Pamiętaj, aby smartphone połączyć z tą samą siecią LAN, w której stoi Asterisk. Najlepszym rozwiązaniem będzie Access Point WiFi. Klienta SIP konfigurujemy analogicznie, z tą różnicą, że na drugi numer skonfigurowany w pliku sip.conf. Poniżej przykładowa konfiguracja:

CSipPhone:

W lewym dowlnym rogu przy pomocy ikony kluczyka przechodzimy do menadżera kont:

Następnie dodajemy konto, wybierając konfigurację “Basic”:

Przykładowa konfiguracja:

Pomyślna próba rejestracji:

I w końcu! Nadeszła na ekscyptująca chwila! Czy uda się zestawić połączenie głosowe?

Mnie się udało!


== Using SIP RTP CoS mark 5
 -- Executing [101@users:1] Macro("SIP/102-00000000", "phone") in new stack
 -- Executing [s@macro-phone:1] Dial("SIP/102-00000000", "SIP/101,25") in new stack
 == Using SIP RTP CoS mark 5
 -- Called SIP/101
 -- SIP/101-00000001 is ringing
 -- SIP/101-00000001 answered SIP/102-00000000
 -- Remotely bridging SIP/102-00000000 and SIP/101-00000001
 == Spawn extension (macro-phone, s, 1) exited non-zero on 'SIP/102-00000000' in macro 'phone'
 == Spawn extension (users, 101, 1) exited non-zero on 'SIP/102-00000000'

A Tobie? Czekam na Wasze komentarze! ;)