Что значит никак? Давайте если вы не в курсе, вы так и говорите "не знаю достаточно freepbx чтоб ответить на вопрос.
meral ( 2016-04-28 13:43:49 +0400 )редактироватьВсем привет!
Имеется 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 никак. В голом Астериске выпендриться можно, но нужно иметь глубокие знания в нескольких областях.
Что значит никак? Давайте если вы не в курсе, вы так и говорите "не знаю достаточно freepbx чтоб ответить на вопрос.
meral ( 2016-04-28 13:43:49 +0400 )редактироватьЗадан: 2016-04-27 13:23:17 +0400
Просмотрен: 596 раз
Обновлен: Apr 28 '16
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
Подозреваю, что это можно реализовать через custom contexts (custom destination), только вот как делать проверку IP адреса SIP-клиента? На уровне extensions_custom.conf?
MetrS ( 2016-04-27 13:45:11 +0400 )редактироватьЭто определенные номера, или разные?
Out ( 2016-04-27 14:06:54 +0400 )редактироватьдаже если и одинаковые - достаточно php скриптом перед звонком смотреть ip адрес клиента и в зависимости от ответа - давать звонить или нет
awsswa ( 2016-04-27 15:20:52 +0400 )редактироватьКак получить 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 ( 2016-04-27 15:47:44 +0400 )редактироватьawsswa, если одни и те же номера, то достаточно в custom-contexts пихнуть, с нужными разрешениями :)
Out ( 2016-04-27 16:07:26 +0400 )редактироватьOut, не подскажете как это сделать?
MetrS ( 2016-04-27 16:29:12 +0400 )редактироватьСтавьте Custom Contexts модуль, он находится в "Module Administration">>"Unsupported"
Создайте Custom Contexts, и откройте его, откроется много полей, думаю разберетесь.
Если надо, могу помочь бесплатно.
Подробно http://voxlink.ru/kb/freepbx/custom-context-freepbx/
Out ( 2016-04-27 18:28:07 +0400 )редактироватьOut, это немножко не подойдет. Мы не знаем какие номера выйдут через 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 ( 2016-04-27 19:03:23 +0400 )редактироватьНу так выдавайте определенный диапазон ext для них, тех которые по vpn коннектиться могут.
Out ( 2016-04-27 19:11:25 +0400 )редактироватьОни могут из офиса тоже с этими учетными записями звонить, и получится так, что в офисе постоянно включенный IP телефон с ext 101, пользователь приходит домой, включает на смартфоне софтфон через VPN с учеткой 101 - и спокойно звонит. Нужна проверка именно по IP адресу телефона (например, получать через SIP Head, пример я выше привел.).
MetrS ( 2016-04-27 19:21:38 +0400 )редактироватьzavulon, у пользователей должны оставаться одинаковые номера (учетные записи) как в офисе, так и при использовании VPN. Если я сделаю экстеншены для впн и буду их блочить на исходящие - то мне придется каждый раз (по запросу юзера) менять на эти экстеншены пользователей. Например: вася 1001 подключен в офисе. Приходит домой и звонит от Вася 1010 через впн - как тогда идентифицировать юзеров? У каждого будет по 2 учетки?
И на какой номер звонить потом Васе, если у него 2 номера? Играть в угадайку не каждый захочет. Можно сделать переадресацию с васи 1001 на васю 1010, но это долго. Или заставлять Васю делать DND при уходе с работы... В общем, легче замутить проверку, только как корректно - непонятно.
MetrS ( 2016-04-28 10:36:14 +0400 )редактироватьMeral, спасибо. Код понятен. Где мне делать обработку исходящих? В Outband routes убрать Trunk Sequence for Matched Routes и указать Optional Destination on Congestion = Custom destination? Сделать возврат управления в Custom destination?
MetrS ( 2016-04-28 14:33:00 +0400 )редактировать