Obecně o Asterisku
Na úvod krátce o Asterisku pro neznalé: Asterisk je open-source framework pro budování komunikačních systémů a aplikací. Asterisk pohání různé pobočkové ústředny, konferenční servery, VoIP Gatewaye a další speciální aplikace. Projekt je sponzorován firmou Digium, která prodává support a komerční produkty.
První verzi dal k dispozici Mark Spencer v roce 1999. Mark Spencer je mimo jiné také původním autorem programu dnes známého pod jménem Pidgin.
Pokud si chcete Asterisk vyzkoušet, doporučuji např. návod VoIP s Asterisk: pobočková ústredňa za 30 minút.
V České republice existují firmy, které poskytují komerční support nebo produkty nad Asteriskem postavené. Jsou to například Canistec, IPEX a další. Asterisk 13 je Long Term Support verze. Tzn. je dlouhodbě podporovaná a tudíž se hodí pro projekty u kterých je třeba zajistit dlouhodobou podporu. Např. telefonní ústředny, UC systémy atd.
Release Series |
Release Type |
Release Date |
Security Fix Only |
EOL |
11.x |
LTS |
25.10.2012 |
25.10.2016 |
25.10.2017 |
12.x |
Standard |
2013–12–20 |
2014–12–20 |
2015–12–20 |
13.x |
LTS |
2014–10–24 |
2018–10–24 |
2019–10–24 |
14.x |
Standard |
2015–10 (tentative) |
2016–10 (tentative) |
2017–10 (tentative) |
Hlavní novinky verze 13
Jako obvykle, je tato LTS verze chudší na nové funkce. Důvodem je zaměření na vydání LTS verze. Je snaha, aby v produkčním prostředí bylo co nejméně problémů. Dalším důvodem tohoto opatrnějšího přístupu je, že uživatelé v telekomunikacích jsou zvyklí, že jim služba funguje nepřetržitě.
Stále znatelnějším trendem je zaměření na API pro vývojáře. Skupina koncových uživatelů, kteří si ve firmě sami Asterisk konfigurují se zmenšuje a používá spíše hotové distribuce a produkty.
Některé nové funkce jsou již v Asterisku 12, protože dle pravidel je možné do standard začleňovat nové věci. Tyto ale nebyly obsaženy v článku o Asterisku 12.
Pokud budete upgradovat na Asterisk 13 z některé verze starší než 12, tak doporučuju přečíst i článek o Asterisku 12. A dále prostudovat změny v AMI, CEL, CDR modulech.
Realtime bezpečnost pomocí Security Events via AMI
AMI je Asterisk Management Interface. Rozhraní pomocí kterého lze externě Asterisk ovládat a přijímat realtime informace např. o příchozím hovoru. Ve verzi 13 přibyla možnost informování o událostech související s bezpečností.
Můžete se nechat informovat např. při neúspěšných pokusech o příhlášení k SIP účtu.
Podpora protokolu HEP
Pro dohledové složky a správce systémů přibyla velmi důležitá vlastnost a to je ukládání veškeré SIP signalizace do externího systému pro zpětnou diagnostiku. Asterisk podporuje protokol, který se jmenuje HEP a data ukládá do projektu HOMER (není to ten seriálový).
Webové rozhraní projektu HOMER vám následně umožní podrobnou analýzu SIP provozu.
Na starosti to mají tři moduly – res_hep
, res_hep_pjsip
, res_hep_rtcp
. Jak z názvů vyplývá, podpora není pro starší kanál chan_sip
ale pouze pro nový chan_pjsip
.
Není podporováno ukládání celých hovorů včetně audia (RTP). Odesílány jsou pouze statistické informace o audiu, které jsou v RTCP.
Pokud potřebujete analyzovat i audio, doporučuji projekt www.voipmonitor.org.
Posílání out-of-call zpráv pomocí ARI (JSON přes websocket)
Do ARI byla v této verzi přidána možnost poslat kdykoliv textovou zprávu na podporované zařízení. Podporovány jsou kanály chan_sip
, chan_pjsip
kam jsou zprávy zasílány pomocí SIP SIMPLE. Dále je možné zprávy posílat zprávy na chan_motif
. Sem jsou zprávy přeformátovány na protokol XMPP.
RFC 4662 Resource Lists v PJSIP kanálu
V případě, že s vaší pobočkovou ústřednou využíváte tzv. funkci BLF (Busy Lamp Field), abyste viděli, zda váš kolega právě hovoří, musí PBX ústředna podporovat SIP SUBSCRIBE metodu.
Pokud máte 19 kolegů a chcete mít informaci o všech, musí vaše zařízení poslat 19× SIP SUBSCRIBE. Pokud tohle nastavení použije i 19 vašich kolegů, tak je třeba provést 20 × 19 = 380 subscriptions. Jak je na první pohled vidět, tohle není příliš škálovatelné řešení.
Z tohoto důvodu vzniklo RFC 4662, které umožňuje tyto požadavky sdružit do jednoho. V této verzi byla podpora tohoto RFC implementována. Podrobné detaily naleznete na wiki projektu Asterisk.
Kodeky
Bohužel ani v této verzi není k dispozici plná (transcoding) podpora kodeku Opus, protože strašák patentového trolla stále visí ve vzduchu. Nicméně pro ty, kteří chtějí Opus testovat existuje patch. Ten je k dispozici na GitHubu.
V současné době bohužel stále ještě není využit variable bitrate mód, který Opus umí. K dispozici je pouze statická verze. Nějaký šikovný doktorand na VŠB nebo VUT telco fakultě?
Menší novinky
Výčet všech změn není úplný. Jsou obsaženy pouze ty, které autor používá nebo jsou z jeho pohledu zajímavé.
Aplikace
MixMonitor
Aplikace MixMonitor je určena pro nahrávání hovorů. Pomocí parametru B() je možné do hovoru periodicky pípat, aby bylo jasné že je hovor nahráván.
Dále je toto pípání pustit při začátku a konci nahrávání. K tomu slouží parametry p(přehraje se tomu kdo spustil nahrávání) a P (přehraje se tomu kdo ukončil nahrávání).
PickupChan
Tato aplikace slouží pro přebírání hovorů ve skupině. Nově je možné definovat pomocí uniqueid proměnné, který hovor(kanál) chcete vyzvednout.
Jádro Asterisku
Account kódy
Pro účtování hovorů existuje v Asterisku proměnná „accountcode“. Dá se dá využít pro uložení informace o tom, komu daný hovor naúčtovat. Tato informace je nyní lépe v Asterisku propagována např. při vytváření odchozích kanálů.
AMI (Asterisk Manager Interface)
AMI je rozhraní pro externí správu Asterisku. Umožňuje například externě vytvořit hovor.
Actions (příkazy)
Jak již někteří víte, od Asterisku 12 je dostupný nový SIP stack na bázi projektu pjproject – chan_pjsip
.
V rámci nové verze jsou k dispozici nové příkazy v AMI:
PJSIPNotify – funkce umožňuje poslat SIP NOTIFY na libovolné URI.
PJSIPShowEndpoint – ve výstupu přibylo pole ContactStatusDetail, které obsahuje informace o pokusech Asterisku kontrolovat dostupnost SIP zařízení (qualify).
Byly přidány příkazy DeviceStateList, PresenceStateList a ExtensionStateList. Pomocí těchto příkazů je možné zjišťovat aktuální stavy daného zařízení.
Events (události)
Byly přidány události DeviceStateChanged a PresenceStateChanged. Tyto události jsou generovány v případě kdy zařízení změní svůj stav. Pozor: těchto událostí může být velké množství, takže používejte pouze pokud opravdu potřebujete realtime informace o stavu zařízení.
Používání funkce TALK_DETECT (detekce zda někdo mluví) nově také generuje události. Názvy událostí jsou ChannelTalkingStart/ChannelTalkingStop .
Do události DialEnd přibyla status informace o tom jak byla aplikace Dial ukončena. Jedná se o hodnoty ABORT, CONTINUE a GOTO.
Funkce talk detect = např. statistika pro call centrum, který agent ma největší prodlevy při komunikaci.
ARI (Asterisk REST Interface)
Toto rozhraní obsahovalo nejvíce změn. Uvádím pouze některé.
-
Operace, které vytváří nějaký objekt můžou jako parametr zadat unikátní id. Týká se to:
-
Channels
-
Bridges
-
Playbacks
-
Příklad:
POST channels/my-channel-id kde my-channel-id je mnou definované id
-
Uložené nahrávky souborů podporují nově operaci copy, která umožňuje nahrávku překopírovat na jiné místo v adresáři určeném pro nahrávky.
-
LiveRecording objekt nyní obsahuje 3 další položky, které můžou být reportovány v ARI události RecordingFinished:
-
total_duration: celková délka nahrávky v sekundách
-
talking_duration: celková doba mluvení v hovoru při použití funkce TALK_DETECT
-
silence_duration: celková doba ticha v hovoru při použití funkce TALK_DETECT
-
-
Playback URI tón byl přidán. Jedná se o tóny, které slyšíte v případě nějakých problémů např. obsazovací tón. Tzn. ARI nyní umožňuje přehrávat dynamicky do hovorů tóny.
-
Je možné generovat uživatelské události do ARI
-
Přidány nové události pro externě iniciované přepojení. Pro přepojení naslepo (BlindTransfer) je to událost BridgeBlindTransfer. Pro přepojení s konzultací je to BridgeAttendedTransfer.
RealTime (moduly pro realtime konfiguraci Asterisku např. v MySQL)
-
Byly přidány nové Alembic skripty, které vytváří CDR tabulky tak jak je očekává Asterisk 13.
TLS (šifrování signalizace)
Asterisk podporuje šifrování signalizace i samotných hovorů jako ochranu např. proti odposlechu. Problematika TLS/SRTP by vydala na samostatný článek a studium necháváme na laskavém čtenáři.
Asterisk nyní podporuje Perfect Forward Secrecy (PFS). PFS je ve výchozím stavu zapnuto. Ephemeral ECDH (ECDHE) je standardně zapnuto. Pokud ECDHE potřebujete vypnout, je to možné v sip.conf
udělat takto:
tlscipher=AES128-SHA:DES-CBC3-SHA
Ephemeral DH (DHE) je ve výchozím stavu vypnuto. Pro zapnutí přidejte DH parametry do privátního klíče. Konfigurace v sip.conf
– parametr tlsprivatekey
.
Protože klienti očekávájí od serveru PFS a protože OpenSSL seřazuje šifry podle jejich bitové síly ( openssl
ciphers -v DEFAULT
),je doporučeno prověřit konfigurační soubor sip.conf
a nastavení případně změnit, viz příklad:
tlscipher=AES128+kEECDH:AES128+kEDH:3DES+kEDH:AES128-SHA:DES-CBC3-SHA:-ADH:-AECDH
Asterisk použije PFS, pokud mu to klient nabídne. Pokud PFS není nabídnuto, tak je proveden fall-back na AES-128.
Functions (funkce)
TALK_DETECT
Funkce TALK_DETECT umožňuje u hovoru detekci mluvení. Události kdy je mluvení detekováno nebo naopak, jsou poté posílány do AMI a ARI rozhraní. Na základě těchto událostí můžete např. hovor, v kterém nikdo 10 minut nepromluvil, ukončit, protože se třeba jedná o zapomenutý neukončený hovor.
Resources (kanály, drivery)
res_pjsip
Nejvíce změn, tak jak se očekávalo, je v novém kanálu pro SIP – chan_pjsip. Pro příznivce RedHat/Centos/Fedora systémů je příznivá zpráva, že projekt Pjproject, na kterém chan_pjsip závisí, byl „zRPMifikován“ a protlačen do repozitářů.
-
Konfigurace koncového zařízení nyní podporuje nastavení accountcode.
-
Je možné nastavovat QoS pomocí IP hlavičky ToS (Type of Service) – tos, tos_audio, tos_video odpovídající hodnoty cs0 – cs7, af11 – af43, ef.
-
Do CLI přibyly nové příkazy.
-
pjsip show contacts – vypíše aktuální PJSIP kontakty
-
pjsip show contact – vypíše informace o aktuálním kontaktu
-
pjsip show channel – vypíše informace o pjsip kanálu
-
pjsip show registrations – vypíše všechny odchozí SIP registrace (směrem k operátorům)
-
-
Přidána podpora pro hlavičku Path.
-
Přibyla možnost nastavit proměnnou v kanále pro dané zařízení – set_var v konfiguraci zařízení.
-
Bylo vylepšeno fungování na multihomed systémech (více síťových karet).
Nakonec krátká zajímavost co se vaří na reviewboardu. Posílání CDR/CEL dat pomocí AMQP což je další krůček k lepšímu nasazení do virtualizovaného a distribuovaného prostředí. Pro zájemce o detaily: reviewboard.asterisk.org/r/4365/.