Úvod do Asterisku

Asterisk je velmi úspěšná OSS ústředna s velmi širokou uživatelskou základnou, která se dá pořídit za zlomkovou cenu. Asterisk je plně kompatibilní s většinou protokolů pro VoIP (SIP, H.323, Cisco Skinny, IAX,...). Oproti OpenSERu je složitější na konfiguraci, ale komplexnější.

 

Enum (e164 Number Mapping)

Přesná definice ENUMu by mohla znít, že jde o mapovací systém mezi různými prostory identifikátorů. Vstupním prostorem ENUMu je prostor telefonních čísel. Jeho výstupním prostorem potom prostor všech URI identifikátorů. Po dotazu od uživatele na určité telefonní číslo tedy ENUM vrací odpověď v podobě URI identifikátoru. ENUM však není nutným požadavkem pro VoIP a neměl by se plést s běžným směrováním VoIP, založeným na protokolech SIP a H323 s použitím URI. Poskytovatelé služeb VoIP přiřazují URI zákazníkovi tak, aby mohli vytvořit spojení přes internet, tedy v podstatě telefonní hovor. ENUM je systém založený na DNS, který poskytuje vhodné služby, které pomáhají uskutečnit hovor, ale rozšiřuje i možnosti spojení o další DNS služby. Pro systém ENUM byl vyroben speciální typ záznamu v DNS – NAPTR. Mezinárodní telekomunikační unie alokovala ENUM zvláštní zónu, jmenovitě „e164.arpa“ pro použití s čísly E.164. Jakékoli telefonní číslo pak může být transformováno do doménového jména obrácením čísel a jejich oddělením tečkami a přidáním přípony e164.arpa, jako v následujícím příkladu: +420123456789 = 9.8.7.6.5.4.3.2.1.0.2.4.e164.arpa.

Z pohledu IP telefonie  může být ENUM rozdělen na :

-          User ENUM

   -          Infrastructure ENUM 




Výhody a využití ENUMu

ENUM dovoluje zveřejnit k telefonnímu číslu informaci, jak se na něj dovolat přes internet. Zbytek již obstará telekomunikační infrastruktura podporující ENUM, která při vytočení telefonního čísla vždy nejprve zjistí, zda-li se může spojit s telefonem volaného účastníka přes internet. Pokud ano, hovor je spojen tímto způsobem a je zdarma. V případě, že propojení přes internet není možné, hovor proběhne běžnou cestou po telefonních linkách veřejné telefonní sítě a je zpoplatněn dle aktuálních ceníků telefonních operátorů 




Získání telefonního čísla

Registrace telefonního čísla do ENUM probíhá podobně jako registrace klasické domény. Uživatel si zvolí registrátora a do jeho registračního systému vloží potřebné údaje. Nejdůležitější údaj představuje telefonní číslo, jehož správnost a regulernost bude po zapsání do registru ještě ověřena (validace). Validace nejčastěji probíhá formou zaslání SMS na toto číslo. Zpráva obsahuje heslo, které je nutno zadat, aby došlo k ověření. Ale existují i jiné způsoby validace. Proces je ukončen přidáním záznamu se SIP adresou do DNS.


Instalace ENUM

Do souboru /etc/asterisk/extensions.conf  přidáme pravidla pro přímé vytáčení čísel (bez využití ENUM) a kontext pro vytáčení přes ENUM:

 [users_all]

exten => 411119695024,1,Dial(SIP/uzivatel1)

exten => 511119695024,1,Dial(SIP/uzivatel2)

exten => 611119695024,1,Dial(SIP/uzivatel3)

exten => 711119695024,1,Dial(SIP/uzivatel4)

include => enum

 
Pomocí pravidla
include => enum je přidán kontext enum do vlastního kontextu users_all , což umožní uživatelům využívat pravidal definovaná v kontextu enum:

Dále je přidán kontext pro příchozí hovory:

 [incoming]

include => users_all

 
Dále je nadefinováno makro, které má za úkol usnadnit vyhledánání a následné vytáčení čísel pomocí služby ENUM:

 
[macro-enumexten]

exten => s, 1, Set(entrycount=${$ENUMLOOKUP

               (+${ARG1},sip,c,e164.arpa)}|counter=0)

exten => s, 2, GotoIf($[”${counter}”<”${entrycount}”]?3:6)

exten => s, 3, Set(counter=$[${counter}+1])

exten => s, 4, Dial(SIP/${ENUMLOOKUP

               (+${ARG1},sip,${counter},e164.arpa)})

exten => s, 5, GotoIf($[”${counter}”<”${entrycount}”]?3:6)

exten => s, 6, NoOp(No SIP entries in e164.arpa for ${ARG1}.)


V kontextu enum jsou dále definována pravidla pro převod čísel do mezinárodního tvaru a jejich

následné vyhledání pomocıí makra enumexten:

 
[enum]

exten => _XXXXXXXXX,1,Macro(enumexten,420${EXTEN})

exten => _00X.,1,Macro(enumexten,${EXTEN:2})

exten => _XXXXXXXXXX.,1,Macro(enumexten,${EXTEN})

KONFIGURACE PBX ASTERISK verze 1.2 pro ENUM

V adresáři etc/asterisk v souboru sip.conf jsou definováni uživatelé, registrovaní na telefonní ústřednu Asterisk. V bloku generals jsou nakonfigurovány základní volby:

[generals]

context=users
bindport=5060
bindaddr=0.0.0.0
domain=158.196.142.10
srvlookup=yes

Konkrétní definice uživatelů vypadá následovně:

[users]

[karel]
type=friend

username=karel
userid=Karel Karel <1234>
host=dynamic
context=users

 
[josef]
type=friend
username=josef
userid=Josef Josef <5678>
host=dynamic
context=users

 
V adresáři etc/asterisk v souboru extensions.conf jsou nadefinována pravidla pro přímé vytáčení čísel a kontext pro vytáčení přes ENUM. Pomocí pravidel include => enum přidáme kontexty enum do našeho kontextu users, což umožní využívat uživatelům pravidla definovaná v dalších kontextech.

[users]
exten => 1234,1,Dial(SIP/karel)
exten => 5678,1,Dial(SIP/josef)
exten => _10XX,1,Dial(SIP/1015@158.196.142.14)
include => enum

 
(Pozn: extenze exten => _10XX,1,Dial(SIP/1015@158.196.142.14) zajistí, že na číslo 1015 registrované na OpenSER budou přesměrována volání na jakékoliv čtyřmístné číslo začínající dvojčíslím 10.)

 

Dále je definován kontext pro příchozí hovory. Kontext v této podobě zajistí že všechny příchozí hovory budou obsluhovány stejně, jako kdyby byly iniciovány uvnitř naší sítě.

 
[incoming]
include => users

 
Kontext pro ENUM - usnadní vyhledávání a následné vytáčení čísel pomocí ENUM.

 
[macro-enumexten]
exten => s, 1, Set(entrycount=${$ENUMLOOKUP
                (+${ARG1},sip,c,e164.arpa)}|counter=0)
exten => s, 2, GotoIf($[”${counter}”<”${entrycount}”]?3:6)
exten => s, 3, Set(counter=$[${counter}+1])
exten => s, 4, Dial(SIP/${ENUMLOOKUP
                (+${ARG1},sip,${counter},e164.arpa)})
exten => s, 5, GotoIf($[”${counter}”<”${entrycount}”]?3:6)
exten => s, 6, NoOp(No SIP entries in e164.arpa for ${ARG1
}.)

 
Kontext ENUM – definuje pravidla pro
převod čísel do mezinárodního formátu a jejich následné vyhledání pomocí makra enumexten.

 
[enum]
exten => _XXXX,1,Macro(enumexten,420${EXTEN})
exten => _00X.,1,Macro(enumexten,${EXTEN:2})
exten => _XXXXX.,1,Macro(enumexten,${EXTEN})

 
Dále je definována funkce ENUMLOOKUP, která vyhledá zadané číslo ve stromu ENUM a měla by vrátit zpracovaný NAPTR záznam jednoho typu (URI).

 
ENUMLOOKUP (1234
[, sip[, 1[, e164.arpa]]])
ENUMLOOKUP (5678[, sip[, 1[, e164.arpa]]])
ENUMLOOKUP (1015[, sip[, 1[, e164.arpa]]])
ENUMLOOKUP (1018 [, sip[, 1[, e164.arpa]]])

 
Pokud budeme chtít zkusit spojení mezi Asteriskem a SERem, tak na straně Asterisku nejdřív spustíme Asterisk příkazem v Linuxu:

 

asterisk –r


a potom zadáme:

reload   

 
což zajistí, že dojde k aktualizaci možných změn ve vytáčecím plánu, které jsme provedli.

 

Potom spustíme EKIGU a registrujeme uživatele následovně:

Název účtu:   1234
Registrátor:   158.196.142.10
Uživatel:       karel

Heslo:           cokoliv

 
nebo

 
Název účtu:   5678
Registrátor:   158.196.142.10
Uživatel:       josef

Heslo:           cokoliv

 
Registrace by měla proběhnout úspěšně a mělo  by být možné volat v rámci Asterisku mezi čísly 1234 a 5678, dále mezi uživateli registrovanými na OpenSER a Asterisk, tedy například mezi čísly 1234 a 1015. Na číslo 1015 se dovoláme i tehdy, pokud zadáme jakékoliv libovolné čtyřmístné číslo začínající dvojčíslím 10.