Pull to refresh

Asterisk, или домашняя телефония для (про)двинутых пользователей

Reading time 14 min
Views 121K
Эта история началась два долгих года назад, когда во время командировки в США я ВДРУГ остался без мобильной связи: с дуру перед поездкой поменял телефон, а он оказался «двух-диапазонником»… Да и роуминг не дешёвый…
Итогом стало открытие для себя SIP-телефонии.

И вот несколько месяцев назад, из статей на Хабре, выясняю, что чужим дядям можно и не платить за межгород, если надо позвонить откуда-то в родной город через Интернет! Достаточно поставить VoIP сервер и настроить его так, как надо именно тебе!

И вот, взяв в руки Asterisk, я приступил к операции по борьбе с излишней жадностью ОпСоСов…



Примечание


  • Данный топик является компиляцией некоторых решений, которые я применил для себя. Кто-то может реализовать что-то по-другому или лучше — с удовольствием выслушаю и, возможно, что-то улучшу и у себя.
  • Предполагается, что читающий тему разбирается на начальном уровне в вопросе. Если нет — в конце я привёл ссылку на скачивание учебника.


Введение


В наличие имелся 2-х ядерный сервер на ubuntu (10.04), который в принципе выполняет у меня обязанности файлового архива, но на практике — чаще всего простаивает.
Требовалось упростить мне жизнь с телефонными разговорами.
В частности были поставлены следующие задачи:
  • Если я отсутствую дома — я не должен пропустить входящие звонки на МГТСовский номер
  • Если нахожусь в командировке — через Интернет я должен получить возможность совершать звонки по городу
  • Опять-же — в командировке я в идеале не должен тратиться на роуминг, но при этом принимать звонки, сделанные на мой номер
  • В идеале — защититься от автодозвонщиков типа Акады, которые попросту достали
  • Упрощение звонков, с учётом того, что планировался перевод АТС в код 499
  • Удобство пользования всем этим

Очертив круг задач — приступаем к покупке железок под это дело.

Аппаратная часть


D-Link DVG-7111S — ГТС-VoIP адаптер

image
Выбрал именно его за относительно «копеечную» стоимость — в Москве он стоит от 2 152 до 2 610 рублей, что слегка дешевле Линксусов, которые ещё и найти надо.
По сути — он делает из городской линии и телефона двух SIP-клиентов, которые подключаются к Астериску.
Настройки делаем вот таким макаром

Тонкость одна связана с CallerID — для корректной его передачи надо пропустить один звонок, что-бы адаптер успел определить номер:
HOT LINE->Ring count before FXO pick up = 1

При необходимости — можно обновить прошивку, но в отличие от роутеров и прочих ДЛинковских девайсов — тут это довольно незаурядный процесс

Иногда у адаптера дурит определение сигнала «Занято». Для этого надо настроить длительности этих сигналов. Инструкция как их получить имеется, но сам пока не занимался — всего второй день, как началась эта проблема после смены оборудования на АТС.

Для звонка с Астериска на городской номер используется вот такой формат для Dial в Диалплане:
Dial(SIP/номер канала FXO/телефон)
Для звонка на трубку:
Dial(SIP/номер канала FXS)

Для упрощения жизни с маразмом от МГТС я себе сделал возможность набирать все номера Москвы одинаково «8-код-7 цифр», а с правилами набора — разберётся сервер:

Ниже приведены два варианта настройки. Первый вариант для тех, у кого номер в 495 коде, а второй — в 499. Оба варианта позволяют звонить как на телефоны в 495 коде, так и в 499.

Для номеров в 495 коде
; 495 - только семь цифр
exten => _8495XXXXXXX,1,Dial(SIP/701/${EXTEN:4})
exten => _8495XXXXXXX,n,Hangup()
; 499 - через восьмёрку
exten => _8499XXXXXXX,1,Dial(SIP/701/${EXTEN:0}) ; Тут не испытывал - знакомых в 499 коде нет, но подозреваю, что на старых АТС надо как-то по-другому, через паузу после 8...
exten => _8499XXXXXXX,n,Hangup()

Для номеров в 499 коде
; 495 - с "восьмёркой"
exten => _8495XXXXXXX,1,Dial(SIP/701/${EXTEN:0})
exten => _8495XXXXXXX,n,Hangup()
; 499 - без "восьмёрки"
exten => _8499XXXXXXX,1,Dial(SIP/701/${EXTEN:1})
exten => _8499XXXXXXX,n,Hangup()


Телефон

Первоначально — в качестве телефона использовал радиотрубку Панасоник, подключенную к FXS-порту адаптера, но быстро разочаровался: её корявенький дисплей справлялся только с цифровым CallerID. Поэтому был куплен Siemens Gigaset C470 IP + дополнительная трубка к нему Siemens Gigaset C47H.
image
За них выложил в сумме тысяч пять и не жалею: Главная прелесть агрегата в том, что он поддерживает одновременную работу с 6 трубками (основная + 5 дополнительных).
«И что толку? Линия-то одна!» скажете вы и… Будете в корне не правы!
Помимо 6 трубок — базовая станция поддерживает также и 6 sip-аккаунтов! Каждый из которых можно привязать к своей трубке!!!
Т.е. — если в квартире поставить в каждой комнате по радиотрубке, то это будут совершенно разные sip-юзеры, которые спокойно могут разговаривать и одновременно!

Пару слов про настройку:
Что-бы не говорили в инструкции — динамическое выделение адреса у телефона не происходит. Поэтому есть два варианта — с радиотрубки вбить правильный или коротким нажатием на кнопку на базе — определить текущий и настроить на него сеть.
Пин-код можно поменять ТОЛЬКО с трубки — в веб-панели такого пункта нет: так что лучше сразу его сменить, пока это не сделал какой-нить ушлый хацкер!

GSM-адаптер

Тут я пошёл по пути наименьшего сопротивления и купил МТСовский модем Huawei E1550.
Почему МТС?
Во-первых — 770 рублей, а не 1500 за «не лоченый»
Во-вторых — у Би и Меги залочены голосовые функции ВООБЩЕ.
В третьих — модем мне нужен был под Ашановский тариф А-Мобайл, который на сети МТС и перепрошивать ничего не пришлось.
Кто не в курсе — А-Мобайл позволяет делать 15 минут бесплатных звонков в день на другой А-Мобайл, после чего — символическая плата в 90 копеек за минуту. Мне он нужен был как резервный канал до домашней сети и тариф, ИМХО, самый приятный!
Настройки девайса муторные, но ничего сложного.

+ сейчас по Хабрапочте получил сообщение от Angel2S2:
«Кстати, про разлочку huawei модемов… Если интересно, можете у меня глянуть — angel2s2.blogspot.com/2010/07/huawei.html. Разлочил E160G и E1550 от мегафона и мтса, звонить тоже можно :) „
МБ кому-то поможет!

Учкудук два модема...

Ещё пару слов дополню…
Поставил на систему второй модем для входящих с АллоИнкогнито и тут пришёл он самый… П-ц который: модемы сами по себе менялись местами хлеще акробатов в цирке! При отключении одного — второй норовил переехать на его порты и т.д. и т.п.

А т.к. диалпланы для них в корне разные — надо было как-то решать…
Решение вполне обоснованное для Линукса: порту можно назначить фиксированную “ссылку»!
Т.е. — задаём для модема 1 — порты не ttyUSB1 и 2, а hv0 и hi0 (ХуавейВоис и ХуавейИнфо)!
Как?
Отключаем от компа оба модема, вставляем первый.
Даём с рута в терминале команду dmesg
В ответ вываливается куча всего, но в конце — заветные строки:
[291015.913221] option 1-2:1.0: GSM modem (1-port) converter detected
[291015.913364] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB0
[291015.913926] option 1-2:1.1: GSM modem (1-port) converter detected
[291015.914026] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB1
[291015.916678] option 1-2:1.2: GSM modem (1-port) converter detected
[291015.916812] usb 1-2: GSM modem (1-port) converter now attached to ttyUSB2

«Кто есть ху»:
После option идёт идентификатор порта.
1-2 — первый ЮСБ хост, второе устройство
:1.1 — первый порт на этом устройстве.
В следующей строке — инфа на тему того, каким портом стал этот наш внутренний.
Нас интересуют пред-последний и последний — 1 и 2 в данном случае.
1 — порт для голоса, 2 — для данных.
Теперь открываем из под рута для редактирования файл /etc/udev/rules.d/huawei.rules — тут прописываются правила для всея Хуавей-девайсов в системе. Скорее всего он будет пустым.
Вбиваем строчки:
KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.1", NAME="%k", SYMLINK+="hv0", GROUP="root", MODE="0666"
KERNEL=="ttyUSB[0-9]*", ID=="1-2:1.2", NAME="%k", SYMLINK+="hi0", GROUP="root", MODE="0666"

«Всея устройства на этом конкретном порту отныне и присно зовутся ещё и hv0, а на этом — hi0! Сохраняем, Аминь!»
Повторяем процесс начиная с втыкания для второго модема — появятся ещё две строчки в файле, в которых уже порты от второго модема и hv1 и hi1… Можно так и третий, и сто-тридцать-пятый добавить…

Теперь если выдернуть модемы и вставить, то по команде ls -1 /dev/hv* или ls -1 /dev/hi* — выдаст ВСЕГДА нужный девайс, главное не перепутать разъём на компе!

/etc/asterisk/datacard.conf тоже меняется — вместо безликих
audio=/dev/ttyUSB1 ; tty for audio connection
data=/dev/ttyUSB2 ; tty for AT commands

Появляются
audio=/dev/hv0 ; tty for audio connection
data=/dev/hi0 ; tty for AT commands

Теперь перезагружаем Астериск и ура — путаницы больше не будет!
На этом с железом пока всё.

SIP-операторы


В принципе с имеющимся оборудованием у нас уже есть городская + мобильная линии, но хочется дополнительных возможностей, да и по межгороду надо как-то звонить!

Мультифон

Мультифон — это услуга от Московского Мегафона. Фишка в том, что это не просто Интернет-телефония! Это Интернет-телефония, привязанная к вашему номеру Мегафона!
В переводе на русский: если кто-то звонит на ваш номер — сработает при соответствующей настройке как сотовый, так и SIP-клиент!
Настройку Астериска под это дело на Хабре довольно неплохо описали, могу добавить только инструкцию, как привязать НЕСКОЛЬКО Мультифонов к серверу — некоторые моменты там спорны и у меня не заработало из-за несовместимости по кодекам, но, возможно, это глюк моего конфига?!
UPD. Родная инструкция Мультифона по настройке в Астериске

Пара слов ещё по общим для всех SIP-операторов моментам: если вы собираетесь ТОЛЬКО звонить с какого-то SIP-акаунта, то register не нужен, а вот если намерены принимать…
Кстати, register с таким зубодробительным синтаксисом — только у Мегафона: у остальных он более стандартный…

Еврофон

Услуга СИП-телефонии от Евросети. В плюсе — львиная доля российских городов идёт по тарифу 49 копеек. Есть входящие номера в Москве и куче городов, так что если не лень вбивать номер+свой номер в Еврофоне — можно принимать оттуда входящие…
Потенциально — если не особенно нужен входящий городской, а звоните не особо много — может оказаться выгоднее, чем ежемесячные 155 рублей от МГТС «за линию»…

Для регистрации — надо купить карточку телефонии от Евросети. Логин-пароль — будут указанные на карточке, в дальнейшем этот счёт можно пополнять. Регистрации без карточки — просто нету.

pctel.ru

Звонки на все российские номера — по рублю в минуту.
Взял как «добавку» к Еврофону: звонки на мобильные дешевле в нём, а про полтора рубля за исходящие в Мультифоне я молчу! Если хотите скрыть свой номер — самое оно.

SipNet

Ничего особенного, но многие предпочитают его.

DID, или Прямой Телефонный Номер


Данная услуга заключается в том, что можно получить номер телефона в одном из городов какой-нибудь страны и принимать через Астериск звонки на этот номер.
Плюс в том, что если часто переезжаете, то это позволит вам всегда сохранять свой номер, минус — в отличие от 155 рублей в месяц у МГТС, цены на Московские номера у операторов начинаются от 250 рублей, примерно. (Для сравнения — номер в США стоит около 3.5$ в месяц).

Go2Baza

По утверждению народа, который пользовался — прямой Московский номер стоит 250 рублей в месяц. Тарифы расписаны не внятно, так что ни подтвердить, ни опровергнуть не могу… Ориентировочно — 250 в месяц за номер, плюс первоначальный платёж за выделение номера — 500 рублей за 499 или 3000 за 495… Смысл платить больше, если с МГТС станется — могут и тут в 499 всех задвинуть?!
В плюсе то, что предоставляют аж пять входящих каналов… Правда только при редиректе на номера телефонов, а на SIP — всего 2 (перегрузочка у них возникла в апреле). Зато редирект на телефоны платный, а на СИП — халява!
Ну и потом: двухканальный номер телефона — ИМХО, очень даже неплохо! Чаще всего больше и не надо!

«Персональный телефонный номер» или «Номер, который всегда с тобой»

МГТСовская фигня. По факту — Московский номер через SIP. В повременном варианте абонентской платы нет, цена за минуту — те-же 36 копеек. Подключение — 8340 рублей, причём в комплект идёт тот самый Сименс 470, про который я говорил.

Губки раскатали? Халява? Круто?
Ловите губозакатывательную машинку: оно работает ТОЛЬКО через ADSL от МГТС! Как поясняют в поддержке — это только для организации дома второго телефонного номера.
Потенциально — явно можно подрубить к Астериску, но мне ТАКОЙ привязанный к основной линии телефон и даром не нужен, а в интернете найти счастливых обладателей этой услуги не удалось.
Просто имейте в виду, что такое есть, и если дома кто-то периодически висит на телефоне — можно подключить, что-бы была резервная линия…

gtalk2voip

Прямые номера в разных странах.
Регистрация идиотская:
1. Заходите на gtalk2voip, в уголке есть поле для ввода е-мыла. Вводите гугловское мыло.
2. Подключаетесь в Джаббер на свой гугловский аккаунт, видите приглашение от пользователя service@gtalk2voip.com. Подключаетесь к «разговору»
3. Далее у этого бота командой MYPAGE получаете страничку, через которую можно регистрировать номера и пополнять баланс.

ipkall

Компания с «непечатным» названием предоставляет халявные номера телефонов в США с редиректом на SIP. Если не нужен — не надо его окупировать регистрациями: вдруг кому-то нужен будет, а всё в хабраэффект уйдёт?!
Насчёт этого сервиса у меня вечный скандал с жабой:
— Ы! Круто! Бесплатный номер в США! Надо-надо-надо!
— А зачем? — вопрошает реалист. — Тебе кто-нить из Штатов звонит?!
— Потому и не звонят! Хочу-хочу-хочу!
— Английский выучи, хотелка! Вот позвонят, и что ты скажешь?!
— Хенде-хох? Ау видерзейн? Хау! Что-б такой пылеглот как я и ничего не сказал?! Ха!
— Всё равно — смысла в нём ноль сейчас!
— И что? Халяаааава!

Аллоинкогнито: «Идеальный 499»

Идеальный 499, тарифный план от Алёинкогнито, без абонентской платы за 499… В комплекте — симка от Мегафона, на которую и поступают вызовы…
Ссылку подкинул bdmalex. По его словам пользуется уже давно, абонентской платы действительно нету и, даже, что вообще сверх моего понимания, нету оплаты за переаресацию входящих на мобильный номер!!!

Фишки диалпланов Астериска


С железом и операторами, худо-бедно разобрались…
Теперь несколько трюков, связанных с Астериском:

Чёрный Список

Иногда очень сильно хочется, что-бы какая-нить личность перестала названивать: бывшая девушка, идиот, вечно ошибающийся номером, рекламные агенты, опросы и т.д. и т.п.
Для этого в Астериске есть команда BLACKLIST(). По сути — она сверяет CallerID со списком в своей базе данных и если возвращает 1 — значит можно спокойно послать звонящего куда подальше!
Про «Простой» вариант написано можно почитать здесь, а мне захотелось слегка облегчить себе жизнь: ну лениво мне смотреть номер на определителе, после чего — вбивать его «куда надо»!
Пусть Астериск сам этим и занимается!

В Диалплане при звонке с нужного контекста пишем (при звонке с МГТС у меня редиректит на номер 123 — замените на то, что у вас указано!):
exten => 123,n,Set(_From=${CALLERID(name)}) ; name, а не num потому, что вот так идиотски передаёт CallerID в Астериск адаптер от ДЛинка!
exten => 123,n,GotoIf($[${BLACKLIST()}=1]?banned) ; Сначала - проверка на заблокированные номера - если номер уже в чёрном списке - переходим к метке banned
exten => 123,n,Set(DB(ToMe/LastCaller)=${From}) ; Сохраняем номер последнего позвонившего
.....
; Тут у нас обработка нормальных вызовов.
.....
exten => 123,n,Hangup()

; И шлём спамеров лесом!
exten => 123,n(banned),Answer()
exten => 123,n,Playback(файл, в котором посылающая спамеров лесом фраза)
exten => 123,n,Hangup()


И в диалплане телефонного аппарата:
; По 20 - добавляем последнего позвонившего в чёрный список
exten => 20,1,Set(tmp=${DB(ToMe/LastCaller)})
exten => 20,n,Set(DB(blacklist/${tmp})=1)


Теперь если после звонка спамера вы снимите трубку и наберёте «20» — его добавит в список забаненных!
Как убрать номер — показано в инструкции выше.

Быстрый набор

У всех из нас есть номера, по которым мы чаще звоним: родственники, коллеги по работе, знакомые…
Вбивать каждый раз 10 цифр номера — лениво! Поэтому можно создать записную книжку прямо на своей АТС!
В диалплане для телефона:
exten => 1,1,Dial(SIP/701/8495......) ; Родителям
exten => 2,1,Dial(SIP/701/8495......) ; Бабушка
exten => 3,1,Dial(SIP/701/8495......) ; Дед
exten => 4,1,Dial(SIP/701/8499......) ; Работа

И т.д. и т.п.

Вообще — хотел сделать голосовым меню, но при снятии радиотрубки обработка номера «s» почему-то не происходит… Так что можно просто выписать на бамажку «кто есть ху»…
Если куплено несколько трубок, как в моём случае, для каждой может быть свой контекст со своими «короткими номерами»: на телефоне в комнате у родителей не нужны мои знакомые, а мне — ихние…

Приветствие от времени суток

Своей АТСке можно добавить немного «человечности», что-бы она выдавала разное приветствие, в зависимости от времени суток (а при желании — и дня недели, месяца и т.д. и т.п.). К примеру утром она может приветствовать позвонившего зеванием, а ночью — высказать всё, что думает о личности, которая звонит когда все нормальные люди уже спят.

; Прикол с временем звонка
exten => 1200,1,Background(hello_utro) ;Запускаем приветствие "Утро"
exten => 1200,n,Goto(123,naberite) ;К кнопкам

exten => 1201,1,Background(hello_den) ;Запускаем приветствие "День"
exten => 1201,n,Goto(123,naberite) ;К кнопкам

exten => 1202,1,Background(hello_vecher) ;Запускаем приветствие "Вечер"
exten => 1202,n,Goto(123,naberite) ;К кнопкам

exten => 123,1,Verbose("Звонок с линии МГТС")
exten => 123,n,Answer() ;Поднимаем трубку
exten => 123,n,GotoIfTime(07:00-12:00|*|*|*?1200,1) ; Утро с 7 до 12
exten => 123,n,GotoIfTime(12:01-19:00|*|*|*?1201,1) ; День - с 12 до 19
exten => 123,n,GotoIfTime(19:01-22:00|*|*|*?1202,1) ; Вечер - с 19 до 22
exten => 123,n,Background(hello_noch) ; Остальное - ночь: Запускаем приветствие "Ночь"

exten => 123,n(naberite),Verbose("Голосовое меню") ; Далее идёт голосовое меню...
...


Антибот

Если вам часто звонят левые люди, просящие «Машу, Сашу или Дашу», а то и вообще какого-нибудь Баракобаму — следующий пример ваш!
Общая мысль в том, что при ответе выдаёт приветствие в стиле «Здравствуйте, вы позвонили в квартиру. Если вы уверены, что это квартира Ивановых — нажмите 1, если Петровых — 2, Сидоровых — 3! Если ни одна из фамилий не подходит, или вы звоните в организацию — повесьте трубку: вы не туда попали!».
Минус — заворачивать будет и «полезных» ботов, типа «Вы забыли оплатить телефон и скоро мы вас отрубим!», но тут или-или…

exten => 123,n,Answer()
...
exten => 123,n(naberite),Background(familie) ;Мессаг на тему выбора фамилии
exten => 123,n,WaitExten() ;Ждем ввода от пользователя

exten => 1,1,Goto(normal,s,1) ;Нажали 1 - ура, угадали! Вместо 1 может быть 2, 3 или какой там правильный ответ. "normal" - контекст обработки и общения с теми, кто знает куда позвонил.

exten => i,1,Playback(invalid) ; Нажали не то — говорим что облом
exten => i,n,Hangup() ; Вешаем трубку

exten => t,1,Playback(bay) ; Время кончилось - прощаемся
exten => t,n,Hangup() ; Вешаем трубку


Хитрый CallBack

У меня мобильник с двумя симками: одна — для разговоров, вторая — А-Мобайловская для связи с мини-АТС моей.
Ну и проблема в том, что пару раз по ошибке звонил не с той сим-карты — 2.40 не деньги, конечно, но когда отлаживаешься и звонишь периодически на сервер — неприятно!
В связи с чем слегка переделал скрипт Callback под свои нужды.

[incoming_mobile]
; Обработка звонков
exten => s,1,GotoIf($["${CALLERID(num)}" = "+7916......."]?allow) ; Номер А-Мобайл - хорошо!
exten => s,n,GotoIf($["${CALLERID(num)}" = "+7926........"]?callback) ; Мегафон - плохо!
exten => s,n(reject),Hangup() ; Остальным - просто вешаем трубку, ибо нефиг!
exten => s,n(allow),Verbose("Звонок с моего А-Мобайла")
exten => s,n,Goto (incoming_mobile,200,1) ;Редирект на голосовое меню
exten => s,n,Hangup()
exten => s,n(callback),Verbose("Я тормоз - позвонил с Мегафона!")
exten => s,n,System(/etc/asterisk/scripts/callback)
exten => s,n,Hangup()

exten => 200,1, .... ; Сюда попадаем или при правильном телефоне, с которого звонили, или после того, как каллбек до нас дозвонился.
.....

exten => 601,1,Dial(Datacard/g1/+7916....) ; Мне на А-Мобайл
exten => 601,n,Hangup()


А это — /etc/asterisk/scripts/callback — не забудьте дать ему права на выполнение: пол-часа не мог понять, почему не срабатывает!
#!/bin/sh
sleep 10
echo "Channel: Local/601@incoming_mobile
MaxRetries: 1
RetryTime: 10
WaitTime: 20
Context: incoming_mobile
Extension: 200
Priority: 1
AlwaysDelete: Yes" >/var/spool/asterisk/tmp/tst.call
mv /var/spool/asterisk/tmp/tst.call /var/spool/asterisk/outgoing/tst.call


«У меня не все дома!» или «Я в домике!»

Этот фрагмент настолько элементарен, что дольше описать, зачем он нужен, чем сами экстеншены!
Итак, вы пошли куда-то по делам, мобильник сунули в карман, учесали на другой конец города и вдруг кто-то решил позвонить вам на домашний! Причём «ваш звонок важен для нас», но ответить не сможете… Или сможете?
; Входящий с МГТС или DID
...
exten => 123,n,Dial("sip/702",10) ; 10 секунд пинаем только домашний телефонный аппарат - можно задать и большее время и меньшее...
exten => 123,n,Verbose("Скорее всего меня нет дома - редирект на мобилу, ну и продолжаем пинать трубку!")
exten => 123,n,Dial("sip/702"&"Datacard/g1/+7916....",20) ; И секунд двадцать будут звонить уже совместно...
exten => 123,n,Hangup()


Второй кусочек — будет интересен владельцам Мультифона.
У меня, да и у многих знакомых, есть «болезнь»: забыть мобильник в кармане брюк или сумке и запихнуть это «хранилище» в шкаф… В итоге придушенный писк телефона с трудом можно услышать, а звонок мог быть важным!!!
Для борьбы с этим я запараллелил к Мегафону-Мультифону радиотрубку в своей комнате.
Делается тупо в 2.5 строчки:
exten => 7926.......,1,Verbose("Звонок на мой Мегафон!")
exten => 7926.......,n,Dial("SIP/702")
exten => 7926.......,n,Hangup()


Защита


В отличие от домашних веб-фтп серверов — домашняя мини-АТС представляет собой довольно серьёзную угрозу вашему благосостоянию: нехорошие редиски, получив доступ к вашей телефонной сети, могут наболтать по межгороду столько, что счёт Билайна к туристке за связь в размере полу-миллиона может показаться копеечным!
Рекомендую почитать статью про защиту Астериска, заметку на Хабре про Кубинскую Эпидемию
Ну и простые советы:
1. Если звонки с городской линии идут только на городские номера — заблокируйте на уровне экстеншена набор любых других номеров.
2. Для выхода на межгород — создайте отдельный контекст для межгорода, вход в который будет через «пароль» — номер, который надо ввести.
3. Для аккаунтов локальных телефонов — вбейте в sip.conf на каждого «локальщика» его фиксированный IP-адрес, в крайнем случае — локальную под-сетку, благо, что у СИП-телефонов и адаптеров чаще всего есть возможность задать фиксированный IP.

Заключение


Это — лишь малая часть того, что можно сделать с Астериском. Ещё некоторые вещи я просто не смог вспомнить — банально засыпаю на ходу.
Всё это при желании читателей может дополняться и исправляться: пишите в комментах пожелания!

Литература


О`Рейли, Астериск: Будущее телефонии — Маст Хэв! Библия!
Asterisk и Linux — миссия IP-телефония, часть 1
Asterisk и Linux — миссия IP-телефония, часть 2
Asterisk и Linux — миссия IP-телефония, часть 3
Делаем деньги на звёздах
Голосовое меню в Asterisk

P.S. «Головка бо-бо, во рту бяка....» — отосплюсь и добавлю ещё про защиту всего этого, пару слов про NAT и ещё каких-нибудь примерчиков.

P.P.S. Некоторые места в диалпланах «резал по живому» — может глюкавить слегка: пишите — уточню и поправлю!
Tags:
Hubs:
+171
Comments 110
Comments Comments 110

Articles