Организуем факс-сервер по IAX2

30 Июл
2012

image
Рано или поздно возникает задача организовать факс-сервер в компании. Столкнулся с подобной задачей около года назад.

Что мы имеем


  • Сервер с asterisk;
  • железо для факс-сервера: P4 1.7, mem 256M, hd 40GB. Установлена ОС Centos.


Приступаем

Так как есть сервер с asterisk, то разумно воспользоваться протоколом iax2, поэтому будем делать связку: iaxmodem + hylafax + avantfax

Для начала добавим несколько репозиториев:


-atomic.repo-

wget -q -O - http://www.atomicorp.com/installers/atomic | sh


на всякий случай добавляем сюда исключение для php 5.3 в секцию [atomic]
vim /etc/yum.repos.d/atomic.repo

exclude = php*5.3*


-RPMForge.repo-

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm


rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

rpm -K rpmforge-release-0.5.2-2.el5.rf.i386.rpm

rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm


Установим следующие пакеты:

yum -y install gcc gcc-c++ libtiff libtiff-devel hylafax mysql-server httpd mysql-devel php-cli phpmyadmin php


Cкачиваем avantfax и iaxmodem:
wget http://it-technics.narod.ru/fax/avantfax-3.3.3.tgz

wget http://it-technics.narod.ru/fax/iaxmodem-1.2.0.tar.gz


Установка iaxmodem


Распаковываем архив iaxmodem-1.2.tar.gz, переходим в директорию и выполняем команды для компоновки и компиляции:
tar xzvf iaxmodem-1.2.0.tar.gz

cd iaxmodem-1.2.0/

./configure

make


Копируем, полученный в результате компиляции файл iaxmodem:
cp iaxmodem /usr/bin/ 


Создаем папку iaxmodem:
mkdir /etc/iaxmodem


Создаем файл ttyIAX0:
touch /etc/iaxmodem/ttyIAX0


Редактируем конфигурационный файл ttyIAX0:
vim /etc/iaxmodem/ttyIAX0


Добавляем туда следующее содержимое:

device /dev/ttyIAX0

owner uucp:uucp

mode 660

port 4570

refresh 50

server 192.168.0.20
<< — наш сервер с asterisk
peername 5020

secret 5020

codec alaw


Следующим шагом будет создание iaxpeer на сервере asterisk.
Подключаемся на сервер asterisk, редактируем конфигурационный файл iax.conf:
vim /etc/asterisk/iax.conf

и добавляем нашего пира, у меня получился следующий конфиг:

[general]

bindport = 4569

bindaddr =0.0.0.0

calltokenoptional = 192.168.0.28/255.255.255.255

maxcallnumbers = 16382

maxregexpire=10000


[5020]

port=4570

type=friend

username=5020

context=fax2out

secret=5020

host=dynamic

qualify=yes

disallow=all

allow=alaw

trunk=no

requirecalltoken=no


Необходимо применить конфигурацию iax2, подключаемся к cli asterisk:
asterisk -r

*CLI> iax2 reload

  == Parsing '/etc/asterisk/iax.conf':   == Found

  == Parsing '/etc/asterisk/users.conf':   == Found

выходим из cli и подключаемся обратно на наш факс-сервер.

Редактируем файл inittab для загрузки нашего модема:
vim /etc/inittab

вносим следующее в конец файла:
iax1:2345:respawn:/usr/bin/iaxmodem ttyIAX0 > /dev/null

vmo1:2345:respawn:/usr/sbin/faxgetty ttyIAX0


так же создадим папку для логов iaxmodem:
mkdir /var/log/iaxmodem

touch /var/log/iaxmodem/iaxmodem


Hylafax


Проверим устновился ли hylafax:
yum list | grep hylafax


Добавим hylafax в загрузку при старте системы:
chkconfig hylafax on


Сконфигурируем и запуcтим hylafax:
faxsetup

Отвечаем на все вопросы, но когда спросит добавить ли модем говорим, что нет.

Запускаем наш модем:
/usr/bin/iaxmodem /dev/ttyIAX0 &

/usr/sbin/faxgetty /dev/ttyIAX0 &


После запуска можно посмотреть регистрацию пира на asterisk, есл ивсе нормально сконфигурированно регистрация будет.

Добавляем наш модем:
faxaddmodem

при этом нас попросят указать устройство, указываем ttyIAX0, отвечаем на все вопросы и модем будет успешно добавлен.

MySQL

При установке Avantfax, будет создана бд avantfax в mysql со следующими таблицами:
+———————+
| Tables_in_avantfax |
+———————+
| AddressBook |
| AddressBookEmail |
| AddressBookFAX |
| BarcodeRoute |
| CoverPages |
| DIDRoute |
| DistroList |
| DynConf |
| FaxArchive |
| FaxCategory |
| Modems |
| SysLog |
| UserAccount |
| UserPasswords |
+———————+

То есть пользователи, модемы, пароли etc. будут хранится в бд. Нам mysql может понадобиться для сохранения конфигурации(к примеру для переноса на другой сервер), если встроенной утилиты avantfax будет недостаточно, либо для бэкапа. Для бэкапа из командной строки, необходимо будет выполнить команду:
mysqldump -uroot -ppass --databases avantfax > avant_backup.sql

Так же для переноса или бэкапа необходимо скопировать папку /var/spool/hylafax.

Запускаем службу mysqld:
/etc/init.d/mysqld start

выполняем команду mysql_secure_installation для первоначального конфигурирования и установки безопасности (устанавливаем пароль для root, запрещаем root подключаться удаленно etc):
mysql_secure_installation


и добавляем mysql в загрузку при старте системы:
chkconfig mysqld on


Если вы привыкли больше рабоать в графическом интерфейсе с бд, то целесообразно воспользоваться phpmyadmin, для этого отредактируйте файл config.inc.php:
vim /usr/share/phpmyadmin/config.inc.php

меняем параметр аутентификации:
$cfg['Servers'][$i]['auth_type'] = 'cookie';

на
$cfg['Servers'][$i]['auth_type'] = 'http';


Редактируем конфигурационный файл phpmyadmin для apache:
vim /etc/httpd/conf.d/phpmyadmin.conf

и вносим в allow ip адрес с которого будем подключаться:

<Directory "/usr/share/phpmyadmin">

  Order Deny,Allow

  Deny from all

  Allow from 127.0.0.1 192.168.0.88

</Directory>


Alias /phpmyadmin /usr/share/phpmyadmin

Alias /phpMyAdmin /usr/share/phpmyadmin

Alias /mysqladmin /usr/share/phpmyadmin


сохраняем и выходим из конфига.
запускаем apache:
/etc/init.d/httpd start

добавляем apache в загрузку при старте системы
chkconfig httpd on

открываем браузер и набираем
http://ip_address/phpmyadmin/

вводим логин и пароль root.

Avantfax

Расспаковываем архив avantfax-3.3.3.tgz:
tar xzvf avantfax-3.3.3.tgz

cd avantfax-3.3.3

Так как у нас ос Centos будем использовать скрипт rh-install.sh.

Необходимо внести данные относительно бд в файл rh-prefs.txt:
vim rh-prefs.txt

ROOTMYSQLPWD=pass <<--- указываем пароль к бд

сохраняем и выходим.

Запускаем исполняемый файл rh-install.sh:
./rh-install.sh

Скрипт проверит наличие необходимых пакетов(поставит библиотеки и пакеты если их нет) и установит Avantfax.
После успешной установки нам скажут Installation complete и сообщат как можно подключиться:
Log into the Administrative interface at:  http://ip_address/admin/

Username: admin

Password: password

Пароль при входе в web-интерфейс необходимо будет сменить!

Для того, чтобы определенная группа (отдел) могла видеть только те факсы, которые были отправлены ими и те, которые адресованны им, необходимо выполнить некоторые действия.
Необходимо создать категорию факсов.
Переходим в Меню -> Категории факсов создаем новую категорию, к примеру Бухгалтерия.
image
Далее заходим в Меню -> Параметры модемов и присваем ранее созданную категорию для модема, так же указываем псевдоним модема.
image
Создаем нового пользователя, к примеру Buhgalter.
Переходим в Меню -> Новый пользователь.
image
Указываем какой модем будет доступен пользователю, какую категорию факсов можно будет просматривать, так же можно будет задать язык интерфеса и контактную информацию.
Созданный нами пользователь сможет зайти по адресу
http://ip_address

Каждый пользователь сможет отправлять факсы, прикрепляя файлы следующих форматов:
PostScript (.ps), PDF (.pdf), TIFF (.tif), Text (.txt).

Итак связка настроена, для того чтобы заработали входящие факсы необходимо в диалплане(/etc/asterisk/extensions.conf) asterisk прописать правила для звонка на наш факс-сервер
если это внутренняя нумерация (допустим), то достаточно в контексте внутренних номеров прописать следующее:
exten => 5020,1,Dial(IAX2/5020,120,r)

exten => 5020,2,Hangup


Если это голосовое меню (IVR), то на определенный тональный сигнал, к примеру 0, повесить следующее:
exten => 0,1,Dial(IAX2/5020,120,r)

exten => 0,2,Hangup


Чтобы разрешить отправлять факсы с web-интерфейса, необходимо указать в конфигурационном файле /etc/asterisk/iax.conf контекст который будет использоваться для исходящих вызовов, у меня в конфиге это контекст fax2out. На контекст fax2out так же следует создать правила для маршрутов в диалплане (/etc/asterisk/extensions.conf), и включить в контекст default:

[default]

include => fax2out

[fax2out]

exten => _9ZX.,1,Dial(SIP/${EXTEN:1}@sip_prov)
exten => _9ZX.,2,Hangup

На этом пожалуй все. Успехов Вам!
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх