Пару недель назад мы объявили о публичном бета-тестировании Elastic SIP Trunking — нового способа подключения вашего SIP-оборудования к миру через Twilio. С помощью Elastic SIP Trunking вы можете попрощаться с искусственными ограничениями масштабирования и манипуляциями с ценами. Мы считаем, что этот новый способ потребления SIP-соединений предлагает опытным администраторам VoIP-сетей и инженерам мгновенно развертываемую, надежную альтернативу традиционным SIP-транкам.
Одним из самых частых запросов после запуска бета-версии Elastic SIP Trunking был вопрос о том, как подключить Elastic SIP Trunk от Twilio к FreeSWITCH — популярной открытой SIP-платформе. Давайте разберемся, как это сделать.
Как это работает
Twilio SIP Trunk предоставляет домен для подключения вашего SIP-коммутационного оборудования к Twilio. На этапе публичного бета-тестирования Elastic SIP Trunking поддерживает только услугу терминации, то есть вы можете совершать только исходящие звонки.
Две ключевые особенности будут знакомы тем, кто ранее приобретал SIP-транки. Во-первых, Twilio Elastic SIP Trunking доступны мгновенно, когда они вам нужны — не нужно ждать расценок и заключения контрактов. Как мы вскоре рассмотрим, вы можете развернуть SIP-транк в любое время с прозрачным ценообразованием на основе объема. Во-вторых, Elastic SIP Trunking масштабируются вместе с вами — не нужно беспокоиться о каналах или планировании одновременных вызовов. С Elastic SIP Trunking вы можете совершать столько одновременных звонков, сколько захотите, не оплачивая минимальное количество одновременных вызовов. Вместо оплаты за то, что вы можете использовать, Twilio Elastic SIP Trunking выставляет счет за то, что вы действительно используете.
С учетом этих концепций давайте посмотрим, что нам нужно для начала.
Что нам понадобится
Давайте разберем, что нам нужно для этого проекта.
— Аккаунт Twilio — зарегистрируйтесь бесплатно здесь.
— Установка FreeSWITCH — это может быть сложный процесс. Для Linux я выбрал установку на Debian. Инструкции по установке для CentOS 6 доступны здесь. Для Windows отлично подойдет пошаговое руководство от FreeSWITCH. Для Mac пользователь SIP-хакер из сообщества Twilio Мик Стивенс рекомендует этот установщик Applescript.
— Зарегистрированная SIP-конечная точка — данное руководство предполагает, что у вас есть телефонный аппарат или софтфон, успешно регистрирующийся в вашей установке FreeSWITCH. Если вы начинаете с нуля, я рекомендую «ванильный» метапакет для получения конфигурации по умолчанию, которую можно настроить для работы вашей первой конечной точки.
Разобравшись с требованиями, давайте соберем необходимую информацию для подготовки проекта.
Если вы устанавливаете FreeSWITCH впервые, небольшое замечание о безопасности вашей установки. По умолчанию «ванильный» пакет настроен с паролем «1234» для всех пользователей, который определен в вашем файле `vars.xml`. Очень важно изменить этот пароль по умолчанию и удалить всех неиспользуемых пользователей из каталога `directory`.
В интернете много ботов, которые ищут незащищенные SIP-АТС, чтобы совершать звонки на дорогие премиум-маршруты (также известные как «накрутка трафика»). Все эти боты ищут стандартные пароли для популярных открытых коммутаторов, таких как FreeSWITCH или Asterisk. Принятие мер предосторожности по защите вашего хоста не составляет труда, но эти шаги необходимы, чтобы ваш аккаунт Twilio не был использован злоумышленниками.
Прежде чем оставлять ваш хост в открытом доступе в интернете, обязательно защитите его, следуя этому полезному руководству.
Подготовка проекта
В этом руководстве мы предполагаем, что FreeSWITCH уже установлен, и вы хотите добавить Twilio в качестве внешнего SIP-профиля. Когда наша установка готова, мы можем начать собирать информацию, необходимую для подключения FreeSWITCH к Elastic SIP Trunk от Twilio.
Сначала давайте посмотрим, как обеспечивается безопасность связи между нашей установкой FreeSWITCH и Twilio. Elastic SIP Trunking использует комбинацию сетевой безопасности и аутентификации. Для выполнения последнего требования нам нужно создать новое имя пользователя и пароль, которые мы зарегистрируем в нашем SIP-транке Twilio для проверки общих секретов. Мы создадим это имя пользователя и пароль на следующем шаге. Для удовлетворения требования сетевой безопасности нам нужно определить внешний IP-адрес хоста для нашей установки FreeSWITCH.
Начнем с сетевой безопасности. Нам нужно найти внешний IP-адрес, который наша установка FreeSWITCH будет использовать для подключения к Twilio. Если вы не знаете внешний IP-адрес, вот простой трюк с использованием удобного сервиса IPEcho.
Для пользователей Linux вы можете найти IP-адрес на хосте, открыв терминал и введя следующую команду:
`curl http://ipecho.net/plain`
Для пользователей Windows вы можете найти IP-адрес на хосте, открыв веб-браузер и перейдя на IP Echo.
Как только у нас будет публичный IP-адрес для хоста FreeSWITCH, мы сохраним его под рукой, чтобы затем развернуть наш SIP-транк Twilio.
Развертывание Twilio Elastic SIP Trunk
Теперь, когда мы выполнили подготовительную работу, давайте мгновенно создадим новый Elastic SIP Trunk из панели управления Twilio. Сначала войдем в Twilio и перейдем в раздел Elastic SIP Trunking, нажав на выпадающее меню в верхнем левом углу.
Затем нажмем на вкладку SIP Trunks.
Теперь нажмем «Создать SIP Trunk» в правом верхнем углу под выпадающим меню аккаунта, чтобы начать развертывание нашего SIP-транка.
Здесь происходит несколько вещей при развертывании нашего первого SIP-транка — давайте разберем их по порядку. Во-первых, нам нужно создать SIP URI для нашего домена Twilio. Этот URI будет доменом, к которому мы подключимся в нашей конфигурации FreeSWITCH, и он должен быть уникальным в Twilio. Во-вторых, нам нужно дать нашему транку понятное имя, по которому мы его узнаем позже. Я использовал «Мой первый SIP-транк» — вы можете выбрать любое удобочитаемое имя.
Наконец, нам нужно защитить наш транк с помощью списка разрешенных IP-адресов и списка учетных данных. Это будет двухэтапный процесс регистрации списка IP и учетных данных для нашего транка.
Сначала создадим новый список IP-адресов.
Появившееся диалоговое окно принимает два значения — понятное имя (подсказка: хорошая практика — использовать то же имя, что и у вашего транка) и IP-адрес или блок адресов с нотацией CIDR. Мы будем использовать публичный IP-адрес, который мы определили в предыдущем разделе.
Далее создадим новый набор учетных данных для этого транка. Мы можем сделать это, нажав «Создать учетные данные».
По умолчанию это меню автоматически заполнит адрес электронной почты и пароль вашего основного аккаунта Twilio. Обратите внимание, что вам нужно изменить имя пользователя на что-то без символа @, чтобы успешно пройти аутентификацию.
В этом примере давайте установим имя пользователя, соответствующее имени нашего хоста, которое мы назовем `pbx.myhost.tld`. Пароль должен быть надежным — этот SIP-домен сможет совершать платные звонки. Сохранение этих учетных данных и списков IP в безопасности важно для предотвращения эксплуатации, такой как накрутка трафика.
Обязательно запомните эти значения учетных данных — они понадобятся нам на следующем шаге, когда мы будем настраивать FreeSWITCH для подключения к нашему Elastic SIP Trunk от Twilio.
Подключение FreeSWITCH к нашему Elastic SIP Trunk
Первым шагом для подключения нашей установки FreeSWITCH к недавно развернутому Elastic SIP Trunk является создание нового внешнего SIP-профиля в нашей конфигурации FreeSWITCH. FreeSWITCH — это многофункциональная платформа с большим количеством конфигурационных файлов, местоположение которых может отличаться в зависимости от платформы и дистрибутива. Нам нужно найти местоположение корневого каталога конфигурации, прежде чем мы сможем настроить FreeSWITCH для использования нашего Elastic SIP Trunk.
Для Windows местоположение корневого каталога конфигурации:
`C:\Program Files\FreeSWITCH\conf`
Для Linux оно может находиться в нескольких местах в зависимости от вашей установки. Вы можете посмотреть в этих местах для каталога конфигурации вашей установки:
`/etc/freeswitch`
`/usr/local/freeswitch/conf`
`/opt/freeswitch/conf`
Когда мы нашли каталог конфигурации FreeSWITCH, нам нужно выполнить два шага конфигурации для совершения исходящих звонков с помощью нашего Elastic SIP Trunk — сначала создать новый SIP-профиль, а затем план набора для указания FreeSWITCH использовать наш SIP-профиль Twilio для соединения вызова.
Для начала создадим SIP-профиль для нашего Elastic SIP Trunk от Twilio. Следуя соглашениям структуры конфигурации «ванильного» FreeSWITCH, мы создадим файл с именем `twilio.xml` в каталоге `sip_profiles/external` внутри корня нашей конфигурации.
В файле twilio.xml мы определим новый шлюз, который назовем `Twilio-outbound`, с учетными данными пользователя и SIP URI, которые мы определили при первом развертывании нашего SIP-транка в панели управления Twilio.
Далее настроим план набора для использования только что созданного SIP-профиля Twilio для совершения любых исходящих звонков. План набора в FreeSWITCH — это настроенное расширение, которое сопоставляет регулярное выражение с указанным действием. В нашем случае мы будем направлять все внутренние и международные телефонные номера на наш SIP-профиль `Twilio-outbound`, который мы определили на предыдущем шаге. Мы можем сделать это, создав новый файл плана набора с именем `02_twilio.xml` в каталоге `dialplan/default`. Если у вас уже есть план набора с префиксом `02`, выберите последний номер, который вы видите в каталоге (например, `09_twilio.xml` подойдет).
Давайте разберемся, что здесь происходит. Мы определили три новых расширения — одно для десятизначных номеров США (например, 555-555-5555), одиннадцатизначных номеров США (например, +1-555-555-5555) и затем большое регулярное выражение для международных телефонных номеров (например, для Великобритании: +44 55 5555 5555). Каждое из них учитывает настройку `toll_allow` для зарегистрированных конечных точек, что означает, что только пользователи с определенными разрешениями на звонки внутри страны и за рубеж будут соответствовать плану набора. Мы также наследуем `outbound_caller_id_number` и `outbound_caller_id_name`, определенные в `vars.xml`. Если вы настраиваете FreeSWITCH впервые, я рекомендую установить эти два значения `caller_id` на номер телефона Twilio. Наконец, мы настраиваем расширение для соединения с нашим SIP-профилем с использованием настроек `Twilio-outbound`, которые мы определили ранее.
Далее нам нужно перезагрузить наши конфигурации. Наименее интрузивный способ сделать это — загрузить утилиту `fs_cli`.
Для Windows она находится здесь:
`C:\Program Files\FreeSWITCH\fs_cli`
Для Linux вы можете получить к ней доступ, выполнив команду:
`fs_cli`
Затем вам нужно перезагрузить ваши планы набора с помощью этой команды:
`reloadxml`
Наконец, мы можем добавить наш новый SIP-профиль с помощью следующей команды:
`sofia profile external rescan`
Используя нашу зарегистрированную SIP-конечную точку, давайте совершим звонок с помощью только что настроенного SIP-профиля, соединяющего FreeSWITCH с нашим Elastic SIP Trunk. Если у вас нет под рукой телефонного номера, попробуйте этот: +1 510.229.4252.
Если все прошло успешно, мы должны услышать поздравительный голос и увидеть что-то похожее в нашем логе FreeSWITCH:
Если у нас не получилось, ознакомьтесь с советами в следующем разделе, где описаны некоторые распространенные ошибки, с которыми я столкнулся как новичок в FreeSWITCH при настройке своего первого Elastic SIP Trunk.
Распространенные ошибки
В установке FreeSWITCH много подвижных частей — это невероятно мощное программное обеспечение с множеством настроек. Вот некоторые ошибки, на которые стоит обратить внимание, если вы работаете с FreeSWITCH впервые.
— Настройки брандмауэра: FreeSWITCH работает на нескольких портах — просто открыть 5060 для TCP и UDP будет недостаточно. Полный список можно найти на этой вики-странице. Если вы используете `iptables`, там также есть скрипт для соответствующих цепочек правил.
— Местоположение плана набора: в зависимости от вашей установки местоположение вашего плана набора может быть неверным, если вы не видите, что sofia пытается подключиться к вызову через SIP-профиль Twilio. Для «ванильной» установки FreeSWITCH это будет каталог `dialplan/default`, но он может отличаться в зависимости от вашей установки. Использование `fs_cli` в режиме DEBUG может показать, какие расширения соответствуют вашим номерам.
— Входящие звонки: исходящие вызовы пока не поддерживаются Elastic SIP Trunking на этапе бета-тестирования. Если вас интересует настройка этой функции, вы можете зарегистрироваться для доступа, когда эта функция станет доступна здесь.
— ACL: Помимо брандмауэра, за которым, вероятно, находится ваш хост, FreeSWITCH поддерживает свои собственные списки контроля доступа (ACL). Если вы не можете принимать звонки от Twilio
Отлично — теперь у нас работает Elastic SIP Trunk на нашей установке FreeSWITCH. Это только начало пути по настройке вашей установки FreeSWITCH для работы с SIP через Twilio. Для следующих шагов попробуйте изучить эти функции:
— Включите «Запись» для легкой записи всех ваших исходящих звонков одним нажатием.
— Настройте свои планы набора с разными номерами Twilio в качестве Caller ID для ваших международных звонков, чтобы звонки в Великобританию или любую из многих других поддерживаемых стран выглядели так, будто они исходят от местного номера.
— Настройте SIP-домен Twilio для легкой организации конференций или очередей.
Это был мой первый опыт подключения FreeSWITCH к Twilio — мне интересно узнать больше о вашем опыте использования этого нового продукта. Пожалуйста, обращайтесь с вопросами по установке FreeSWITCH и своими историями по адресу rob@twilio.com или в Twitter @dn0t.