From: Компания NetUP <http://www.netup.ru>
Date: Mon, 20 Nov 2004 18:21:07 +0000 (UTC)
Subject: Настройка IP-телефонии на базе Linux/FreeBSD и маршрутизаторов Cisco
Оригинал: http://www.netup.ru/?pid=36
Настройка IP-телефонии на базе Linux/FreeBSD и маршрутизаторов Cisco с
использованием биллинговой системы NetUP UTM.
В данной статье будут рассмотрены основные схемы организации передачи
голосовых данных по IP-сетям (IP-телефония, VoIP, компьютерная
телефония и т.д.).В схемах используется наиболее распространенное
семейство протоколов H.323 (альтернативным вариантом служит протокол
SIP, но в рамках данной статьи он не рассматривается).
В качестве платформы для запуска H.323 гейткипера служит Linux либо
FreeBSD. В качестве голосового шлюза в телефонную сеть общего
пользования используется маршрутизатор Cisco с голосовым модулем. В
качестве абонентского устройства использовался телефонный адаптер
Cisco ATA-186 либо обычный компьютер под управлением ОС
Linux/FreeBSD/Windows с установленным программным обеспечением для
осуществления звонков (OpenPhone, Gnomemeeting,Microsoft NetMeeting и
др.).
Во всех схемах была использована биллинговая система NetUP UTM версия
5.0 с модулем IP-телефонии. Модуль IP-телефонии представляет собой
сервер NetUP RADIUS и предназначен для обработки запросов на
авторизацию и учёт потребленных услуг от голосовых шлюзов, гейткиперов
(gatekeepers), голосовых прокси-серверов. Сервер NetUP RADIUS
представляет собой приложение, которое в реальном времени обрабатывает
поступающие к нему запросы по протоколу Remote Authentication Dial In
User Service (RADIUS) - RFC 2138 и RFC 2139.
При обработке запросов сервер NetUP RADIUS обращается к ядру
биллинговой системы по протоколу URFA (более подробно эти моменты
рассмотрены в официальной документации на биллинговую систему NetUP
UTM версия 5.0).
Терминология
IP-телефония (IP telephony)
Общий термин, означающий передачу речи по сетям с использованием
протокола IP. Так же для обозначения этой технологии используются
термины: Voice over IP (VoIP), Internet Telephony.
ТфОП (PSTN)
Сокращение от словосочетания <<телефонная сеть общего пользования>>. В
это понятие включены городские и национальные сети обычной телефонии.
Также используется термин PSTN - сокращение от <<Public Switched
Telephony Network>>.
АОН (Caller ID)
Номер вызывающего абонента. Также используется термин ANI - сокращение
от <<Automatic Number Identification>>. Часто услуга определения
номера вызывающего абонента называется АОН.
Шлюз IP-телефонии (VoIP gateway)
Устройство, имеющее порт для подключения к сети на базе протокола IP,
а также по необходимости порты для подключения к ТфОП. Обычно данное
устройство служит для стыковки ТфОП и IP-сети.
Примером устройства данного типа может служить маршрутизатор Cisco
3620 с модулем NM-2V + VIC2FXO.
При таком подключении шлюз организует преобразование голосового
трафика из сети на базе протокола IP в ТфОП. Таким образом,
пользователь с IP-телефоном либо компьютером с установленным
программным телефоном (Microsoft NetMeeting, OpenPhone и др.) может
вызывать абонента городской телефонной сети (ТфОП).
Аналогично и в обратную сторону: абонент городской телефонной сети
(ТфОП) может вызывать абонента в сети с протоколом IP. Для этого
необходимо набрать номер шлюза в сети ТфОП (на схеме это 9391000) и
затем после авторизации (если этот механизм включен на шлюзе) набрать
внутренний номер абонента в сети с протоколом IP (на схеме это номера
100 и 200).
H.323
Стандарт, предложенный Международным союзом электросвязи (ITU-T),
описывающий построение сетей IP-телефонии. Стандарт описывает
протоколы, связанные с регистрацией оборудования IP-телефонии (RAS -
Registration, Admission and Status), установления соединения (H.225.0,
H.245), передачи речи, авторизации пользователей и др.
Привратник отвечает за регистрацию оконечного оборудования (шлюзов,
клиентских устройств), контроль прав доступа, номерной план.
Практически все привратники имеют возможность проводить авторизацию и
передачу статистики по состоявшимся звонкам по протоколу RADIUS.
В такой схеме все устройства сети должны зарегистрироваться на
привратнике. При этом авторизация может проводиться по протоколу
RADIUS с использованием стандартной схемы Access-Request.
В итоге у привратника находится таблица IP-адресов и номеров всех
устройств в сети. Соответственно, все вызовы начинаются с обращения к
привратнику для преобразования набранного номера в IP-адрес. При этом
привратник может запросить у сервера RADIUS авторизацию данного звонка
и передать заполненные атрибуты Called-Station-Id (набранный номер) и
Calling-Station-Id (номер вызывающего абонента). При этом сервер
RADIUS проверяет баланс пользователя, тарифный план на вызываемое
направление, и если все вычисления прошли успешно, то передает пакет
Access-Accept, в котором может указать максимальное время соединения
для данного пользователя по данному направлению. Обычно эта информацию
указывается в атрибуте h323-credit-time, vendor 9 (Cisco).
В случае, если авторизация прошла успешно, после согласования всех
параметров устанавливается соединение между вызываемым и вызывающим
терминалами. При этом привратник передает на сервер RADIUS пакет о
начале соединения (Accounting-Start), в котором указывает параметры
установленного соединения.
В случае, если терминалы находятся в одной сети, то общение между ними
производится напрямую. Если вызываемый терминал находится в другой
сети, то общение между терминалами производится через один из шлюзов.
Также возможен вариант, когда общение клиента производится только с
привратником. В этом случае привратник выполняет функции прокси, и
реальные IP-адреса терминалов скрываются. Такая схема работы
применяется, если канал напрямую между терминалами по качеству хуже
(например, большие потери IP-пакетов либо задержки) чем между
привратником и каждым терминалом.
По окончании соединения привратник пересылает на сервер RADIUS пакет с
информацией о завершившемся звонке. В пакете указываются время
соединения, причина завершения соединения и другие параметры. По этим
данным сервер RADIUS проводит тарификацию сессии, списание средств и
запись в журнал событий.
Кодеки
Алгоритмы сжатия звука на передающей стороне и декодирования на
принимающей стороне. В основном это используется для минимизации
трафика, поэтому кодеки в основном характеризуются полосой пропускания
необходимой для передачи речи с использованием этого кодека. При
передаче голоса без сжатия потребуется полоса пропускания в
64 Кбит/сек.
Кодеки с высокой степенью сжатия требуют больших вычислительных
ресурсов, поэтому для кодирования большого количества голосовых
потоков используются специальные микросхемы, так называемые
DSP-процессоры.
Табл. 1 Список основных кодеков
Название кодека Поток, Кбит/сек Качество
G.711 64 Высокое
G.723.1 5.3 - 6.4 Среднее
G.729 8 Среднее
IVR
Сокращение от <<Interactive Voice Response>>. Представляет собой
технологию голосовых меню и часто используется для авторизации
пользователей ТфОП для звонков по IP-телефонии. При этом используется
следующая последовательность шагов.
1. Абонент ТфОП набирает городской номер доступа оператора
IP-телефонии. При этом трубку поднимает шлюз IP-телефонии
(например, Cisco 3640 с платой E1), подключенный к этой линии.
2. Шлюз загружает звуковой файл (обычно расширение у файлов .Call
Timeline (RU).aiau) с записанным приглашением и проигрывает его
абоненту. При этом обычно предлагается ввести номер и пин-код
предоплаченной телефонной карты.
3. После ввода определённого количества цифр производится авторизация
с введенными данными на сервере RADIUS. При этом номер карты
обычно записывается в атрибут 1 (User-Name), а пин-код - в атрибут
2 (Password).
4. В случае успешной авторизации сервер RADIUS присылает пакет
Access-Accept, в котором указывает количество оставшихся средств
на счету. Для этого используются атрибуты h323-credit-amount и
h323-currency с vendor=9 (Cisco). Шлюз IP-телефонии загружает
соответствующие голосовые файлы и проигрывает абоненту остаток
средств на счету и предлагает ввести номер, по которому необходимо
выполнить вызов. Следует заметить, что в основном IP-телефония
выгодна для звонков на большие расстояния (междугородние и
международные звонки).
5. После ввода номера производится повторная авторизация на сервере
RADIUS, при этом дополнительно передается атрибут
Called-Station-Id, в котором записывается набранный номер. В
зависимости от остатка средств на счету и стоимости минуты
соединения по этому направлению сервер RADIUS вычисляет
максимальное время сессии и передает вычисленную цифру в пакете
Access-Accept в атрибуте h323-credit-time.
6. После получения положительного ответа от сервера RADIUS шлюз
IP-телефонии устанавливает соединение с вызываемым абонентом.
Соединение будет разорвано, если длительность сессии составит
количество секунд, вычисленное на предыдущем шаге.
7. При установлении соединения на сервер RADIUS отсылается пакет
Accounting-Start, при разрыве - пакет Accounting-Stop.
Установка и запуск H323 гейткипера
Для установки загрузите установочный пакет с
http://www.gnugk.org/h323download.html для вашей операционной
системы (доступны версии под FreeBSD, Linux, Windows, Solaris) и
установите согласно инструкциям.
Гейткипер можно также установить из исходных кодов. Для этого
необходимо загрузить библиотеку PWLib, доступную по адресу
http://www.openh323.org/bin/pwlib_1.5.2.tar.gz и установить её
командами:
tar xvfz pwlib_1_5_2.tgz
cd pwlib
./configure
gmake
gmake install
Загрузить пакет Openh323 можно по адресу http://www.openh323.org/bin/openh323_1.12.2.tar.gz.
Он устанавливается командами:
tar xvfz openh323_1_12_3.tgz
cd openh323
./configure
gmake
gmake install
Загрузить пакет openh323gk можно по адресу http://www.gnugk.org/download/gnugk-2.2beta2.tgz.
Он устанавливается командами:
tar xvfz gnugk-2.2beta2.tgz
cd openh323gk
export HAS_ACCT=1
./configure
gmake
gmake install
Конфигурационный файл /etc/opengk.ini
Подробное описание опций можно найти в документе
http://www.gnugk.org/h323manual.html.
Ниже приведён пример конфигурационного файла /etc/opengk.ini с кратким
описанием.
[Gatekeeper::Main]
Fourtytwo=42
TimeToLive=600
Name=localhost
[RoutedMode]
GKRouted=1
[RasSrv::GWPrefixes]
cisco=5,8,9
* Префиксы телефонных номеров (E.164), которые будут перенаправляться на
шлюз, зарегистрированный под именем cisco. В данном примере номера,
начинающиеся на 5, 8 и 9 будут перенаправляться на шлюз. При этом шлюз
должен сам зарегистрироваться на гейткипере.
[RasSrv::PermanentEndpoints]
212.1.1.1=voip;1,2,3
* Префиксы телефонных номеров (E.164), которые будут перенаправляться на
шлюз с адресом 212.1.1.1. В данном примере номера, начинающиеся на 1,
2 и 3 будут перенаправляться на этот шлюз. При этом шлюз не должен сам
регистрироваться на гейткипере. В частности так указывается голосовой
шлюз при работе с биржей VoIP-трафика http://www.voipexchange.ru/
[GkStatus::Auth]
rule=allow
[Gatekeeper::Acct]
RadAcct=required;start,stop
default=allow
[RadAcct]
Servers=127.0.0.1:1813;
* IP-адрес и порт, на котором принимает соединения сервер NetUP RADIUS.
LocalInterface=
RadiusPortRange=10000-11000
DefaultAcctPort=1813
SharedSecret=secret
RequestTimeout=3500
IdCacheTimeout=9000
SocketDeleteTimeout=60000
RequestRetransmissions=4
RoundRobinServers=1
AppendCiscoAttributes=1
IncludeEndpointIP=1
FixedUsername=
[Gatekeeper::Auth]
RadAliasAuth=required;RRQ,ARQ
default=allow
[RadAliasAuth]
Servers=127.0.0.1:1812;
* IP-адрес и порт, на котором принимает соединения сервер NetUP RADIUS.
LocalInterface=
RadiusPortRange=10000-11000
DefaultAuthPort=1812
SharedSecret=secret
RequestTimeout=2000
IdCacheTimeout=9000
SocketDeleteTimeout=60000
RequestRetransmissions=2
RoundRobinServers=1
AppendCiscoAttributes=1
IncludeTerminalAliases=1
IncludeEndpointIP=1
FixedUsername=
FixedPassword=
[CallTable]
DefaultCallDurationLimit=3600
[Proxy]
Enable=1
* Включить режим прокси. В этом режиме пакеты от ATA-186 идут только до
и от гейткипера. Если не указывать эту опцию, то пакеты от ATA-186
будут направляться на шлюз, минуя гейткипер.
При таких настройках гейткипер будет проводить авторизацию при каждом
звонке через сервер RADIUS (порт 1812). Статистика звонков будет
передаваться на сервер RADIUS (порт 1813).
Протоколирование работы гейткипера будет вестись в файл
/var/log/gnugk.log. За работой гейткипера можно наблюдать,
подключившись по протоколу telnet на порт состояния командой
telnet 127.0.0.1 7000
Настройка шлюза VoIP на базе Cisco 26xx, 36xx, 53xx
Пример приведен для Cisco 3640 IOS 12.2(11)T8 с контроллером E1.
aaa accounting connection h323 start-stop group radius
!
controller E1 1/0
pri-group timeslots 1-31
!
!
voice class codec 1
codec preference 1 g729r8
codec preference 2 g711ulaw
codec preference 3 g723r63
!
!
gw-accounting aaa
acct-template callhistory-detail
!
!
interface Ethernet0/1
ip address 21.1.1.1 255.255.255.252
no ip mroute-cache
full-duplex
no cdp enable
h323-gateway voip interface
h323-gateway voip id GK ipaddr 21.1.1.2 1718
h323-gateway voip h323-id cisco
!
!
interface Serial1/0:15
no ip address
no logging event link-status
isdn switch-type primary-net5
isdn protocol-emulate network
isdn incoming-voice voice
isdn map address .* plan isdn type subscriber
isdn calling-number xxxxxx
no isdn outgoing display-ie
no cdp enable
!
!
dial-peer voice 2 pots
destination-pattern T
direct-inward-dial
port 1/0:15
prefix 96
!
gateway
!
dial-peer voice 4 voip
destination-pattern 100
voice-class codec 1
session target ras
!
Для звонков через Microsoft NetMeeting также следует указать следующие
команды:
!
voice service voip
h323
<;;;;;;;FONT SIZE=2>h245 tunnel disable
h245 caps mode restricted
!
В настройках программы NetMeeting необходимо выбрать кодек CCITT
u-Law, 8,000 KHz; 8Bit;Mono. Так же в настройках программ
Gnomemeeting,NetMeeting,OpenPhone необходимо указать адрес гейткипера,
логин и пароль для доступа.
При этом звонки можно совершать как между двумя пользователями
зарегистрированными на одном гейткипере (два обычных компьютера
подключенных к сети) либо во внешние сети согласно
Конфигурацию шлюза Cisco для организации звонков через предоплаченные
карты с использованием голосового меню (IVR) смотрите ниже.
Настройка Cisco ATA-186
В настройках ATA-186 необходимо указать следующие параметры
UID0: 100
Первый телефонный номер.
UID1: 200
Второй телефонный номер.
GkOrProxy: 10.1.2.105
Адрес гейткипера.
LoginID0: test1
Логин, который будет использоваться для авторизации звонков первого
телефонного номера. При этом на гейткипер будет отсылаться пароль
такой же, как логин.
Необходимо запустить сервер NetUP RADIUS. Затем указать корректные
параметры для сервера доступа (NAS), в качестве которого выступает
гейткипер на localhost (если UTM и гейткипер находятся на одном
сервере).
Пример
Идентификатор сервера доступа (NAS ID): localhost
Секретное слово для авторизации (Auth secret): secret
Секретное слово для учета (Acct secret): secret
В результате сервер RADIUS будет авторизовать пользователей при
звонках в обе стороны.
Создание направлений и зон
Для определения направления звонка используются регулярные выражения.
Строка (префикс) задает шаблон, по которому определяется, в какой
город либо страну производится вызов. Направления и префиксы можно
задать в интерфейсе администратора в разделе (Тарификация | Телефонные
направления).
Шаблоны строятся по следующим основным правилам:
^ - начало строки.
$ - конец строки.
[0-9] - цифры от 0 до 9.
{n} означает, что предыдущее объявление должно повторяться ровно n раз.
(x|y) означает, что в этом месте может находиться либо x, либо y.
Для примера разберем шаблон ^7095[0-9]{7}$, который определяет
направление <<Москва>>. Он означает, что телефонный номер должен
начинаться с четырёх цифр 7095, за которыми следуют ровно семь любых
цифр, после чего номер должен заканчиваться. Например, под этот шаблон
попадают номера 70955409652 и 70959391000.
Аналогично для шаблона ^7(901|903|905|916|917)[0-9]{7}$, который
определяет направление <<Россия (мобильные сети)>>. Он означает, что
телефонный номер должен начинаться с цифры 7, затем следует одна из
следующих комбинаций цифр: 901, 903, 905, 916, либо 917. Затем следуют
ровно семь любых цифр, после чего номер должен заканчиваться.
Например, под этот шаблон попадают номера 79167772233 и 79161112233.
Создание услуги IP-телефонии
Необходимо создать услугу с типом <<Телефония>> и указать дату начала
предоставления услуги и дату окончания.
В разделе <<Тарификация>> можно указать следующие параметры:
Размер абонентской платы
Периодическая составляющая услуги. Указанная в этом поле сумма
спишется с лицевого счета абонента за один расчетный период.
Параметры списания абонентской платы
Определяет характер списания периодической составляющей стоимости
услуги. При плавном списании сумма спишется плавно в течение
расчетного периода.
Бесплатное время
Не тарифицируемое время в начале каждого звонка. Размерность -
секунды.
Длительность начального периода
Период в начале звонка, в течение которого действует округление до
значения указанного в поле <<Шаг начального периода>>. Размерность -
секунды.
Шаг начального периода
Шаг округления в начальном периоде. Размерность - секунды.
Шаг последующего периода
Шаг округления, действующий после завершения начального периода.
Размерность - секунды.
Размер единицы тарификации
Данное поле указывает количество секунд в единице тарификации.
Стоимость в списке цен указывается для единицы тарификации. Обычно
единицей тарификации служит минута и, следовательно, в данном поле
необходимо указывать значение 60 секунд.
В разделе <<Редактор цен>> можно указать стоимость звонков с учётом
времени суток и направления.
После этого можно добавлять в систему пользователей и подключать им
созданную услугу <<Телефония>>. При подключении необходимо указать,
какие телефонные номера будут использоваться данным пользователем, а
также логин и пароль для авторизации на гейткипере.
Механизм тарификации
Последовательность шагов при проведении тарификации телефонного
звонка:
1. Определение направления/зоны.
2. Определение временного диапазона и стоимости единицы тарификации
(обычно это минута и она равна 60 секундам).
3. Отсечение бесплатного времени от звонка. Как правило, это 5 секунд
в начале разговора. Затем определение шага округления. Стоимость
будет вычисляться за вызов с учётом округления.
4. Определение стоимости звонка с учетом данных полученных на
предыдущих шагах, а так же с учетом предоплаченных единиц.
5. Проведение списания с лицевого счета за звонок и запись в базу
данных информации о звонке (длительность, стоимость, номера
вызываемого и вызывающего абонента, идентификатор сессии и др.)
Пример 1
Длительность начального периода 60 секунд, шаг округления начального
периода 5 секунд, шаг округления последующего периода 1 секунда.
Бесплатное время 5 секунд. Размер единицы тарификации равен 60
секундам.
Длительность звонка составляет 42 секунды при стоимости 0.1 условных
единиц за единицу тарификации в данное время суток по данному
направлению.
Стоимость звонка будет вычислена по следующему алгоритму
1. Вычитание бесплатного порога в 5 секунд. Для тарификации остается
42 -5 = 37 секунд.
2. Определение шага округления. В данном случае 37 секунд попадают в
начальный шаг, поэтому округление ведется до полных 5 секунд.
Следовательно, после округления стоимость будет вычисляться для 40
секунд.
3. Вычисление стоимости звонка по формуле 0.1 * 40/60 = 0,0667
условных единиц.
Пример 2
Длительность начального периода 60 секунд, шаг округления начального
периода 60 секунд, шаг округления последующего периода 1 секунда.
Бесплатное время 0 секунд. Размер единицы тарификации равен 60
секундам.
Длительность звонка составляет 42 секунды при стоимости 0.1 условных
единиц за единицу тарификации в данное время суток по данному
направлению.
Стоимость звонка будет вычислена по следующему алгоритму
1. Вычитание бесплатного порога в 0 секунд. Для тарификации остается
42 -0 = 42 секунд.
2. Определение шага округления. В данном случае 42 секунд попадают в
начальный шаг, поэтому округление ведется до полных 60 секунд.
Следовательно, после округления стоимость будет вычисляться для 60
секунд.
3. Вычисление стоимости звонка по формуле 0.1 * 60/60 = 0,1 условных
единиц.
Настройка TFTP-сервера и голосового шлюза Cisco
Настройка TFTP-сервера и голосового шлюза Cisco при использовании системы
голосового меню (IVR).
Настройка сервера tftp
Загрузить сервер tftp можно по адресу
ftp://ftp.kernel.org/pub/software/network/tftp/tftp-hpa-0.34.tar.bz2.
Далее необходимо его установить командами:
tar xvfj tftp-hpa-0.34.tar.bz2
cd tftp-hpa-0.34
./configure
gmake
gmake install
Создайте директорию, где будут находиться файлы, доступные по tftp.
mkdir /netup/tftp
Произведите запуск сервера tftp командой
/usr/sbin/in.tftpd -l -s /netup/tftp
Для автоматического запуска сервера tftp при загрузке операционной
системы нужно добавить данную команду в файл /etc/rc.local.
Настройка шлюза VOIP при дебитной (карточной) системе оплаты
Необходимо указать, расположение TCL-скрипта для обработки системы
голосовых сообщений (IVR), расположение голосовых файлов и длину
номера и пин-кода карты. Пакет с TCL-скриптом и голосовыми файлами
можно загрузить с сайта [60]www.cisco.com (файл TCLware.1.2.3.zip).
Введённые пользователем при авторизации первые четыре цифры (uid-len)
будут использоваться, как логин, а последующие шесть цифр (pin-len) -
как пароль.
Если скрипт загрузился успешно, то по команде
sh call application voice debit
можно увидеть содержание файла скрипта.
В настройках dial-peer нужно указать использование этого скрипта:
!
dial-peer voice 2 voip
application debit
!
Необходимо задать параметры aaa:
!
aaa authentication login h323 group radius
aaa authorization exec h323 group radius
aaa accounting connection h323 stop-only group radius
!
!
gw-accounting aaa
!
В результате таких настроек шлюз VoIP будет запрашивать у позвонившего
на голосовой пул клиента номер (номер и пин-код) карты, затем
проводить авторизацию по протоколу RADIUS. При успешной авторизации
сервер RADIUS в VSA-атрибутах (h323-credit-amount/h323-currency)
отсылает текущий баланс пользователя и код валюты. Затем шлюз
запрашивает направление звонка и после ввода заново проводит
авторизацию через сервер RADIUS. При этом сервер отсылает количество
секунд (атрибут h323-credit-time), доступных для разговора по данному
направлению. Если всё прошло успешно, то производится попытка
установить соединение согласно настройкам.
По окончании разговора шлюз отсылает серверу RADIUS пакет Accounting
STOP с указанием времени разговора. При этом биллинговая система
производит списание средств со счета согласно действующим на звонки
тарифам.
1498 Прочтений • [Настройка IP-телефонии на базе Linux/FreeBSD и маршрутизаторов Cisco (voip cisco linux freebsd)] [08.05.2012] [Комментариев: 0]