Asterisk je open source softwarová ústředna, která se používá k přijímání a přenosu hovorů, poskytování hlasové pošty, spojování hovorů, konferencí, řízení hovorů a automatizaci zákaznického servisu. Je to velmi výkonný a flexibilní systém, který lze nasadit na široké škále hardwaru, od malých jednoúčelových zařízení až po velké servery.

Podíváme na to, jak nainstalovat Asterisk na ARMbian Ubuntu 22.04 Jammy. Jak nastavit vlastní VOIP server s několika klienty.

Začneme stažením a rozbalením aplikace

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
tar -xvzf asterisk-20-current.tar.gz
cd asterisk-20.*

Nejpve pomocí skritpu nainstalujeme podporu formátu mp3

sudo contrib/scripts/get_mp3_source.sh

Následně je potřeba doinstalovat potřebné balíčky. K tomu použijeme instalační skript s parametrem test, který na výstupu vypíše potřebné balíčky k instalaci. Pokud chceme provést přímou instalaci, stačí změnit parametr na install.

sudo contrib/scripts/install_prereq test

Dále připravíme konfiguraci

sudo ./configure

Spustíme nastavení

sudo make menuselect

A nakonec sestavíme

sudo make -j2

Instalace programu a souborů

sudo make install
sudo make samples
sudo make config
sudo ldconfig

Vytvoříme nového uživatele Asterisk v systému

sudo groupadd asterisk
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk

Přidáme nového uživatele do skupiny audio a dialout

sudo usermod -aG audio,dialout asterisk

Nastavíme práva ke složkám

sudo chown -R asterisk.asterisk /etc/asterisk
sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
sudo chown -R asterisk.asterisk /usr/lib/asterisk

Zapíšeme název uživatele do konfiguračních souborů v /etc/default

...
AST_USER="asterisk"
AST_GROUP="asterisk"
...

a ve složce /etc/asterisk

runuser = asterisk ; The user to run as.
rungroup = asterisk ; The group to run as.

A restartujeme službu

systemctl restart asterisk
systemctl status asterisk

Pokud se objeví chyba klienta

freepbx systemd[1]: Started LSB: Asterisk PBX.
freepbx asterisk[44826]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file

freepbx asterisk[44826]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file

Proveděte tyto příkazy

sudo sed -i 's";\[radius\]"\[radius\]"g' /etc/asterisk/cdr.conf
sudo sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cdr.conf
sudo sed -i 's";radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf"radiuscfg => /etc/radcli/radiusclient.conf"g' /etc/asterisk/cel.conf

Nyní znovu restarujeme službu

systemctl restart asterisk

A zkontrolujeme funkčnost

sudo asterisk -rvvvvv

VOIP server

Chan_sip a chan_pjsip jsou oba kanálové ovladače v Asterisku, které vám umožňují používat SIP ke komunikaci s jinými zařízeními. Existuje však několik klíčových rozdílů.

Chan_sip je původní kanálový ovladač pro SIP v Asterisku. Je to zralý a dobře otestovaný ovladač, ale není tak efektivní jako chan_pjsip. Chan_pjsip je novější kanálový ovladač, který je založen na knihovně PJSIP. Je efektivnější než chan_sip a podporuje více funkcí.

Vytvoříme 2 endpointy (6001, 6002) s hlasovou schránkou. Dále tónovou volbu (1001)

Nejprve vytvoříme certifikát pomocí certbot

sudo certbot certonly --standalone -d hostname.example.com

Vytvoříme složku, zkopírujeme certifikát a nastavíme oprávnění

sudo mkdir /etc/asterisk/keys
cp  /etc/letsencrypt/live/hostname.example.com/fullchain.pem /etc/asterisk/keys/fullchain.pem
cp  /etc/letsencrypt/live/hostname.example.com/privkey.pem /etc/asterisk/keys/privkey.pem
sudo chown -R asterisk:asterisk /etc/asterisk/keys

Přidáme účastníka s volacím číslem 6001 a stejným přihlašovacím jménem a heslem

...
[transport-tls]
type=transport
protocol=tls
bind=0.0.0.0
cert_file=/etc/asterisk/keys/fullchain.pem
priv_key_file=/etc/asterisk/keys/privkey.pem
method=tlsv1_2
domain=hostname.example.com
verify_client=no
verify_server=yes
tos=cs3
cos=3
external_media_address=77.xxx.xxx.xx
external_signaling_address=77.xxx.xxx.xx

...
[6001]
type=endpoint
transport=transport-tls
context=default
disallow=all
allow=ulaw
allow=gsm
allow=alaw
allow=h264
allow=vp8
media_encryption=sdes
auth=6001
aors=6001

[6001]
type=auth
auth_type=userpass
password=6001
username=6001

[6001]
type=aor
max_contacts=10
contact=sip:6001@hostname.example.com:5061

A nastavíme jednotlivé dialplany v extension

...
[default]
exten => _6XXX,1,Dial(PJSIP/${EXTEN})

Hlasová schránka

Tlačítková volba

Nastavíme přesměrování portů 5061 na routeru.

GSM Dongle

Nejprve stáhneme a sestavíme

git clone https://github.com/wdoekes/asterisk-chan-dongle.git
cd asterisk-chan-dongle
./bootstrap
./configure --with-astversion=20.4.0
make
sudo make install

Nyní můžeme přidat nastavení podle ttyUSB

...
[dongle0]
audio=/dev/ttyUSB1              ; tty port for audio connection;        no default value
data=/dev/ttyUSB2               ; tty port for AT commands;             no default value

Slovníček pojmů

Endpoint

V Asterisku je endpoint zařízení, které je schopno přijímat a vysílat hovory. Může to být softwarový endpoint, jako je SIP klient, nebo hardwarový endpoint, jako je IP telefon nebo softphone.

Endpoint je definován v Asterisku pomocí konfiguračního souboru. Konfigurační soubor obsahuje informace o tom, jak se endpoint připojuje k Asterisku, jaké protokoly podporuje a jaké funkce má.

Když endpoint přijme hovor, Asterisk mu přiřadí identifikátor, který se nazývá „cid_number“. cid_number je jedinečné číslo, které se používá k identifikaci endpointu v Asterisku.

Endpointy mohou být také použity pro různé funkce, jako je hlasová pošta, konference a IVR.

AOR

AOR je zkratka pro Address of Record. Je to SIP URI, které se používá k identifikaci zařízení v síti VoIP. AOR obsahuje informace o jménu zařízení, doméně a portu.

AOR se používá k registrování zařízení v síti VoIP. Když se zařízení registruje v síti, sdělí své AOR serveru SIP. Server SIP poté použije AOR k nalezení zařízení v síti a k odesílání hovorů na zařízení.

AOR se také používá k nalezení zařízení v síti. Když je zařízení voláno, server SIP použije AOR k nalezení zařízení v síti a k odeslání hovoru na zařízení.

+