Odorik SIP TRUNK - připojení za NATem s neveřejnou IP adresou

Trunková linka se liší od obyčejné tím, že umožňuje odchozí hovory pod identitou (CLIP) jiných linek (případně libovolných povolených čísel). V ostatních ohledech a hlavně co se týče příchozích hovorů se neliší.

Např. pokud máte u nás 10 telefonních čísel, pomocí trunkové linky můžete vše dělat pomocí jednoho SIP jméno a heslo, též jedině sip registrace, což usnadní konfiguraci vaší ústředny.

Požadavky změny obyčejné linky na trunkovou linku zpracováváme ručně. Požádejte proto pomocí formuláře a uveďte maximální počet odchozích hovorů, které budete potřebovat.

Příchozí hovory Odorik -> Asterisk

Řekněme, že od nás máte třeba 20 různých geografických čísel a máte ústřednu Asterisk, která nemá veřejnou IP adresu. Fakt, že nemá veřejnou IP, ničemu nevadí. Ba naopak podstatně zvýší Vaši bezpečnost. Abychom mohli na Váš Asterisk poslat hovory na všechna Vaše čísla, je nutné, aby se Váš Asterisk zaregistroval na sip.odorik.cz. Není ale nutné, aby se registroval pro každé číslo zvlášť. Stačí jediná registrace na jedinou linku. (nejlépe si na to zřiďte zvláštní linku určenou právě k tomuto účelu). Rozdíl mezi TRUNKovou SIP registrací a normální SIP registrací žádný není. SIP TRUNK se nazývá SIPová komunikace, která obsluhuje více různých čísel, na která se volá (v případě příchozích hovorů), a více různých čísel, ze kterých se volá (v případě odchozích hovorů).

U nás na Odorik.cz nastavíte paralelní zvonění u čísla, které chcete poslat na SIP TRUNK tak, že pro dané číslo nastavíte směrování na sip:@408806. Číslo 408806 je číslo linky, pod kterou je Asterisk registrován. Je to tedy obdoba volání na URI jen s tím rozdílem, že adresa a port se mění v čase podle toho, odkud je Váš Asterisk zaregistrován. (Dovolena je též varianta sip:_@408806, která se liší jen tím, že pokud se jedná o česká čísla v síti Odorik, čísla budou poslána v národním formátu a ne mezinárodním - tedy bez 00420 na začátku.)

Ještě jednou, ať je to jasnější. Nastavíte paralelní vyzvánění daných čísel na “podivný nestandardní řetězec” “sip:@408806”, který to kupodivu akceptuje, podobně jako volání na SIP URI nebo na Skype.

http://www.odorik.cz/ucet/nastaveni_volani.html?nastaveni_podmenu=prichozi_hovory&prichozi_podmenu=vlastni

Alternativní způsob jak zavolat na registrované zařízení, co umí využívat SIP Trunk

Z libovolného telefonu v síti odorik vytočte *408806*XXXXXXX. Kde *408806 je číslo linky, na kterou je zaregistrován Váš asterisk, gsm brána nebo jiné chytřejší SIP zařízení. XXXXXXX je telefonní číslo, které tohle zařízení obdrží v hlavičce INVITE - tedy číslo, které má být dovolatelné v rámci Vašeho Asterisku. Je to tedy ekvivalent sip:XXXXXXX@408806 v paralelním zvonění, jen s tím rozdílem, že je možné jej vytočit z libovolného telefonu.

Odchozí hovory Asterisk -> Odorik od zaří 2020

Funguje očekávaným způsobem. Telefonní číslo volajícího může být v hlavičce FROM (tahle možnost funguje jen pokud je linka u nás též zaregistrovaná) nebo Remote-Party-ID nebo P-Asserted-Identity. Žádné speciální nastavení vašeho Asterisku nebo ústředny není nutné. Pokud je hovor přesměrovaný, je možné ponechat číslo původního volajícího, ale přidejte informaci o tom, jaké číslo bylo přesměrováno v hlavičce Diversion např. “Diversion: <tel:539085858>” značí, že se jedná o přesměrovaný hovor a přesměrované číslo bylo 539085858.

I v tomto případě platí, že aby bylo možné přes linku posílat odchozí hovory z čísel na jiných linkách, musíme pro vás ručně aktivovat službu SIP TRUNK. Bez aktivace se nepřenese správně číslo volajícího.

Příklad nastavení Asterisk chan_pjsip, pjsip.conf (konfigurace pro starší chan_sip je níže)

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0:56782

[reg_408806]
type = registration
retry_interval = 20
max_retries = 0
expiration = 120
transport = transport-udp
outbound_auth = auth_reg_408806
client_uri = sip:408806@sip.odorik.cz
server_uri = sip:sip.odorik.cz

[auth_reg_408806]
type = auth
password = xXxXxXxXx
username = 408806

[301]
type = aor
max_contacts = 1

[301]
type = auth
username = 301
password = qe21rt6d65d

[301]
type = endpoint
context = outgoing
disallow = all
allow = alaw
rtp_symmetric = yes
rewrite_contact = yes
direct_media = no
callerid = 00420539085858
send_rpid = yes
outbound_auth = 301
aors = 301

[201]
type = aor
max_contacts = 1

[201]
type = auth
username = 201
password = qe23rt6dd

[201]
type = endpoint
context = outgoing
disallow = all
allow = alaw
rtp_symmetric = yes
rewrite_contact = yes
direct_media = no
callerid = 00420539085858
send_rpid = yes
outbound_auth = 201
aors = 201

[odorik_trunk]
type = aor
contact = sip:408806@sip.odorik.cz

[odorik_trunk]
type = identify
endpoint = odorik_trunk
match = 81.31.45.51

[odorik_trunk]
type = auth
username = 408806
password = xXxXxXxXx

[odorik_trunk]
type = endpoint
context = incoming
disallow = all
allow = alaw
direct_media = no
send_rpid = yes
from_user = 408806
outbound_auth = odorik_trunk
aors = odorik_trunk

Odchozí hovory Asterisk -> Odorik do zaří 2020

Do září 2020 jsme vyžadovali, aby v SIP hlavičce from bylo číslo trunkové linky na kterou se mají hovory účtovat a na kterou se mají hovory autentizovat. Pro zjednodušení tohle již nevyžadujeme, pokud je daná linka zaregistrována i příchozí hovory. Níže je tedy starý návod před tímto zjednodušením, který je stále spolehlivější alternativou, protože funkčnost odchozích hovorů tak nezávisí na funkčnosti registrace. (Staré nastavení se u Asterisku liší od jen dvěma řádky sendrpid=yes a fromuser=cislo_linky)

U odchozích hovorů je nutné zaručit, aby se předávalo správné číslo volajícího. Pro náš případ, kdy máme více různých linek, je výhodné, pokud pošleme všechny odchozí hovory pomocí jediné linky. Tedy v SIP hlavičce FROM musí být číslo linky, na kterou má proběhnout autentizace. Pak ale nastává problém, jak správně přenést číslo volajícího, když je možné volat z více různých telefonních čísel.

Abychom vyřešili tento požadavek, používáme k tomu SIP hlavičku RPID (Remote-Party-ID), kde zůstane původní callerid (volající).

Pokud máte jiné SIP zařízení než Asterisk, které nedovede poslat hlavičku RPID, můžete pro stejný účel použít hlavičky P-Asserted-Identity nebo P-Preferred-Identity, je možné se autentizovat též pomocí veřejné IP adresy, kde je možné, aby číslo volajícího bylo též v hlavičce FROM, což ale za normálních okolností nedoporučujeme. Konkrétní návod pro Panasonic řady KX-TDE, KX-NCP a KX-NS. Možný je též jiný přístup - nastudujte si podnadpis níže “Alternativní možnost - odchozí hovory SIP ústředna → Odorik”.

Náš SIP proxy sip.odorik.cz zkontroluje, zda-li dané id patří do povoleného rozsahu a pokud ano, callerid se zachová. Pro danou SIP TRUNK linku ale musíme povolit dovolený rozsah callerid, kvůli čemu je nutné nás kontaktovat.

Pokud máte na vaší ústředně jen jednomístné, dvojmístné nebo trojmístné “klapky”, které jsou shodné s posledními číslicemi geografických čísel, můžeme vám u nás nastavit automatický překlad čísel na veřejná čísla. Stačí, když k nám hovory pošlete pod onou klapkou. Tuto službu musíme nastavit na vyžádání. Příklad pro naši vnitřní potřebu PRE4885006|2|50_69 převede čísla klapek 50 - 69 na veřejná čísla 488500650-488500669.

sip.conf

[general]
bindport=56782 ; používat port 5060 bývá zbytečně nebezpečné, protože denně jej útočníci skenují.
directmedia=no ; kdyby šlo rtp (zvuk) napřímo, je možné, že to bude blokovat Váš paranoidní firewall a nebudete moci nahrávat. 
allowguest=no ; anonymní příchozí hovory nejsou dovoleny
alwaysauthreject=yes ; hacker nezjistí, které klapky existují
registertimeout=20             ; retry registration calls every 20 seconds (default)
registerattempts=0             ; při neúspěšné registraci (např. výpadku internetu), zkoušej do nekonečna
register => 408806:bf3xx6eN@81.31.45.51 ; zaregistrujeme se  na sip.odorik.cz  a chceme, aby hovor zvonil
; budeme tak moci moci přijímat hovory, i když jsme na neveřejné IP adrese
sendrpid=yes ; sendrpid zaručí, že se kopie callerid (informace, o tom, kdo volá) vloží do SIP hlavičky rpid
; tohle se uplatňuje u odchozích hovorů (asterisk -> odorik)
disallow=all                                                
allow=alaw
[301]
type=friend
username=301
secret=qe21rt6d65d    ; nespoléhejte se na to, že jste za NATem, volte hodně bezpečná hesla. Existují i nebezpečné typy NATu,
                      ; a někdo se může dostat do vaší lokální sítě i jinak.
callerid=00420539085858  ; zde dáte číslo, které se má zobrazovat, pokud budete z klapky 301 volat
host=dynamic
context=outgoing ; hovory uskutečněné z klapky 301 budou v souboru extensions.conf v kontextu outgoing
nat=yes
qualify=yes ; díky tomuhle můžeme sledovat, jestli zařízení odpovídá pomocí příkazu "sip show peers"
accountcode=301 ; abyste se vyznali ve výpise hovorů Vašeho Asterisku

[201]
type=friend
username=201
secret=qe23rt6dd
callerid=00420539085858
host=dynamic
context=outgoing
nat=yes
qualify=yes
accountcode=201

[odorik_trunk] ; Přes tento trunk budeme posílat všechny odchozí hovory směrem do odorik ústředny
type=peer

username=408806
sendrpid=yes ; sendrpid zaručí, že se kopie callerid (informace o tom, kdo volá) vloží do SIP hlavičky rpid
             ; pokud by to zde nebylo, informace o tom, jaké číslo volá, se vůbec nepřenese a vše by se jevilo jako z linky
             ; v našem případě 408806
fromuser=408806 ; políčko from musí být nastaveno na číslo linky, na kterou chceme autentizovat
; jinak by k autentizaci vůbec nedošlo, volající by byl ignorován jako nějaký útočník 
; Od dubna 2016 by též mělo fungovat místo fromuser=408806 též fullname=408806, poté nastavení  sendrpid=yes výše není nutné
secret=bf3xx6eN
host=81.31.45.51  ; sip.odorik.cz
canreinvite=no
insecure=invite  ; pokud by tohle chybělo, váš Asterisk by chtěl, aby se naše proxy autentizovala jménem a heslem.
                 ; na tohle ale nejsme zařízeni a postrádá to též smysl. Proto je tento řádek nutný.
                 ; Jinými slovy, pokud zde tohle nebude, nebudou vám fungovat příchozí hovory.
context=incoming ; v případě příchozích hovorů bude v extensions.conf použit kontext incoming

extensions.conf

[outgoing]
exten => _X.,1,noop(${CALLERID(number)})  ; pro účely ladění nám vypíše, kdo volá.
; Callerid se úspěšně přenese na naši ústřednu pomocí rpid

;exten => _X.,1,Set(CALLERID(number)=00420539085858) ; Kdybychom chtěli, můžeme si i zde natvrdo nastavit callerid,
; středník na začátku ale značí, že celý řádek výše je jen poznámka
exten => _X.,n,Dial(SIP/${EXTEN}@odorik_trunk) ; hovor pošle na sip.odorik.cz tak, aby se zaúčtoval pod linku 408806

exten => _*X.,1,noop(${CALLERID(number)}) ; to stejné, pokud chci volat v síti odorik 
exten => _*X.,n,Dial(SIP/${EXTEN}@odorik_trunk)

[incoming]

exten => s,1,Dial(SIP/201) ; pokud v sip.conf v sekci register => neuvedete, kam si přejete hovor spojit, 
; ani to nezadáte v paralelním zvonění na Odoriku (např. sem_chci_spojit@408806), bude dost možná poslán na "s"
exten => s,n,Hangup()

exten => _X.,1,Dial(SIP/201)  ; všechny hovory zvoní na klapce 201 (pravděpodobně to ale takto nechcete)
exten => _X.,n,Hangup()

exten => _*X.,1,Dial(SIP/201) ; všechny hovory začínající hvězdičkou zvoní také na klapce 201
exten => _*X.,n,Hangup()

Alternativní možnost - odchozí hovory SIP ústředna -> Odorik

Pokud je pro vás problém nastavit na vaší ústředně, aby v hlavičce FROM bylo číslo trunkové linky a číslo volajícího bylo v hlavičce RPID nebo P-Asserted-Identity, od dubna 2016 ještě podporujeme jiný alternativní způsob. Číslo linky, na kterou chcete provést autentizaci, můžete dát též do textové části hlavičky from. Tedy v textové části bude číslo linky pro autentizaci a v části pro číslo pak může zůstat číslo volajícího. Hlavička FROM by pak mohla vypadat třeba následovně:

From: "300116" <sip:499853123@sip.odorik.cz:6688>

Kde 300116 je číslo trunkové linky (na ni bude hovor zaúčtován a její heslo bude použito pro autentizaci), a číslo 499853123 je číslo volajícího. V asterisku 1.4 a novějším můžete textovou část hlavičky from měnit pomocí parametru “fullname=300116”, kterou uvedete místo “fromuser=300116” v příslušné sekci sip.conf. Je to vlastně obsah Asterisk proměnné CALLERID(name). Parametr sendrpid=yes už poté není nutný.

Tento způsob se zdá být jediný možný např. u ústředen 2N Omega (Lite) s přídavným VoIP modulem, proto byl přidán. Podrobnější návod pro SIP trunk z ústředen 2N.

Přesměrování/přepojování hovorů

Pokud váš asterisk hovor přesměruje nebo přepojí hovor třeba na mobil a chcete zachovat původní číslo volajícího + příznak o tom, že byl hovor přesměrován, přidejte SIP hlavičku diversion:

exten => 408806,1,SIPAddHeader("Diversion: <tel:539085858@sip.odorik.cz>")

V tomto případě je telefonní číslo 539085858 číslo, které bylo přesměrováno , a musí to být některé z povolených čísel. Tedy není to číslo, kam chcete přesměrovávat, to normálně vytočíte. Může být i v mezinárodním tvaru tedy 00420539085858 Další podmínka je to, že musí v tu dobu existovat příchozí hovor přes nás se stejným číslem volajícího. Na některých mobilních telefonech (např. E52) se objeví příznak toho, že se jedná o přesměrovaný hovor, což může být velká přidaná hodnota pro volaného.

Pro shrnutí. Číslo původního volajícího se k nám dostane pomocí automaticky nastavené sip hlavičky rpid, číslo, které jste přesměrovali, ručně přidáte do hlavičky Diversion.

Aby tohle fungovalo, musíte mít u nás na používané lince aktivovaný lince tzv. SIP TRUNK - ten aktivujeme na požádání ručně a zdarma.

Proražení NATu zevnitř pro RTP data

Aby průchod zvuku přes NAT fungoval, musí telefony za NATem začít posílat zvuk vždy jako první. Ty to tak opravdu dělají. Problém ale nastane u přesměrovaných příchozích hovorů opět ven, protože pak jsou obě volající strany mimo lokální síť a nemá kdo zevnitř otevřít průchod přes NAT. Řešením může být před přesměrováním hovoru něco (ticho) přehrát (klidně i bez zdvihnutí hovoru), čímž se NAT otevře a teprve poté hovor přesměrovat. Přestože je tento “problém” společný pro libovolnou ústřednu co nemá veřejnou adresu a setkává se s ním velké množství uživatelů, výrobci se zpravidla tváří, jako by tento problém neexistoval. Včetně takového freepbx. Nedokonalým řešením tak může být hovor před přesměrování zvednout.

exten => _[*0-9].,n,Progress()
exten => _[*0-9].,n,playback(silence/1,noanswer)

Neboli přijetím příchozího hovoru na váš Asterisk nejdříve pustíte vteřinové ticho v době, kdy ještě hovor není zdvižen. Pro lepší pochopení si přečtěte podnadpis “SIP a průchod přes NAT” níže.

Abychom měli přehled o tom, odkud kam proudí RTP (pro testování), stačí přidat příkaz

rtp set debug on

Další věc je, že je nutné v paralelním zvonění nastavit zvonění na URI, např.

sip:408806@408806
sip:@40806
sip:cokolichci@40806

sip:408806@408806 je ekvivalentní *408806 jen s tím rozdílem, že není generováno umělé zvonění, ale je přenášeno z Vašeho Asterisku, kterému se tudíž tím pádem úspěšně daří otevřít NAT zevnitř. Pokud byste poslali hovor jen na *408806, tak tohle to “proražení NATu” nebude fungovat, protože žádný zvuk se nepřenáší, ale generuje se falešné zvonění u nás.

SIP paket "INVITE" a jak zkontrolovat jeho obsah

Pokud Vám to nevolá (odchozí hovory) způsobem jaký požadujete, odchyťte si SIP paket INVITE a zkontrolujte barevně vyznačené části podle vysvětlivek.

Vysvětlivky si též přečtěte, pokud chcete vědět, jaké kombinace hodnot jsou dovolené a na co mají vliv. Inspiraci též můžete najít na našem fóru.

INVITE sip:777556216@sip.odorik.cz SIP/2.0
Via: SIP/2.0/UDP 78.92.223.1:5060;branch=z9hG4bK74b2b13e
Max-Forwards: 69
From: <sip:738040@78.92.223.1>;tag=as456b561f
To: <sip:777556216@sip.odorik.cz>
Contact: <sip:738040@78.92.223.1:5060>
Call-ID: 2a84c9130408d9c460a22f114ac67afb@77.92.223.1:5060
CSeq: 102 INVITE
User-Agent: Asterisk PBX
Date: Fri, 27 May 2016 09:47:16 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Remote-Party-ID: "910110910" <sip:910110910@78.92.223.1>;party=calling;privacy=off;screen=no
Diversion: <tel:539085858@sip.odorik.cz>
Content-Type: application/sdp
Content-Length: 351
Vysvětlivky:
777556216 - volané číslo v národním nebo mezinárodním formátu. Povinné je jen v hlavičce INVITE. (na obsahu hlavičky To nezáleží) V Asterisku je tohle políčko určeno parametrem příkazu dial.
738040 - číslo linky, na kterou se provádí autentizace, stačí, když je přítomno ve From. Pokud je asterisk zaregistrován, nemusí být číslo linky uvedeno nikde a from lze tak využít k předávání čísla volajícího.
910110910 - veřejné číslo původního volajícího. Veřejné číslo volajícího hledáme též v hlavičkách P-Asserted-Identity a P-Preferred-Identity nebo from (od září 2020 pokud je asterisk u nás zaregistrovaný)
Aby Asterisk vkládal automaticky tuhle hlavičku, je třeba mít v konfigurační souboru sip.conf nastaveno sendrpid=yes. Číslo může být v národním nebo mezinárodním formátu s 00 na začátku. Pokud je linka 738040 trunková, automaticky jsou povoleny všechna čísla na daném účtu Odorik.cz. Na požádání je možné přidat po ruční kontrole i jiná Vaše čísla, která máte od jiného operátora. Pokud číslo nespadá to této povolené množiny a nejedná se o přesměrovaný hovor (viz níže), číslo volajícího bude na naší ústředně změněno na 910119999.
539085858 - hlavička Diversion není povinná a používá se jen v případě přesměrovaných hovorů. Akceptujeme (nebo můžeme na požádání akceptovat) i jiné obvyklé formy této hlavičky. Číslo může být v národním nebo mezinárodním formátu (s 00 na začátku) V případě přesměrovaných hovorů pak může být číslo volajícího (v našem příkladu 910110910) libovolné veřejné číslo světa, nejen z rozsahu Vašich veřejných čísel. Standardně hlídáme, že na telefonní číslo uvedené v hlavičce Diversion existuje příchozí hovor na některé číslo na Vašem účtu u nás. Důvěryhodným zákazníkům lze tuhle kontrolu na požádání vypnout, aby tak mohli přesměrovávat korektně i hovory na čísla např. v GSM bráně nebo od jiného operátora. Tato čísla je nutné nám oznámit a my je povolíme. V Asterisku se tato hlavička vkládá provedením SIPAddHeader("Diversion: <sip:539085858@sip.odorik.cz>") v extensions.conf.

Pokud linka, přes kterou děláte odchozí hovor, není TRUNKová (pro zřízení trunkové linky je nutné nás požádat - je to zdarma), obsah hlaviček hlaviček Remote-Party-ID (případně ekvivalenty P-Asserted-Identity a P-Preferred-Identity) i Diversion je ignorován. Číslo volajícího je určeno podle použité linky. Ve from je také nutné uvádět číslo linky, na kterou se provede autentizace.

Každou linku v síti Odorik.cz lze využít jako trunkovou pro příchozí hovory v módu “TRUNK”, bez nutnosti nás kontaktovat pro aktivaci TRUNku. Nastavení si provedete sami pomocí paralelního zvonění.

Co když Vaše SIP ústředna bude nedostupná?

I při směrování na SIP TRUNK nebo na SIP URI lze využít funkci “Záložní číslo”. Na tohle mobilní číslo bude hovor směrován, pokud směrování na Váš Asterisk nebo SIP telefon selže z jakéhokoli důvodu. Doporučujeme, aby to bylo mobilní číslo - vyhnete se tak zacyklení hovorů. Záložní číslo je možné nastavit jak u linek s jednotlivými veřejnými čísly, tak i u linky určené pro SIP trunk. Nastavení u jednotlivých veřejných čísel má pak přednost. Pokud je vyplníte “email pro informování o použití záložního čísla”, budete na něj o každém použití informováni. Tohle nastavení najdete v menu “průvodce nastavením”→“voláním z internetu”→“Volání z libovolného programu…”.

U mobilních čísel (i v síti Odorik) postrádá tohle nastavení smysl, tedy není možné. Je ale možné mobilní číslo přesměrovat na jiné číslo (tedy do hlasové schránky u Odorik.cz nebo i na Váš asterisk) vždy nebo podmíněně např. v době nedostupnosti (vypnutý telefon, nebo telefon bez signálu). Tato funkce se zde nazývá podmíněné přesměrování.

Pozor na zacyklení hovorů!

Nastavení u FreePBX

Je třeba nastavit sendrpid=yes a fromuser=cislo_linky podle návodu na FreePBX

Nastavení ustředny Yeastar

Opět sendrpid=yes a fromuser=cislo_linky nastavíte dle obrázků

Odchozí hovor se skrytým číslem

Přidejte SIP hlavičku “Privacy: id”. Např. pomocí exten ⇒ 408806,1,SIPAddHeader(“Privacy: id”)

SIP a průchod přes NAT

Přestože se různě píše, že SIP a NAT je problém, není to pravda. Průchod SIP přes NAT funguje automaticky a bez potíží a běžně se o jeho existenci nemusíte vůbec zajímat. Máte-li s NATem problém, zkontrolujte, že jsou dodrženy body níže.

SIP a NAT - co musí být splněno, aby to fungovalo

  • Pro udržení průchodu přes NAT je nutné posílat keep alive zevnitř (keep alive zvenku také funguje, ale pokud Vám vypadne internet na 5 minut, jste nedostupní až do další přeregistrace). Problém s keep alive se pozná tak, že číslo začne být po nějaké době od restartu, registrace či posledního hovoru nedostupné. Pokud keep alive váš SIP klient neumí (zcela výjimečné), můžete nastavit dobu expirace registrace na cca minutu. Asterisk to dělá automaticky jako SIP client i server, není třeba se o to starat. Pokud by byl problém s keep alive, projeví se to tak, že číslo začne být po nějaké době nedovolatelné.
  • Strana za NATem musí vždy začít posílat zvuk jako první - i během vyzvánění. Problém se pozná podle toho, že nejsou slyšet hlášky typu “volaný účastník je momentálně nedostupný”. Pokud volaná strana během vyzvánění pošle Session progress (tedy je to pokyn k tomu, že se bude přenášet zvuk), jak první musí RTP (tedy zvuk) začít vysílat SIP klient umístěný za NATem, aby se NAT otevřel zevnitř. Tohle dělají automaticky všichni SIP klienti. Dejte si pozor jen na zabagovaný Linphone a integrovaný SIP klient v OS Android, který zvuk během vyzvánění vůbec nepřenáší - jen falešně zvoní. Tedy nepoznáte, když má volaný vypnutý telefon.
    Obecně VoIP telefon, co je za NATem, musí RTP začít posílat jako první, jinak sám nic “neuslyší”. Tohle platí i během doby, kdy volaná (druhá) strana vyzvání, kdy musí posílat RTP též. Pokud máte Asterisk za NATem a hovor jen přesměrujete dále (opět přes NAT), je třeba uměle poslat pár RTP paketů pro otevření NATu zevnitř. Viz. “proražení NATu zevnitř” popsáno výše. Tohle je jediná mírná komplikace, s kterou se můžete setkat, při použití pobočkové ústředny za NATem.
  • SIP servery i SIP proxy (např. sip.odorik.cz) dávají přednost skutečným IP adresám a portům, odkud pakety přicházejí, před tím, co je uvedeno v SIP hlavičkách. V SIP hlavičkách jsou obvykle neveřejné adresy, na které nelze nic poslat. Tedy podpora NATu u SIP proxi/serveru znamená dodržení tohoto jednoduchého principu a je to nutnost, o kterou se nemusíte starat. Dnes si mohou dovolit NAT ignorovat jen ti, co dělají SIP velkoobchodně, kde všichni jejich partneři mají veřejné IP adresy. NATu přívětivé chování SIP ústředen hodně poškozuje ego těm, co SIP vymýšleli, proto se o tom moc nepíše. Kazí to hlavní myšlenky a koncept přesložitělého SIPu. Velká část obsahu SIP hlaviček se stává nesmyslnou a komplikovanou formalitou.

Pro běžné použití za NATem není třeba dělat nic, ono to samo dobře funguje. Pokud to nefunguje, speciální nastavení NATu jako forwardování portů to obvykle nespraví, raději si znovu projděte body výše a použijte nestandardní SIP porty, abyste vyloučil SIP ALG. A zkuste vypnout firewall. Poté nás kontaktujte s konkrétním id hovoru a popisem toho, jak se to projevuje, a my vám řekneme, v čem je problém. Veškerou SIP komunikaci zpětně logujeme.

STUN a informační mlha kolem

STUN je protokol nezávislý na SIP a VoIP, který umožňuje zjistit typ NATu, veřejnou IP adresu a mapování portů. Tyto údaje jsou pak použity pro vyplnění SIP hlaviček, aby bylo vše tak, jak si to autoři SIPu naplánovali. Autoři SIPu ale plánovali špatně, nepoužívejte STUN.

Ne že by mít správně IP adresy a porty v SIP hlavičkách něčemu vyloženě vadilo, ale prostě na tom nezáleží, jen to pomáhá odvádět pozornost od skutečného problému a řešení. SIP proxy či SIP server na obsah hlaviček nebere zřetel, protože IP adresa a port, odkud pakety přišly, mají vždy přednost před obsahem hlaviček.

Říkáte si, k čemu je STUN a proč se o něm v souvislosti se SIPem tolik mluví? Teoreticky by mohl umožnit, aby RTP stream šel mezi volaným a volajícím napřímo bez účasti RTP proxy. To ale nikdy nebude fungovat s NATem typu Symetric NAT, protože mapování portů, které odhalí STUN, neplatí obecně. A je tam ještě možný problém s nutnou kompatibilitou kodeků mezi volaným a volajícím. V praxi se tento přístup v podstatě nikdy nepoužívá, protože nelze zaručit vždy funkčnost. Je to tedy další zavádějící výmysl teoretiků, co vymýšleli SIP. Obecně je ale STUN užitečný k tomu, abychom mohli zjistit, jaký typ NATu máme, viz nebezpečný typ NATu Full cone NAT popsaný níže. STUN se bude hodit každému vývojáři P2P sítě, aby si zjistil jaké má v daném konkrétním případě možnosti komunikovat napřímo.

V Asterisku implementace STUNu není, ale IP adresu, která se dává do SIP hlaviček můžeme ovlivnit volbou externip. Při vyplněné externip budete mít vyplněnu “správnou” veřejnou IP adresu (do doby, než se změní), ale pravděpodobně budete mít stále špatně čísla portů. Na zachování stejných čísel portů se nelze nikdy spolehnout, pokud ono mapování necháme na libovůli routeru (NATu). Snad jen kdybyste použili port forwarding, ale to už se do toho začínáte zamotávat bez zjevného užitku. Dovedu si představit využití hlavičky externip jen v případě, že Váš Asterisk nemá veřejnou IP adresu, vy jej ale chcete používat, jako by měl, a pomůžete si přesměrováním portů na routeru. Tedy pokud vyžadujete, aby se kdokoli na světě mohl zaregistrovat/napadat Váš Asterisk, má smysl to zkusit. Pro běžnou funkcionalitu pobočkových ústředen nic takového ale není potřeba, tedy pokud se tím snažíte napravit nějaký nefunkční stav, pravděpodobně nic nedocílíte.

NAT a bezpečnost

Vyhněte se používání NATu typu full cone NAT, které se, co se bezpečnosti týče, rovná veřejné IP adrese. Pokud se spoléháte, že Vás NAT ochrání, a přitom používáte Full cone NAT, je to vražedná kombinace. NATu Full cone NAT je nutné se vyhnout, když to nejde vypnout, tak takový router raději vyhoďte.

V Linuxu typ NATu, za kterým jste, zjistíte (uživatelé Windows mohou typ NATu zjistit např. pomocí naší Java Tunel aplikaci viz obrázek. viz obrázek ):

aptitude install stun
stun stun.sipgate.net
STUN client version 0.96
Primary: Indepndent Mapping, Port Dependent Filter, preserves ports, no hairpin	
Return value is 0x000017

legenda (obrázky a podrobnější vysvětlení jednotlivých typů v angličtině):

  • Independent Mapping, Independent Filter = Fullcone NAT - NEBEZPEČNÉ !!!
  • Independent Mapping, Address Dependent Filter = Restricted Cone NAT - bezpečnost ujde
  • Independent Mapping, Port Dependent Filter = Port-Restricted Cone NAT - bezpečnost ještě lepší
  • Dependent Mapping = Symmetric NAT - bezpečné, ale p2p sítě to mají těžké - pokud chtějí komunikovat dva uživatelé p2p a oba jsou za tímto typem NATu, mají prostě smůlu a mohou komunikovat jen přes prostředníka.

Lidé, co mají nebezpečný router s Fullcone NAT, si často stěžují, že jim volá podivné číslo v nevhodnou dobu, a když to zdvihnou, není nic slyšet. Hovor není ani vidět ve výpise hovorů na našem webu. Útočník totiž volá přímo na jejich VoIP telefon a díky nebezpečnému typu NATu může napřímo komunikovat přímo s jejich VoIP telefonem v lokální síti. Je to útočník hledající své objeti. Tohle je poměrně častý jev, pokud se zákazníkovi zdá má rada “vyhoďte svůj router/ADSL modem a kupte si jiný” příliš drastická, radím:“Změňte port 5060 na svém VoIP zařízení na nějaké jiné vysoké náhodné číslo.” Útočníci to zkouší hlavně na port 5060 u všech veřejných IP adres světa.

yeastar n824

Pridani RPID

/persistent/custom-cfg/pjsip_custom.conf
[trunk-Odorik-endpoint](trunk-endpoint-basic)
send_rpid=yes

do /persistent/custom-cfg/extensions_custom.conf
zkopirovat cele makro a zmenit prislusny radek:
[macro-trunkdial-failover-0.3]
.
.
exten = s,n,SetCktCustom(sendrpid,yes,no)
.
.

[macro-trunkdial-failover-0.4]
.
.
exten = s,n,SetCktCustom(sendrpid,yes,no)
.
.
 
freepbx/siptrunk.txt · Last modified: 2023/10/13 19:11 by root