Підключаємо Asterisk до іншого SIP-сервера, Linuxoid
OpenSource forever
Проблеми та протоколи
Підключаємось до іншого серверу
$ sudo mcedit /etc/asterisk/iax.conf
;iaxcompat=yes ; корисний параметр, що знижує затримки при складних діалпланах
;nochecksums=no ; відключення перевірки контрольних сум UDP пакетів
delayreject=yes ; вводимо затримки при помилковому введенні пароля, щоб утруднити їх вибір
mohinterpret=default mohsuggest=default ; мелодія при очікуванні
bandwidth=high ; смуга пропускання low, medium або high, впливатиме на використані кодеки
; за допомогою директив allow і disallow вказуємо дозволені ; та заборонені кодеки, значення «all» відповідає всім форматам ; allow = all; відповідає bandwidth=high disallow=g723.1 disallow=lpc10 ; allow=gsm
jitterbuffer = no ; буфер для вхідних повідомлень, який компенсуватиме затримки, не завжди потрібний та корисний параметр forcejitterbuffer=no ; примусова активація jitter буфера ; maxjitterbuffer = 1000 ; максимальний розмір jitter буфера ; maxjitterinterps=10 ; деякі клієнти не турбують себе посилкою спеціальних CNG/DTX кадрів ; при паузі розмови, цей параметр створює такі паузи ; resyncthreshold=1000 ; поріг затримок
; trunkfreq = 20 ; trunktimestamps=yes ; відсилання позначок часу в транці та інтервал у мс
; minregexpire = 60 ; maxregexpire = 60 ; мінімальний та максимальний час для реєстрації (у сек)
; authdebug=no ; після налаштування журналування параметрів автентифікації можна вимкнути
tos = lowdelay ; встановлення байта Type of Service (TOS) у вихідних IP-пакетах ; дляIAX на відміну від SIP значення встановлюється всім видів зв'язку ; всі варіанти можна переглянути у файлі doc/ip_tos.txt
; якщо протягом 2000 мс не отримуємо відповіді, з'єднання переривається ; замість yes або no можна вказати своє значення у мс
; codecpriority = host ; узгодження (переваги) кодеків для вхідних дзвінків: ; caller (що викликає сторона має пріоритет), host (наш вузол, значення за замовчуванням), ; disabled (відключено), reqonly (аналогічно disabled, переваги вказуються ; тільки якщо запитуваний кодек недоступний)
; користувач для вихідних дзвінків [outgoinguser] type=peer host=hostname.com ; host=dynamic; у цьому випадку потрібна команда register auth=md5 secret=secret_word username=username ; останні два параметри можуть бути включені до команди Dial
Налаштування діалплану
Також невелике зауваження щодо безпеки, щодо використання контекстів, особливо тих до яких матимуть доступи користувачі з-поза. Якщо всі користувачі визначені в один контекст у тому числі і з використанням директиви include, то будь-хто може отримати доступ не тільки до внутрішніх номерів, серверу голосової пошти, але і іншим сервісам, наприклад можливості здійснювати вихідні міжміські дзвінки. Не всім і завжди це необхідно або належить, тому краще всі правила, що стосуються дзвінків ззовні або назовні винести в окремий контекст, наприклад incoming. Тепер переходимо до налаштування плану набору. Взагалі в самому простому випадку у файлі extensions.conf можна створити контекст incoming в який просто вписати користувача дзвінки:
[incoming] exten => grinder,1,Dial(IAX2/grinder)
А для вихідних створити свій контекст, на кшталт:
[outgoing] exten => 4000,1,Dial(IAX2/outgoinguser/4000)
Але це можна використовувати за невеликої кількості номерів. Інакше простіше змусити сервер Asterisk автоматично отримувати контекст віддаленого сервера або перенаправляти виклики до нього. Відповідно і реалізувати це можна кількома варіантами. Наприклад, щоб передати свій діалплан на віддалений сервер використовуємо конструкцію на кшталт:
При цьому параметри username, password мають бути прописані в контексті mycontext iax.conf на віддаленому сервері (myserver). Екстеншени можуть бути виражені цифрами та літерами або задані за допомогою шаблону. Якщо екстеншен починається з підкреслення '_', він сприймається як шаблон. У шаблоні можна використати деякі спеціальні символи. Наприклад, X - відповідає числам від 0 до 9, Z - 1-9, N - 2-9, точка "." відповідає одному або декільком числам, а "!" – жодному чи більше символів, якщо число укладено у дужці [1237], то буде прийнято збіг з одним із них. Тепер, коли всі пояснення наведено приклад:
$ sudo mcedit /etc/asterisk/extensions.conf
[general] static=yes. writeprotect=no ; за такої конфігурації можна зберегти діалплан командою “save dialplan” [default] exten => _5XXXХ,1,Goto,out$1 ; описуємо план набору для віддаленого сервера ; 5 спочатку це щось типу виходу на міжмісто [out] exten => _5XXXХ,1,StripMSD,3 ; StripMSD видаляє 1 символ (за замовчуванням) від початку номера exten => _XXXХ,2,Goto,1 switch => IAX2/outgoinguser: [email protected]/incominguser
[incoming] exten => grinder,1,Dial(IAX2/grinder)
Щоб перевірити реєстрацію на іншому сервері, необхідно ввести в CLI Asterisk команду “iax2 show registry”. Дуже корисною приОрганізації зв'язки двох віддалених серверів є можливість обмеження часу за допомогою timing list. Для цього слід використовуючи інструкцію include вказати проміжок часу у форматі:
Наприклад робочий час із понеділка по п'ятницю:
Підключаємось до SIPNET.RU
$ sudo mcedit /etc/asterisk/sip.conf
[general] videosupport=yes useragent=SipPhone register=grinder:[email protected]/1234567 [sipnet] type=friend username=grinder secret=password callerid=sipnet host=sipnet.ru nat=no fromuser=sipnet fromdomain=sipnet.ru dtmfmode=rfc2833 insecure=invite context=sipnet disallow=all allow=alaw
$ sudo mcedit /etc/asterisk/extensions.conf
[Moscow] exten => _7495XXXXXXX,1,SetCallerID(«SipPhone» ) exten => _7495XXXXXXX,2,Dial(SIP/sipnet/$,120) exten => _7495XXXXXXX,3,HangUp
І підключаємо цей екстеншен до обраних груп абонентів за допомогою запису:
Аналогічно прописуються плани набору інших міст. Закінчивши редагування файлів, вводимо в CLI команду reload. Після перезапуску Asterisk у верхньому кутку меню “Персональні дані” має з'явитися інформація про підключеного клієнта Asterisk PBX (або що написано в useragent файлу sip.conf).
Команда “sip show registry” також покаже, що підключення зроблено нормально.
CLI> sip show registry Host Username Refresh State Reg.Time sipnet.ru:5060 grinder 105 Registered Tue, 16 Oct 2007 23:10:04
Тепер можна дзвонити за допомогою SIPNET.RU.
Правила IPTABLES
Не зайвим буде вказати деякі корисні правила IPTABLES. Щоб пакети безперешкодно проходили через фільтр пишемо. Для SIP на порт 5060: iptables -AINPUT -p udp -m udp -dport 5004:5082 -j ACCEPT Для протоку IAX2 порт інший: iptables -A INPUT -p udp -m udp -dport 4569 -j ACCEPT Медіапотоки RTP: iptables -A INPUT -p udp -m udp -dport 10000:20000 -j ACCEPT Деякі використовують протокол MGCP (media gateway control protocol): iptables -A INPUT -p udp -m udp -dport 2727 -j ACCEPT Для встановлення TOS у вихідних пакетах використовуємо (для SIP) таке правило: iptables -A OUTPUT -t mangle -p udp -m udp -dport 5060 -j DSCP -set-dscp 0x28 iptables -A OUTPUT -t mangle -p udp -m udp -sport 10000:20000 -j DSCP -set-dscp 0x28
Відео - підключення до SIPNET.RU в AsteriskNOW
А навіщо SetCallerID у Moscow? Хіба сипне дозволяє підставляти clid?