Настройка Asterisk

по сравнению с
Текущая osv
на ноя 11, 2013 04:30.

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (51)

просмотр истории страницы
h3. Установка
h3. Статья относится к версиям начиная с 397_378

Установка Asterisk PBX

h2. Установка


h3. {color:#333333}При установке использовались следующие реквизиты:{color}

{color:#0000ff}IP Carbon Billing:10.1.1.1{color}
{color:#0000ff}IP Asterisk:10.1.1.2{color}
{color:#0000ff}Secret:servicem{color}
{color:#0000ff}Порты Radius сервера:2812 и 2813{color}

{color:#ff0000}Внимание\! Серверы должны находиться в одной подсети и иметь статичные уникальные адреса{color}{color:#0000ff}.{color}

Предполагается что Asterisk установлен на CentOS 6.4. Скачать дистрибутив CentOS 6.4 вы всегда можете с [одного из зеркал на официальном сайте|http://www.centos.org/modules/tinycontent/index.php?id=30] или [с нашего зеркала|http://download5.carbonsoft.ru/carbon_reductor/centos/CentOS-6.4-x86_64-minimal.iso].

h3. Настройка CentOS 6.4


h5. {color:#333333}После установки CentOS 6.4 необходимо настроить сеть.{color}

*Установка вручную, в CentOS 6.4 minimal версии*

Для того чтобы настроить доступ к сети, необходимо поправить конфигурационный файл:
{code}/etc/sysconfig/network-scripts/ifcfg-eth0{code}

или другой, в зависимости от того, через какую сетевую карту вы планируете ходить в интернет.

Сделать это можно с помощью текстового редактора vi:
{code}vi /etc/sysconfig/network-scripts/ifcfg-eth0{code}

Для редактирования используем клавишу *i* \- после нажатия в открытом файле появится возможность редактирования.

В файле необходимо изменить и добавить следующие поля:
{code}
# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.17.0.tar.gz
# tar xzf asterisk-1.8.17.0.tar.gz
# cd asterisk-1.8.17.0
# contrib/scripts/install_prereq install
# ./configure
# make
# make install
DEVICE=eth0
IPADDR=здесь.ваш.ip.адрес
NETMASK=здесь.ваша.сетевая.маска
GATEWAY=здесь.укажите.ip.шлюза
DEFROUTE=yes
DNS1=здесь.укажите.ip.dns-сервера
DNS2=здесь.укажите.ip.dns-сервера2
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
BOOTPROTO=static
{code}

Например:
{code}
DEVICE=eth0
IPADDR=192.168.0.105
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
DEFROUTE=yes
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
BOOTPROTO=static
{code}

После редактирования нажимаем последовательно: *Esc*, *символ двоеточия* (на английской раскладке. При этом символ ":" появится в левом нижнем углу.

*wq\! *\- команда сохраняет изменения и выходит.

После этого, выполните
{code}/etc/init.d/network restart{code}

и проверьте наличие доступа к сети:
{code}ping -c 4 8.8.8.8{code}

Если всё в порядке - значит теперь сеть настроена.

h6. Далее потребуется установка дополнительных компонентов:

*установка wget*
{code}
yum install wget
{code}

*установка make*
{code}
yum install make
{code}

*установка gcc*
{code}
yum install gcc
{code}

*установка perl ExtUtils*
{code}
yum install perl-ExtUtils-Embed
{code}

*установка perl CPAN*
{code}
yum install perl-CPAN
{code}

*установка Radius*
{code}
yum install perl-Authen-Radius
{code}

h3. Установка Radius

Для отправки CDR записей на биллиг используется Radius. Устанавливаем до сборки Asterisk чтобы он собрался с поддержкой этого модуля. Скачать дистрибутив можно тут [http://prdownload.berlios.de/radiusclient-ng/radiusclient-ng-0.5.6.tar.gz] или командами ниже.
{code}
wget http://optimate.dl.sourceforge.net/project/radiusclient-ng.berlios/radiusclient-ng-0.5.6.tar.gz
tar zxvf radiusclient-ng-0.5.6.tar.gz
cd radiusclient-ng-0.5.6
./configure
make
make install
{code}


h3. {color:#000000}Уст{color}ановка Asterisk PBX
{code}
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.17.0.tar.gz
tar xzvf asterisk-1.8.17.0.tar.gz
cd asterisk-1.8.17.0
cp contrib/dictionary.digium /usr/local/etc/radiusclient-ng/
contrib/scripts/install_prereq install
./configure
make
make install
{code}
Если Вы новичок установите сразу дефалтные конфиг дефолтные конфигурационные файлы.
{code}# make samples{code}
{code}make samples{code}
Установка Perl AGI интерфейса к AGI.
{code}# wget http://asterisk.gnuinter.net/files/asterisk-perl-1.03.tar.gz
{code}wget http://asterisk.gnuinter.net/files/asterisk-perl-1.03.tar.gz
# tar zxvf asterisk-perl-1.03.tar.gz
# cd asterisk-perl-1.03
# perl Makefile.PL
# make
# make test
# make install{code}
Устанавливаем perl из пакетов и настраиваем. При устовке отдельного пакета он может попросить для тестирования ввести ip и порт Radius сервера биллинга 10.1.1.1:2812 и логин абонента в биллинге с паролем.

*ВНИМАНИЕ\!* В зависимости от дистрибутива и окружения, некоторые пакеты могут не устанавливаться из-за зависимостей. Проверяйте вывод каждой команды на предмет ошибок.


{code}# perl -MCPAN -e shell
(при первом запуске отвечаем дефолтно на все вопросы)
cpan>install Config::IniFiles
cpan>install Crypt::CBC
cpan>install Crypt::DES
cpan>install Authen::Radius
cpan>install Asterisk::AGI
cpan>q
{code}
Для отправки CDR записей на биллиг используется Radius
{code}
# wget http://prdownload.berlios.de/radiusclient-ng/radiusclient-ng-0.5.6.tar.gz
# tar zxvf radiusclient-ng-0.5.6.tar.gz
# cd radiusclient-ng-0.5.6
# ./configure
# ./make
# ./make install
{code}
По умолчанию Asterisk не поддерживает авторизацию через Radius, для этого необходимо использовать специальный AGI скрипт основанный на разработке PortaOne, который находится в биллинге
{code:title=На сервере биллинга}
ls -l /usr/local/ics/bin/agi-rad-auth.agi
scp /usr/local/ics/bin/agi-rad-auth.agi <адрес сервера астериск>:/var/lib/asterisk/agi-bin/
{code}
# ls -l /usr/local/ics/bin/agi-rad-auth.agi
# scp /usr/local/ics/bin/agi-rad-auth.agi <адрес сервера астериск>:/var/lib/asterisk/agi-bin/
После этого надо дать права на запуск этого файла Asterisk
{code:title=На сервере Asterisk}
chown asterisk:asterisk /var/lib/asterisk/agi-bin/agi-rad-auth.agi
chmod o+x /var/lib/asterisk/agi-bin/agi-rad-auth.agi
{code}
Это скрипт вызывается перед набором номера и если биллинг разрешает звонок то Asterisk двигается дальше по цепочке.

h32. *Настройка*


h3.

В файл /etc/asterisk/modules.conf необходимо включить модуль
{code}load => res_agi.so{code}

Примеры настройки:

{code:title=/etc/asterisk/sip.conf}
[general]
nat=no
canreinvite=no
context=office context=sip_auth
;context=sip_auth
externalauth=yes
callerid=920620
nat=no
canreinvite=no
context=office context=sip_auth
;context=sip_auth
externalauth=yes
callerid=920621
pickupgroup=1
{code}
{color:#ff0000}Внимание\! Поле callerid это тот логин который проверяет биллинг, и который надо указывать при подключении услуги.{color}
{code:title=/etc/asterisk/extensions.conf}
[general]
Acct_Update_Timeout=60
NAS_IP_Address=10.1.1.2

;Маршруты для входящих звонков
[office]
exten => _X.,1,AGI(agi-rad-auth.agi,Routing=EXT)
exten => _X.,n,Dial(SIP/${EXTEN},60,tT)
exten => _X.,n,Hangup
exten => h,1,Hangup
;Маршруты для исходящих звонков
[sip_auth]
exten => _X.,1,Set(SIP_Authorization=${SIP_HEADER(Authorization)})
exten => _X.,n,AGI(agi-rad-auth.agi,Routing=SIP&AuthorizeBy=SIP)
exten => _X.,n,Dial(SIP/VOIP/${EXTEN},60,tT)
exten => _X.,n,Hangup
exten => h,1,Hangup

{code}
Красным отмечено то что необходимо изменить.
Добавляем Radius сервер в разрешенные и указываем secret тот же что и указали в биллинге
{code:title=/usr/local/etc/radiusclient-ng/servers}
10.1.1.1 servicem
{code}
Меняем адреса Radius сервера
{code:title=/usr/local/etc/radiusclient-ng/radiusclient.conf}
# General settings

# specify which authentication comes first respectively which
# authentication is used. possible values are: "radius" and "local".
# if you specify "radius,local" then the RADIUS server is asked
# first then the local one. if only one keyword is specified only
# this server is asked.
auth_order radius,local

# maximum login tries a user has
login_tries 4

# timeout for all login tries
# if this time is exceeded the user is kicked out
login_timeout 60

# name of the nologin file which when it exists disables logins.
# it may be extended by the ttyname which will result in
# a terminal specific lock (e.g. /etc/nologin.ttyS2 will disable
# logins on /dev/ttyS2)
nologin /etc/nologin

# name of the issue file. it's only display when no username is passed
# on the radlogin command line
issue /usr/local/etc/radiusclient-ng/issue

# RADIUS settings

# RADIUS server to use for authentication requests. this config
# item can appear more then one time. if multiple servers are
# defined they are tried in a round robin fashion if one
# server is not answering.
# optionally you can specify a the port number on which is remote
# RADIUS listens separated by a colon from the hostname. if
# no port is specified /etc/services is consulted of the radius
# service. if this fails also a compiled in default is used.
authserver 10.1.1.1:2812

# RADIUS server to use for accouting requests. All that I
# said for authserver applies, too.
#
acctserver 10.1.1.1:2813

# file holding shared secrets used for the communication
# between the RADIUS client and server
servers /usr/local/etc/radiusclient-ng/servers

# dictionary of allowed attributes and values
# just like in the normal RADIUS distributions
dictionary /usr/local/etc/radiusclient-ng/dictionary

# program to call for a RADIUS authenticated login
login_radius /usr/local/sbin/login.radius

# file which holds sequence number for communication with the
# RADIUS server
seqfile /var/run/radius.seq

# file which specifies mapping between ttyname and NAS-Port attribute
mapfile /usr/local/etc/radiusclient-ng/port-id-map

# default authentication realm to append to all usernames if no
# realm was explicitly specified by the user
# the radiusd directly form Livingston doesnt use any realms, so leave
# it blank then
default_realm

# time to wait for a reply from the RADIUS server
radius_timeout 10

# resend request this many times before trying the next server
radius_retries 3

# local address from which radius packets have to be sent
bindaddr *

# LOCAL settings

# program to execute for local login
# it must support the -f flag for preauthenticated login
login_local /bin/login
{code}
Добавляем
{code:title=/etc/asterisk/cdr.conf}
[radius]
usegmtime=no ; Время по GMT
loguniqueid=yes
loguserfield=yes
radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf
{code}
Добавляем загрузку специального словаря который можно взять из asterisk-1.8.17.0/contrib/
{code:title=/usr/local/etc/radiusclient-ng/dictionary}
$INCLUDE /usr/local/etc/radiusclient-ng/dictionary.digium
{code}