Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovaya_Asterisk.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.12 Mб
Скачать

Оборудование для телефонии

Астериск поддерживает соединение с различными сетями, но для этого ему необходимо дополнительное аппаратное оборудование.

Для связи с PSTN могут использоваться аналоговые платы с портами FXO или цифровые интерфейсные платы, обеспечивающие соединение с такими цифровыми потоками как Е1 или Т1. Также имеются так называемые банки каналов, которые позволяют разделять цифровую линию на несколько аналоговых каналов.

К дополнительному оборудованию также можно отнести различные VoIP шлюзы, позволяющие подключать к Астериску обычные аналоговые телефоны, а также VoIP-GSM шлюзы, организующие связь сервера с мобильной сетью.

Такое дополнительное оборудование, практически на любой вкус, производится компанией Digium, под чьим руководством создается и развивается Астериск. Данное оборудование представляет собой оптимальный вариант по соотношению цена\качество, так как априори разрабатывалось для совместного использования с АТС Астериск.

В курсовом проекте не акцентируется внимание на виде или марке оконечных устройств, будь то аналоговые, цифровые телефоны или программно реализованные телефоны – софтфоны. Настройка сети для подключения любого из устройств не представляет собой больших трудностей, что, безусловно, является важным положительным моментом при выборе АТС Астериск.

Практическая часть. Реализация

В данной части работы рассматривается непосредственно построение телефонной сети небольшой фирмы. В частности идет речь о настройке конфигурационных файлов Астериска, о которых будет рассказано далее, так как именно этот пункт представляет собой основную «сложность». Сложность взята в кавычки потому, что для человека, не раз настраивавшего Астериск под разные нужды, не составит труда настроить еще один.

Итак, настройка Астериска, как телефонной станции, строится на изменении содержания определенных файлов, называемых конфигурационными файлами, которые отвечают за те или иные функции Астериска.

Конфигурационные файлы

Собственно, конфигурационные файлы – это файлы с разрешением «conf», которые располагаются в /etc/asterisk/. Эти файлы содержат в себе различные команды. Например, команда «tcpenable=yes» разрешает использовать стек протоколов TCP/IP для передачи информации Астериску. Каждый конфигурационный файл отвечает за определенную функциональную возможность Астериска.

Sip.conf

Файл «sip.conf» отвечает за конфигурацию протокола SIP. В этом файле содержатся команды разрешающие или запрещающие Астериску использовать определенный транспорт в сети, порт, кодеки и т.д. Так же в этом файле создается учетная запись пользователя, который будет подключен по SIP протоколу. Здесь задается его имя, пароль, тип, кодеки, которые он может использовать для разговора и много чего еще. Так как сейчас в основном все ip и программные телефоны используют SIP протокол, то этот файл используется в большинстве случаев и является основным для настройки.

Extensions.conf

Далее по списку и по значимости идет файл «extensions.conf». Именно этот файл является «Моисеем» для вызовов, так как он производит их маршрутизацию. Здесь описывается, как и куда перенаправить вызов, поступивший на Астериск. Этот файл содержит в себе не только правила маршрутизации вызовов, но и порядок их обработки. Например, здесь может быть описано проигрывание звукового меню, которое приветствует Вас и предлагает набрать различные добавочные номера, чтобы вы попали сразу туда, куда желаете.

В том файле описывается так называемый Dialplan. По-русски это просто план обработки поступающих на Астериск вызовов. Весь файл подразделяется на контексты. Это отдельные независимые части диалплана, которые позволяют разделять вызовы по группам. Каждому пользователю в фале «sip.conf» присваивается контекст в диалплане, по которому будут перенаправляться вызовы к нему и от него. Тем самым можно огранивать пользователей от вызовов разных групп. Например, можно ограничить группу лиц, которым доступна линия междугородней связи, или сделать так, что директору предприятия можно позвонить только через секретаря.

Эти два файла являются основными, и их порой бывает достаточно.

Iax.conf

Следующий файл, который понадобиться для реализации задуманного, это «iax.conf».

Этот файл содержит команды, согласно которым один сервер с Астериском связывается с другим сервером с Астериском по протоколу IAX2. Собственно, IAX2 это протокол, который был специально разработан для соединения Астерисков. Этот файл прост в настройке и содержит в себе следующие данные: кодеки, которые разрешается использовать для разговора через данный протокол, адрес второго сервера с астериском, авторизационные данные, с помощью которых на данном сервере можно авторизоваться. Далее, конфигурация этого файла будет представлена, и станет более понятно что и как.

В реализации рассматриваемой сети, предполагается такая функциональная возможность, как выход во внешнюю сеть, а в частности сеть GSM. То есть стоит задача в реализации VoIP-GSM шлюза. Было решено, что для этой цели будут служить обычные 3G модемы мобильных операторов, которые предлагаются ими для подключения к сети интернет. Но эти модемы несут в себе куда больший функционал. У них есть возможность передачи sms, а так же голоса по каналам GSM, что в нашем случае очень важно. Эти функции (передача голоса и смс) часто бывают заблокированы сотовым оператором, чтобы человек использовал модем только для интернета, как это изначально и предполагается. Также, все сотовые операторы блокируют использование сим-карт других операторов. Эти проблемы решаемы, но здесь решения описаны не будут, так как эта уже другая тема и применяемый в данной работе модем уже разблокирован.

Datacard.conf

Чтобы подключить модем к астериску необходимо использовать один из каналов, по которому будут передаваться данные между Астериском и модемом. Без этого канала Астериск даже не увидит модем. Из всех предлагаемых каналов был выбран канал под названием «datacard». Причина выбора такова: просто был первым из всех найден в сети, а также без проблем скачан и установлен как дополнительный пакет к Астериску.

После установки канала «Datacard» у Вас в распоряжении появляется конфигурационный файл «datacard.conf». Данный файл описывает отношения между Астериском и модемом. В частности, в этом файле задан серийный порт в который включен модем (чтобы астериск знал, где его искать), уровни громкости, и самое главное контекст в диалплане для маршрутизации вызовов. В качестве серийного порта выступает порт USB.

Настройка Астериска под конкретную ситуацию.

Теперь рассмотрим конкретно заданную ситуацию. Например, имеется два офиса, находящихся в разных зданиях. Здания могут находиться как рядом друг с другом, так и в двух противоположных точках земного шара. Этот пункт повлияет только на то, будет ли нужен выход в интернет для связи между астерисками, или достаточно будет объединить две сети этих зданий, например, маршрутизатором, если бы они находились рядом.

Предположим, что два офиса находятся рядом. В каждом офисе стоит свой сервер с Астериском, дабы разделить нагрузку двух этих офисов. В каждом офисе имеется некое количество работников, которые желают общаться между собой по телефону. Все они разбиты по группам в разные кабинету. Например, в первом здании есть кабинет бухгалтеров, кабинет менеджеров, кабинет директора с секретарем, пункт охраны и вахта. Во втором здании имеется кабинет технической поддержки, и кабинет системных администраторов.

Теперь необходимо посчитать количество телефонов, чтобы создать нужное число пользователей Астериска. Все эти пользователи прописываются в файле «sip.conf».

[basic-options](!) - шаблон базовых опций;

dtmfmode=rfc2833 - задаем способ передачи DTMF сигналов;

context=incoming-sip - задаем контекст диалплана для маршрутизации;

type=friend - задаем тип пользователя;

host=dynamic - задаем тип хоста;

[my-codecs](!) - шаблон используемых кодков;

disallow=all -запрещаем все

allow=gsm разрешаем кодек;

allow=g729

allow=g723

allow=ulaw

[1101](my-codecs,basic-options) – описываем пользователей

secret=buhgalter1

[1102](my-codecs,basic-options)

scret=buhgalter2

[1103](my-codecs,basic-options)

secret=buhgalter3

[1201](my-codecs,basic-options)

secret=manager1

[1202](my-codecs,basic-options)

secret=manager2

[1203](my-codecs,basic-options)

secret=manager3

[1301](my-codecs,basic-options)

secret=ohrana

[1001](my-codecs,basic-options)

secret=vahta

[1401](my-codecs,basic-options)

secret=zam.directora

[1402](my-codecs,basic-options)

secret=director

В контексте «general» прописываются все необходимые настройки для возможности связи с Астериском через SIP протокол. В основном, эти настройки уже заданы изначально при установке астериска и в изменении не нуждаются. Во всяком случае, если Вам придется что-нибудь там изменить, то там имеются комментарии к командам, которые дадут Вам понять, что они означают. Здесь они описываться не будут.

Как видно из кода, синтаксис позволяет использование шаблонов. То есть мы можем написать какой-то набор команд, назвать их каким-то образом (например, [my-codecs]), а затем, поставив рядом восклицательный знак в круглых скобках, вот так (!), мы превращаем данный набор команд в шаблон, который потом легко использовать. Чтобы каждому пользователю не прописывать заново одни и те же команды, достаточно рядом с именем пользователя в круглых скобках указать через запятую имена шаблонов. Теперь в описании пользователя имеется только команда задания пароля – secret.

Для примера, было решено в первом здании создать записи для 10 пользователей телефонии. За каждым пользователем скрывается телефонный аппарат. Людей, естественно, может быть больше чем этих телефонов. Количество пользователей можно наращивать сколь угодно много, просто создавая еще один набор команд. В качестве имен в данном примере использованы номера, по которым будут дозваниваться до пользователей другие абоненты сети. Это сделано для удобства перенаправления в диалплане. Можно задавать различные имена, никак не связанные с номером телефона.

Итак, пользователи имеются, осталось настроить диалплан. Он настраивается путем добавления нужных команд в файл «extensions.conf».

[incoming-datacard]

exten => s,1,Answer()

exten => s,n,Background(/home/company2)

exten => s,n,WaitExten()

exten => _11XX,1,Dial(SIP/1101&SIP/1102&SIP/1103)

exten => _11XX,n,Hangup()

exten => _12XX,1,Dial(SIP/1201&SIP/1202&SIP/1203)

exten => _12XX,n,Hangup()

exten => _13XX,1,Dial(SIP/1301&SIP/1302)

exten => _13XX,n,Hangup()

exten => _14XX,1,Dial(SIP/1401)

exten => _14XX,n,Hangup()

exten => i,1,Hangup()

exten => t,1,Hangup()

[incoming-sip]

exten => _8932XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)

exten => _8922XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)

exten => _8912XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)

exten => _8982XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)

exten => _8965XXXXXXX,1,Dial(Datacard/beeline/${EXTEN},60)

; локальные номера:

exten => _1XXX,1,Dial(SIP/${EXTEN},20)

exten => _1XXX,n,Hangup()

exten => _2XXX,1,Dial(IAX2/office1:pass4office1@office2/${EXTEN},20)

Теперь по порядку. Команда «еxten» это синтаксис добавочного номера (extension – числовой идентификатор, присвоенный линии, идущей к конкретному телефону). После нее идет знак => и далее номер или имя. Как видно выше, используется запись типа «_1ХХХ». Это означает что любые номера, начинающиеся на единицу и имеющие за собой, неважно какие, еще три цифры будут перенаправлены соответствующим пользователям.

Обратимся к локальным номерам. При поступлении на Астериск запроса номера, например, 1202, одного из менеджеров, как можно увидеть из конфигурации файла «sip.conf», Астериск выполняет команду запуска приложения Dial. Данное приложение устанавливает канал связи между звонящим пользователем и его адресатом. В приложении имеются протокол, по которому пойдем передача (в частности по этому протоколу Астериск узнает в каком файле искать пользователя), переменная ${EXTEN} (в эту переменную заносится запрашиваемый номер) и длительность ожидания ответа от адресата. Все это описывается строчкой:

exten => _1XXX,1,Dial(SIP/${EXTEN},20)

Далее идет команда разрыва канала, если разговор не состоялся, или состоялся и прекращен любым из разговаривавших абонентов. Это описывается строчкой:

exten => _1XXX,n,Hangup()

Приложение Hangup() отвечает за разрыв канала связи.

Теперь можно объяснить, почему для удобства пользователи названы соответствующими им номерами телефонов. Чтобы перенаправить вызов необходимо указать в приложении Диал протокол и имя пользователя. Если бы у нас номера телефонов и имена пользователей были различны, то пришлось бы прописывать большее количество информации. Работая только с номерами и переменной, мы умещаем часть диалплана всего в одну строчку кода.

В контексте «incoming-sip» у нас имеются еще пару непонятных строк.

exten => _8932XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)

exten => _8922XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)

exten => _8912XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)

exten => _8982XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)

exten => _8965XXXXXXX,1,Dial(Datacard/beeline/${EXTEN},60)

Эти команды позволяют пользователям внутренней телефонии звонить на мобильные телефоны различных операторов по протоколу Датакард. Синтаксис такой же, как и в предыдущем случае, только вместо пользователя указывается модем, содержащий сим-карту нужного оператора, чтобы вызов проходил в домашней сети оператора. Предполагается, что на сим-картах стоят тарифы, которые поддерживают бесплатные звонки в домашней сети оператора, и поэтому идет такое жесткое разграничение.

exten => _2XXX,1,Dial(IAX2/office1:pass4office1@office2/${EXTEN},20)

Здесь звонок идет по протоколу IAX2 на другой астериск. Как видно, тут достаточно просто задать такое условие: если первая цифра в добавочном номере двойка, то перенаправлять звонок на другой Астериск. В этом случае второй Астериск принимает звонок и смотрит в файл «iax.conf», какой указан контекст диалплана, согласно которому необходимо обслужить поступивший вызов.

На этом маршрутизация локальных вызовов заканчивается. Хотя здесь поле действий обширно. Можно сделать так, чтобы директору могли звонить только определенные пользователи и так далее. Как это сделать будет рассказано далее.

В заданном диалплане имеется еще один контекст, согласно которому обслуживаются вызовы, поступающие с мобильных телефонов на 3G модем. Это внешние входящие вызовы. Здесь все немного сложнее.

Люди, звонящие в компанию, не знают внутренней нумерации, и в этом им необходимо помочь, то есть перенаправить вызов кому следует. Заставлять заниматься этим отдельного человека, или отнимать рабочее время у уже занятого сотрудника не рентабельно. С этим может легко справиться заранее записанное голосовое меню.

exten => s,1,Answer()

exten => s,n,Background(/home/company2)

exten => s,n,WaitExten()

Эта часть кода отвечает за эту функцию. Сначала необходимо ответить на поступивший вызов. За это отвечает команда Answer(). Затем, следующим шагом, Астериск обрабатывает следующую команду – запускает приложение Background(/home/company2). Именно это приложение проигрывает записанное голосовое меню. Как видно из аргументов приложения (часть кода в скобках), оно проигрывает файл company2, который находится в папке /home/.

Следующая команда это выполнения приложения WaitExten(). Это приложение ожидает от пользователя ввода дополнительного номера. То есть после проигрывания голосового меню или во время проигрывания, адресант вводит дополнительный номер, сказанный ему в меню, чтобы попасть туда, куда он желает. Именно эти цифры ожидает приложение WaitExten().

После получения доп. Номера астериск приступает к следующим командам.

exten => _11XX,1,Dial(SIP/1101&SIP/1102&SIP/1103)

exten => _11XX,n,Hangup()

exten => _12XX,1,Dial(SIP/1201&SIP/1202&SIP/1203)

exten => _12XX,n,Hangup()

exten => _13XX,1,Dial(SIP/1301&SIP/1302)

exten => _13XX,n,Hangup()

exten => _14XX,1,Dial(SIP/1401)

exten => _14XX,n,Hangup()

Эти команды как раз отвечают за маршрутизацию звонков в кабинет, выбранный пользователем. Рассмотрим первые две строчки. При доп. номере 1102, Астериск запускает приложение Диал и устанавливает связь со всеми тремя пользователями, описанными в аргументах данного приложения. Адресант не знает к кому конкретно пройдет вызов (да ему это и не нужно знать), так как вызов идет одновременно на три телефона. Кто первым из пользователей возьмет трубку, с тем и установит канал Астериск, а два других телефона замолкнут.

Из последних двух строк видно, что директору напрямую позвонить нельзя. Директор занятой человек и его отвлекать по пустякам нежелательно. А если что-то важное, то секретарь обязательно ему об этом сообщит.

Можно было бы использовать другой синтаксис (использование условий Gotoif), но это усложнит код, да и в данной ситуации будет лишним.

Теперь пришло время детальнее рассмотреть настройку конфигурационных файлов «datacard.conf» и «iax.conf».

Первым рассмотрим детальнее файл «iax.conf». В этот файл астериск заглядывает когда ему поступает запрос от другого Астериска на регистрацию, и в том случае, когда поступает звонок с уже зарегистрировавшегося астериска.

[general]

disallow=all

allow=gsm

allow=g729

allow=ulaw

allow=alaw

bindaddr=0.0.0.0

autokill=yes

calltokenoptional=0.0.0.0/0.0.0.0

requirecalltoken=no

register => office1:pass4office1@192.168.1.136

[guest]

tupe=user

host=dynamic

[office2]

type=friend

host=dynamic

context=incoming-sip

auth=md5

username=office2

secret=pass4office2

Здесь так же, как и в SIP, задаются нужные кодеки и другие полезные команды. Главными строками в этом файле является строка - «register => office1:pass4office1@192.168.1.136», которая говорит, что регистрация этого Астериска происходит на другом Астериске по адресу 192.168.1.136, а авторизационные данные необходимо использовать такие: имя пользователя – office1, пароль – pass4office1. На втором астериске хранятся имя пользователя и пароль, чтобы он мог их сравнить с предоставленными и решить, разрешать регистрацию или нет.

[office2]

type=friend

host=dynamic

context=incoming-sip

auth=md5

username=office2

secret=pass4office2

Именно этот кусок кода иллюстрирует какие данные хранятся в одном Астериске о другом. Этот код лежит в конфигурационном файле первого Астериска. Когда ему поступает запрос на авторизацию от второго Астериска, он сравнивает авторизационные данные, с теми, которые имеются у него файле. Если имя пользователя и пароль совпадают, то он разрешает регистрацию.

В принципе, описание мало чем отличается от описания пользователя в файле «sip.conf».

Вторым на очереди из еще нетронутых конфигурационных файлов – «datacard.conf».

[general]

interval=15 ; Number of seconds between trying to connect to devices

[defaults](!)

context=incoming-datacard ; контекст для входящих вызовов

rxgain=3 ; повысить громкость входящих

txgain=3 ; повысить громкость исходящих

autodeletesms=yes ; автоматическое удаление входящих смс

resetdatacard=yes ; перезагрузить датакард во время инициализации модема

u2diag=0 ; set U2DIAG parameter (0 = отключает все функции кроме модема)

[megafon](defaults)

audio=/dev/ttyUSB1 ; tty порт для аудио соединений

data=/dev/ttyUSB2 ; tty порт AT команд

group=1 ; группа звонящих

[beeline](defaults)

audio=/dev/ttyUSB4

data=/dev/ttyUSB5

group=2

[mts](defaults)

audio=/dev/ttyUSB7

data=/dev/ttyUSB8

group=3

[motiv](defaults)

audio=/dev/ttyUSB10

data=/dev/ttyUSB11

group=4

Как видим, для каждого модема выделяется отдельная запись в этом файле. Для каждого модема задано имя в соответствии со стоящей в нем сим-картой оператора. Так же указано по какому порту передавать данные модему для разных типов соединений. Эта функция подразумевает принятие смс во время занятости канала разговором. Так же звонящим присваивается определенная группа согласно номеру на который они звонят.

Все конфигурационные файлы настроены и Астериск готов к приему и обработке вызовов.

Для второго Астериска настройка производится аналогичным образом. Можно просто скопировать конфигурационные файлы, а затем просто заменить имена пользователей и их пароли, и соответственно в диалплане изменить номера. В файле «iax.conf» тоже нужно переписать авторизационные данные.

Конфигурационные файлы Астериска, обслуживающего второй офис:

sip.conf

[basic-options](!) - шаблон базовых опций;

dtmfmode=rfc2833 - задаем способ передачи DTMF сигналов;

context=incoming-sip - задаем контекст диалплана для маршрутизации;

type=friend - задаем тип пользователя;

host=dynamic - задаем тип хоста;

[my-codecs](!) - шаблон используемых кодков;

disallow=all -запрещаем все

allow=gsm разрешаем кодек;

allow=g729

allow=g723

allow=ulaw

[2101](my-codecs,basic-options) – описываем пользователей

secret= tech1

[2102](my-codecs,basic-options)

scret= tech2

[2103](my-codecs,basic-options)

secret= tech3

[2104](my-codecs,basic-options)

secret=tech4

[2201](my-codecs,basic-options)

secret=admin1

[2202](my-codecs,basic-options)

secret=admin2

[2301](my-codecs,basic-options)

secret=stolovka

[2302](my-codecs,basic-options)

secret=otdih

extensions.conf

[incoming-datacard]

exten => s,1,Answer()

exten => s,n,Background(/home/company3)

exten => s,n,WaitExten()

exten => _21XX,1,Dial(SIP/2101&SIP/2102&SIP/2103&SIP/2104)

exten => _21XX,n,Hangup()

exten => i,1,Hangup()

exten => t,1,Hangup()

[incoming-sip]

exten => _8932XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)

exten => _8922XXXXXXX,1,Dial(Datacard/megafon/${EXTEN},60)

exten => _8912XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)

exten => _8982XXXXXXX,1,Dial(Datacard/mts/${EXTEN},60)

exten => _8965XXXXXXX,1,Dial(Datacard/beeline/${EXTEN},60)

; локальные номера:

exten => _2XXX,1,Dial(SIP/${EXTEN},20)

exten => _2XXX,n,Hangup()

exten => _1XXX,1,Dial(IAX2/office2:pass4office2@office1/${EXTEN},20)

iax.conf

[general]

disallow=all

allow=gsm

allow=g729

allow=ulaw

allow=alaw

bindaddr=0.0.0.0

autokill=yes

calltokenoptional=0.0.0.0/0.0.0.0

requirecalltoken=no

register => office2:pass4office2@192.168.1.103

[guest]

tupe=user

host=dynamic

[office1]

type=friend

host=dynamic

context=incoming-sip

auth=md5

username=office1

secret=pass4office1

datacard.conf

[general]

interval=15 ; Number of seconds between trying to connect to devices

[defaults](!)

context=incoming-datacard ; контекст для входящих вызовов

rxgain=3 ; повысить громкость входящих

txgain=3 ; повысить громкость исходящих

autodeletesms=yes ; автоматическое удаление входящих смс

resetdatacard=yes ; перезагрузить датакард во время инициализации модема

u2diag=0 ; set U2DIAG parameter (0 = отключает все функции кроме модема)

[mts](defaults)

audio=/dev/ttyUSB1 ; tty порт для аудио соединений

data=/dev/ttyUSB2 ; tty порт AT команд

group=1 ; группа звонящих

[megafon](defaults)

audio=/dev/ttyUSB4

data=/dev/ttyUSB5

group=2

[motiv](defaults)

audio=/dev/ttyUSB7

data=/dev/ttyUSB8

group=3

[beeline](defaults)

audio=/dev/ttyUSB10

data=/dev/ttyUSB11

group=4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]