[SSW] Взаимодействие с базой MySQL при RADIUS-маршрутизации
База будет содержать 5000-50000 абонентов и наполняться сторонним приложением.
Решение:
В качестве базы номеров будем использовать базу MySQL. Также нам потребуется RADIUS-сервер (например, freeradius), который будет вызывать внешний скрипт для доступа к MySQL и проверки наличия номера. Также RADIUS будет присваивать некий тэг в зависимости от наличия номера. ECSS-10 будет анализировать тэг и маршрутизировать вызов в нужный транк.
Настройки:
Freeradius
- /etc/freeradius/3.0/clients.conf
В конец файла добавить секцию:
client <LISTEN_IP> {
secret = <SECRET>
shortname = <SHORT_NAME>
}
client 192.168.0.7 {
secret = secret123
shortname = ecss1
}
- /etc/freeradius/3.0/users
В конец файла добавить секцию:
p.city Auth-Type := Accept
Exec-Program-Wait = "/usr/local/sbin/check_number %{Calling-Station-Id}"
где p.city - имя домена
перезапустить freeradius
Создать скрипт для доступа к mysql и проверки наличия номера в таблице по пути /usr/local/sbin/check_number:
#! /bin/sh
request="select count(*) > 0 from numbers where number = \"${1}\""
count=`echo ${request} | mysql -ucalls_db -pcalls_db -D ecss_calls_db -sh 10.24.146.180`
echo "Eltex-AVpair += \"CallManagement:tag=tag_${count}\""
В БД calls_db создать таблицу numbers:
CREATE TABLE `numbers` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, number varchar(24) NOT NULL, primary key (`id`)) ENGINE=InnoDB;
%% Задание номеров:
insert into numbers(number) values("799");
Настроить RADIUS сервер в домене на софтсвиче
domain/p.city/aaa/radius/declare ryabkov_home 192.168.0.7 access eltex_secret
Начать использовать этот сервер при маршрутизации.
В ответ RADIUS сервер возвращает два тега: tag_1 - если номер найден в базе. tag_0 - если не найден. Далее этот тег можно использовать при маршрутизации.
Источник:
docs.eltex-co.ru