Asterisk Realtime LDAP драйвер
Этот драйвер позволяет конфигурировать сервер asterisk, использовать в плане набора и для хранения информации об акаунтах сервер LDAP.
Он также позволяет производить запросы к базе данных ldap с помощью app_realtime.
Для его работы необходимы библиотеки openldap сервера (http://www.openldap.org).
Lightweight Directory Access Protocol
LDAP - это открытый и стандартизированный протокол для доступа к X.500 сервису каталогов.
Этот протокол использует для транспорта данных Интернет протоколы, например TCP.
LDAP является облегченной альтернативой X.500 Directory Access Protocol (DAP) протоколу, для использования в сети Интернет.
Также включает в себя другие упрощения базового протокола, например,
представление большинства значений атрибутов и элементов задействованных в протоколе в виде текстовых строк,что упрощает реализацию клиентов для этого протокола.
Каталоги представляют собой базу данных оптимизированную для операций чтения из нее.
Настройка
Первое, что необходимо сделать, чтобы Вы могли пользоваться ldap сервером: нужно добавить определение атрибутов (схему) в Вашу базу данных ldap сервера (предполагается, что он до этого был настроен и работоспособен) и перезапустить его.
Можно воспользоваться уже готовой схемой, которую Вы найдете в директории "configs/asterisk.ldap-schema" дистрибутива asterisk. (просто включите эту схему в Вашем файле конфигурации /etc/openldap/slapd.conf).
Обратите внимание: имена ldap атрибутов имеют префикс "oxy", для исключения возможности конфликтов имен атрибутов из других схем, но Вам ничего не мешает изменить имена атрибутов по Вашему желанию! Только не забудьте также изменить имена атрибутов в файле конфигурации in res_ldap.conf
Следующим шагом будет подготовка файла конфигурации res_ldap.conf:
Первая обязательная секция имеет имя: [global], в ней определяются параметры доступа к Вашему ldap серверу.
Вот пример:
[general] dbhost=ldap.mydomain.com, ldap2.mydomain.com ; Тут указано два ldap сервера dbbasedn=dc=mydomain,dc=com ; Ваша baseDN dbuser=cn=master,ou=accounts,dc=mydomain,dc=com ; Ваш bind DN dbpass=my_secret ; Его пароль
Далее, Вам необходимо определить параметры для каждого из типа объектов, для которого будет использоваться ldap для получения параметров.
Ниже приводиться пример, для использования ldap вместо файлов конфигурации:
[config] attributes=filename=oxyPBXConfigFilename,category=oxyPBXConfigCategory,variable_name=oxyPBXConfigVariableName,variable_value=oxyPBXConfigVariableValue,cat_metric=oxyPBXConfigCategoryMetric,commented=oxyPBXConfigCommented additionalFilter=(objectClass=oxyPBXConfig)
Параметр "attributes" приводит в соответствие между переменными asterisk и именами ldap атрибутов.
В примере указано, что когда asterisk ищет переменную с именем 'filename', драйвер создаст фильтр поиска используя ldap атрибут 'oxyPBXConfigFilename', а перед тем, как вернуть результат обратно в asterisk, он переименует каждое полученное имя ldap атрибута в соответствующее имя переменной в asterisk.
Не указанные имена переменных или атрибутов передаются как есть, без преобразования.
Дополнительный фильтр поиска - additionalFilter, позволяет ограничить поиск (это ограничение будет будет добавлено к фильтру, который уже был сформирован драйвером согласно переменным, которые он получил от сервера asterisk.)
Вы можете подключить эту конструкцию в файле extconfig.conf, например, так:
sip.conf => ldap,ou=asterisk-configs,dc=mydomain,dc=com,config
Что позволит Вам вместо файла конфигурации sip.conf использовать значения переменных, которые будут получены с ldap сервера.
Ниже приводиться пример ldap записей для этого файла конфигурации:
dn: cn=sip-context,ou=asterisk-configs,dc=mydomain,dc=com objectClass: top objectClass: oxyPBXConfig cn: sip-context oxyPBXConfigCommented: FALSE oxyPBXConfigFilename: sip.conf oxyPBXConfigCategory: general oxyPBXConfigVariableName: context oxyPBXConfigVariableValue: default oxyPBXConfigCategoryMetric: 1 dn: cn=sip-realm,ou=asterisk-configs,dc=mydomain,dc=com objectClass: top objectClass: oxyPBXConfig cn: sip-realm oxyPBXConfigFilename: sip.conf oxyPBXConfigCommented: FALSE oxyPBXConfigCategory: general oxyPBXConfigVariableName: realm oxyPBXConfigVariableValue: MyRealm oxyPBXConfigCategoryMetric: 1
Что эквивалентно двум записям в файле конфигурации sip.conf в секции [general]:
[general]
context=default
realm=MyRealm
context=default
realm=MyRealm
Также Вы можете хранить конфигурации sip пользователей в ldap, определив в extconfig.conf соответствующие директивы, например, так:
sipusers => ldap,dc=mydomain,dc=com,sipusers
sippeers => ldap,dc=mydomain,dc=com,sippeers
sippeers => ldap,dc=mydomain,dc=com,sippeers
и соответствующее определение в res_ldap.conf:
[sipusers] attributes=accountBaseDN=oxyPBXAccountBaseDN,accountcode=oxyPBXAccountAccountingCode,amaflags,oxyPBXAccountAMAFlags,callgroup,oxyPBXAccountCallGroup,callerid=oxyPBXAccountCallerID,canreinvite=oxyPBXAccountCanReinvite,context=oxyPBXAccountContext,dtmfmode=oxyPBXAccountDTMFMode,fromuser=oxyPBXAccountFromUser,fromdomain=oxyPBXAccountFromDomain,fullcontact=oxyPBXAccountFullContact,fullcontact=gecos,host=oxyPBXAccountHost,insecure=oxyPBXAccountInsecure,mailbox=oxyPBXAccountMailbox,md5secret=realmedPassword,nat=oxyPBXAccountNAT,deny=oxyPBXAccountDeny,permit=oxyPBXAccountPermit,pickupgroup=oxyPBXAccountPickupGroup,port,oxyPBXAccountPort,qualify=oxyPBXAccountQualify,restrictcid=oxyPBXAccountRestrictCID,rtptimeout=oxyPBXAccountRTPTimeout,rtpholdtimeout=oxyPBXAccountRTPHoldTimeout,type=oxyPBXAccountType,disallow=oxyPBXAccountDisallowedCodec,allow=oxyPBXAccountAllowedCodec,MusicOnHold=oxyPBXAccountMusicOnHold,regseconds=oxyPBXAccountExpirationTimestamp,regcontext=oxyPBXAccountRegistrationContext,regexten=oxyPBXAccountRegistrationExten,CanCallForward=oxyPBXAccountCanCallForward additionalFilter=(objectClass=oxyPBXAccountSIP)(oxyPBXAccountType=user) [sippeers] attributes=accountBaseDN=oxyPBXAccountBaseDN,accountcode=oxyPBXAccountAccountingCode,amaflags,oxyPBXAccountAMAFlags,callgroup,oxyPBXAccountCallGroup,callerid=oxyPBXAccountCallerID,canreinvite=oxyPBXAccountCanReinvite,context=oxyPBXAccountContext,dtmfmode=oxyPBXAccountDTMFMode,fromuser=oxyPBXAccountFromUser,fromdomain=oxyPBXAccountFromDomain,fullcontact=oxyPBXAccountFullContact,fullcontact=gecos,host=oxyPBXAccountHost,insecure=oxyPBXAccountInsecure,mailbox=oxyPBXAccountMailbox,md5secret=realmedPassword,nat=oxyPBXAccountNAT,deny=oxyPBXAccountDeny,permit=oxyPBXAccountPermit,pickupgroup=oxyPBXAccountPickupGroup,port,oxyPBXAccountPort,qualify=oxyPBXAccountQualify,restrictcid=oxyPBXAccountRestrictCID,rtptimeout=oxyPBXAccountRTPTimeout,rtpholdtimeout=oxyPBXAccountRTPHoldTimeout,type=oxyPBXAccountType,disallow=oxyPBXAccountDisallowedCodec,allow=oxyPBXAccountAllowedCodec,MusicOnHold=oxyPBXAccountMusicOnHold,regseconds=oxyPBXAccountExpirationTimestamp,regcontext=oxyPBXAccountRegistrationContext,regexten=oxyPBXAccountRegistrationExten,CanCallForward=oxyPBXAccountCanCallForward additionalFilter=(objectClass=oxyPBXAccountSIP)(oxyPBXAccountType=peer)
Далее, Вы можете использовать ldap в Вашем плане набора:
Например, определив контекст default в файле extensions.conf, по этому примеру:
[default]
switch => Realtime/default@realtime_ext
switch => Realtime/default@realtime_ext
поправим extconfig.conf:
realtime_ext => ldap,ou=extensions,dc=mydomain,dc=com,extensions
и не забываем про res_ldap.conf:
[extensions] attributes=context=oxyPBXExtensionContext,exten=oxyPBXExtensionExten,priority=oxyPBXExtensionPriority,app=oxyPBXExtensionApplication,appdata=oxyPBXExtensionApplicationData additionalFilter=(objectClass=oxyPBXExtension)
Вы можете протестировать конфигурацию, например, с помощью двух нижеприведенных ldap записей:
dn: cn=203-1,ou=extensions,dc=mydomain,dc=com objectClass: top objectClass: oxyPBXExtension cn: 203-1 oxyPBXExtensionContext: default oxyPBXExtensionExten: 203 oxyPBXExtensionPriority: 1 oxyPBXExtensionApplication: NoOp oxyPBXExtensionApplicationData: TEST LDAP dn: cn=203-2,ou=extensions,dc=mydomain,dc=com objectClass: top objectClass: oxyPBXExtension cn: 203-2 oxyPBXExtensionContext: default oxyPBXExtensionExten: 203 oxyPBXExtensionPriority: 2 oxyPBXExtensionApplication: NoOp oxyPBXExtensionApplicationData: TEST LDAP Priority 2
Что эквивалентно такому плану набора:
[default]
exten => 203,1,NoOp(TEST LDAP)
exten => 203,2,NoOp(TEST LDAP Priority 2)
exten => 203,1,NoOp(TEST LDAP)
exten => 203,2,NoOp(TEST LDAP Priority 2)
И, наконец, Вы можете использовать ldap realtime driver, для получения переменных из ldap в Вашем плане набора при помощи app_realtime.so.
Например, так:
[default]
exten => 210,1,NoOp(210)
exten => 210,2,RealTime(testfamily|uid|manu|aprefix_)
exten => 210,3,NoOp(Result=${aprefix_gecos})
exten => 210,1,NoOp(210)
exten => 210,2,RealTime(testfamily|uid|manu|aprefix_)
exten => 210,3,NoOp(Result=${aprefix_gecos})
При Выполнении этих команд плана набора, Вы можете увидеть следующее:
-- Executing NoOp("SIP/myphone-4582", "210") in new stack -- Executing RealTime("SIP/myphone-4582", "testfamily|uid|manu|aprefix_") in new stack > Realtime Lookup: family:'testfamily' colmatch:'uid' value:'manu' -- Executing NoOp("SIP/myphone-4582", "Result=Manuel Guesdon") in new stack
Если у Вас в ldap есть запись по типу такой:
dn: cn=manu,ou=people,dc=mydomain,dc=com objectClass: person uid: manu gecos: Manuel Guesdon
а в файле extconfig.conf есть такая директива:
testfamily => ldap,dc=mydomain,dc=com,testfamily
и в файле res_ldap.conf указано следующее:
[testfamily]
additionalFilter=(objectClass=person)
additionalFilter=(objectClass=person)
Удачи!
Автор оригинала: Manuel Guesdon <mguesdon AT oxymium.net>
- Asterisk RealTime - конфигурация Asterisk с использованием базы данных
- Asterisk