Всем привет!
Имеется Asterisk FreePBX 13, все телефоны внутри. Снаружи если кто и подключается, то VPN пользователи (подсеть 10.0.1.*) с софтфонами. Им нужно разрешить только звонки между сотрудниками (внутри офиса). Запретить исходящие куда-либо во внешку. Входящие можно оставить.
Подскажите пожалуйста, как это грамотно реализовать в FreePBX?
ну вы привяжите vpn пользователей к определенным экстеншенам, и не пускайте их наружу. Не понимаю в чем проблема то? Если сами аппараты внутри, то все ок. А софтфоны резать.
Подготовка
1) в vpn настраиваете другую подсеть
Реализация
добавляете в extensions_custom.conf строчки
[macro-dialout-trunk-predial-hook]
exten => s,1,Set(peer=${CUT(CHANNEL(name),-,1)})
exten => s,n,Set(peer=${CUT(peer,/,2)})
exten => s,n,Set(ip=${SIPPEER(${peer},ip)})
exten => s,n,Set(subnet=${CUT(ip,.,1-3)})
exten => s,n,ExecIF($[ "${subnet}" == "192.168.22" ]?MacroExit);eсли больше одной разрешенной, добавьте еще такихже
exten => s,n,Playback(option-not-implemented); сеть не разрешена
exten => s,n,Hangup
здесь 192.168.22 - сеть с которой звонить можно Если испоользуете followme возможно потребуется добавить адреса транков или пустой адрес. Если надо то же для других протоколов - надо делать условие по протоколу, но вобщемто также.
В FreePBX никак. В голом Астериске выпендриться можно, но нужно иметь глубокие знания в нескольких областях.
Задан: Apr 27 '16
Просмотрен: 606 раз
Обновлен: Apr 28 '16
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
Подозреваю, что это можно реализовать через custom contexts (custom destination), только вот как делать проверку IP адреса SIP-клиента? На уровне extensions_custom.conf?
MetrS (Apr 27 '16)editЭто определенные номера, или разные?
Out (Apr 27 '16)editдаже если и одинаковые - достаточно php скриптом перед звонком смотреть ip адрес клиента и в зависимости от ответа - давать звонить или нет
awsswa (Apr 27 '16)editКак получить IP телефона я уже нашел, в extensionscustom.conf прописал exten => s,1,Set(telip=${CUT(CUT(SIPHEADER(Via), ,2),:,1)}) и получаю в консоли при звонке:
-- Executing [s@check-tel-ip:1] Set("SIP/1002-0000000a", "telip=192.168.0.175") in new stack Интересно, как в outbound routes засунуть этот кастомный конфиг.
Пытаюсь обрезать строку: exten => s,n,GotoIf($[ $["${telip:0:9}" = "192.168.4"] | $["${telip:0:9}" = "192.168.3"] ]?vpntel) Но получаю ноль: -- Executing [s@check-tel-ip:2] GotoIf("SIP/1002-0000000a", "0?vpntel") in new stack
MetrS (Apr 27 '16)editawsswa, если одни и те же номера, то достаточно в custom-contexts пихнуть, с нужными разрешениями :)
Out (Apr 27 '16)editOut, не подскажете как это сделать?
MetrS (Apr 27 '16)editСтавьте Custom Contexts модуль, он находится в "Module Administration">>"Unsupported"
Создайте Custom Contexts, и откройте его, откроется много полей, думаю разберетесь.
Если надо, могу помочь бесплатно.
Подробно http://voxlink.ru/kb/freepbx/custom-context-freepbx/
Out (Apr 27 '16)editOut, это немножко не подойдет. Мы не знаем какие номера выйдут через VPN сегодня, а какие завтра, а значит - привязка по номеру телефона не подойдет.
У меня почти получилось сделать все через custom destination:
extensions_custom.conf
[check-tel-ip] exten => s,1,Set(telip=${CUT(CUT(SIP_HEADER(Via), ,2),:,1)}) exten => s,n,GotoIf($["${telip:8:1}" = "0"]?officetel) exten => s,n,GotoIf($["${telip:8:1}" = "1"]?vpntel) exten => s,n(officetel),Goto(from-internal-trunk) exten => s,n(vpntel),Hangup
Далее, иду в Admin-Custom destinations и добавляю "check-tel-ip,s,1" пункт.
Далее, в Outbound Routes убираю Trunk Sequence for Matched Routes и снизу Optional Destination on Congestion ставлю Custom destination. Идея в том, что проверка IP телефона отдает ложь или правду для определенного exten, а если где-то правда - то вызов идет на другой Outbound route - в котором прописан нормально Trunk. Но пока это не работает, т.к. не передается набранный номер, а вместо него передается символ "s"
MetrS (Apr 27 '16)editНу так выдавайте определенный диапазон ext для них, тех которые по vpn коннектиться могут.
Out (Apr 27 '16)editОни могут из офиса тоже с этими учетными записями звонить, и получится так, что в офисе постоянно включенный IP телефон с ext 101, пользователь приходит домой, включает на смартфоне софтфон через VPN с учеткой 101 - и спокойно звонит. Нужна проверка именно по IP адресу телефона (например, получать через SIP Head, пример я выше привел.).
MetrS (Apr 27 '16)editzavulon, у пользователей должны оставаться одинаковые номера (учетные записи) как в офисе, так и при использовании VPN. Если я сделаю экстеншены для впн и буду их блочить на исходящие - то мне придется каждый раз (по запросу юзера) менять на эти экстеншены пользователей. Например: вася 1001 подключен в офисе. Приходит домой и звонит от Вася 1010 через впн - как тогда идентифицировать юзеров? У каждого будет по 2 учетки?
И на какой номер звонить потом Васе, если у него 2 номера? Играть в угадайку не каждый захочет. Можно сделать переадресацию с васи 1001 на васю 1010, но это долго. Или заставлять Васю делать DND при уходе с работы... В общем, легче замутить проверку, только как корректно - непонятно.
MetrS (Apr 28 '16)editMeral, спасибо. Код понятен. Где мне делать обработку исходящих? В Outband routes убрать Trunk Sequence for Matched Routes и указать Optional Destination on Congestion = Custom destination? Сделать возврат управления в Custom destination?
MetrS (Apr 28 '16)edit