Hlavní navigace

Asterisk 13: stabilní motor pro vaše komunikace

Marek Červenka

Asterisk je open-source framework pro budování komunikačních systémů a aplikací, který pohání různé pobočkové ústředny, konferenční servery, VoIP Gatewaye a další speciální aplikace. Před časem vyšla LTS verze 13, která se hodí pro projekty, které vyžadují dlouhodobou stabilitu. Co od ní můžete čekat?

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, PresenceStateListExtensionStateList. 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 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/Channel­TalkingStop .

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ářů.

Architektura kanálu chan_pjsip

  • 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/.

Reference

Našli jste v článku chybu?

22. 2. 2015 23:39

Dekuji za reakci.

Tou vicenasobnou registraci myslim to, ze kdyz ji nemam, tak musim vyzvaneni, ktere ma zvonit na vice mistech zajistit tak, ze pro kazde misto mam jeden sip ucet. Coz jeste jde, ale pak se do toho zamicha BLF a dialplan bobtna a zneprehlednuje se.

20. 2. 2015 14:23

Budoucnost patří PJSIPu. Je to mnohem čistěji napsaný stack než klasický chan_sip a hlavně úžasně konfigurovatelný. Pro automatické testy a jako SIP UA už PJSIP nějaký rok používám a funguje velice dobře, v Asterisku zatím jen v labu. Na produkční nasazení to rozhodně je, ale na jednoduchou výměnu za chan_sip to není a podle mého názoru nebude (nejde to prostě vyměnit 1:1, vždy narazíte na trochu jiné chování).

Co myslíte tím, že by vícenásobná registrace zjednodušila dialplan? Vždyť registrace…

Vitalia.cz: Vychytané vály a válečky na vánoční cukroví

Vychytané vály a válečky na vánoční cukroví

Měšec.cz: Komu musí od ledna zvýšit mzdu?

Komu musí od ledna zvýšit mzdu?

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: Flix TV: dva set-top boxy za korunu

Flix TV: dva set-top boxy za korunu

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Měšec.cz: Stavební spoření: alternativa i pro seniory

Stavební spoření: alternativa i pro seniory