ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Архивные статьи в категории ‘Железо VoIP’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Возникла необходимость настроить телефон Cisco Unified IP Phone 7931G для работы по протоколу SIP и подключению его к серверу с Asterisk.

Ранее я не имела опыта по настройке данных аппаратов и пришлось разбираться с нуля.

Итак у нас имеется аппарат, который штатно работает по протоколу SCCP (Skinny Client Control Protocol, проприетарный протокол Cisco).
Первостепенная задача — перепрошить телефон SIP прошивкой, взятой с официального сайта.

На сайте есть прошивка версии 9+ и я сначала поставила ее, но возникли проблемы с конфигом. Примеров конфигурационного файла для 9ой версии в Инете не нашлось и телефон отказывался работать (даже с сокращенным до минимума конфигом для прошивок версии 8) я решила откатиться до версии 8.5(3)SR1 как самой популярной по мануалам из разных источников.

Для настройки телефона нам понадобится:

  • DHCP сервер
  • tftp сервер

В моем случае — все делалось на рабочей станции под OS FreeBSD.
IP-адрес машины для внутренней сети — 10.20.1.1/24
Если вдруг Ваш телефон не настроен на DHCP, то это можно изменить через меню телефона. Надо разблокировать возможность менять настройки комбинацией клавиш **#, и, покопавшись в не сильно просторном меню, выставить искомый параметр.

Для запуска tftp требуется расскоментировать (или добавить) строчку в /etc/inetd.conf
tftp dgram udp wait root /usr/libexec/tftpd tftpd -s /tftpboot

Создать директорию в корне (если она отсутствует):
#mkdir /tftpboot

Установить права доступа на эту директорию:
#chown -R nobody:nogroup /tftpboot

Далее запустить
#/etc/rc.d/inetd onestart

Для автозапуска, после перезагрузки системы, добавить в /etc/rc.conf:
inetd_enable=”YES”

Проверяем, запустился ли демон inetd:
#sockstat | grep :69
root inetd 1094 5 udp4 *:69 *:*

Настраиваем DHCP. Установила из портов сервер isc-dhcp42-server:
#cd /usr/ports/net/isc-dhcp42-server/
#make install clean

Далее правим конфиг DHCP и добавляем DHCP Option 66 и Option 150:
#ee /usr/local/etc/dhcpd.conf

option voip-tftp-server code 150 = { ip-address };
subnet 10.20.1.0 netmask 255.255.255.0 {
      ...skiped...
      option tftp-server-name "10.20.1.1";
      option voip-tftp-server "10.20.1.1";
      ...skiped...
}

Cisco Systems использует нестандартную опцию в DHCP – option 150 (проприетарная опция) для настройки своих аппаратов. Опция 66 — ее аналог.

Тоже самое можно сделать и на микротике, для этого в настройки DHCP сервера нужно добавить:
/ip dhcp-server option
add code=66 name=tftp66 value=»‘IP tftp‘»
add code=150 name=tftp150 value=»‘IP tftp’”

Где IP tftp это IP-адрес нашего TFTP сервера. Пишем его в одинарных кавычках, если добавлять через винбокс, а если через консоль, то в одинарных, а потом в двойных.

/ip dhcp-server network
add address=Network/mask dhcp-option=tftp66,tftp150 dns-server=DNS1,DNS2 gateway=IP-router netmask=24

В папку /tftpboot выкладываем файлы из скаченного архива с прошивкой.
Список файлов:

  • SIP31.8-5-3SR1S.loads
  • apps31.8-5-3ES4.sbn
  • cnu31.8-5-3ES4.sbn
  • cvm31sip.8-5-3ES4.sbn
  • dsp31.8-5-3ES4.sbn
  • jar31sip.8-5-3ES4.sbn
  • term31.default.loads

На этом приготовления окончены и мы приступаем к самому процессу.

Необходимо удалить с телефона старую прошивку. Для этого:

  • отключаем телефон от питания
  • включаем держа клавишу # до тех пор пока программируемые кнопки не начнут мигать по очереди оранжевым светом
  • отпускаем кнопку и вводим на телефоне код: 3491672850*#

Телефон должен начать мигать кнопками, красным цветом. Это значит процесс стирания старой прошивки пошел. Затем телефон выключается и визуально не видно, делает ли он что-либо. Следует спокойно подождать 3-5 минут.

А пока я смотрела в tcpdump трафика на интерфейсе в сторону телефона и логи tftp-сервера,  чтобы убедиться что есть обращения от телефона к DHCP и получения файлов по TFTP.

Итак телефон прошился новой прошивкой и загружается. Для его дальнейшей работы в /tftpboot нам требуется создать конфигурационный файл телефона в формате XML, который должен иметь название вида: SEP000000000000.cnf.xml
Где 000000000000 – МАС-адрес телефона, который написан на нем на наклейке сзади.

Содержимое конфигурационного файла (наиболее интересные строки, на которые стоит обратить внимание, выделены синим):


<device>
<fullConfig>true</fullConfig>
 <deviceProtocol>SIP</deviceProtocol>
 <sshAccess>0</sshAccess>
 <sshPort>22</sshPort>
 <sshUserId>cisco</sshUserId>
 <sshPassword>cisco</sshPassword>
 <devicePool>

<dateTimeSetting>
 <dateTemplate>D.M.Y</dateTemplate>
 <timeZone>Russian Standard/Daylight Time</timeZone>
 <ntps>
 <ntp>
 <name>IP-address-ntp</name>
 <ntpMode>Unicast</ntpMode>
 </ntp>
 </ntps>
</dateTimeSetting>

<callManagerGroup>
 <tftpDefault>true</tftpDefault>
 <members>
 <member priority="0">
 <callManager>
 <name></name>
 <description></description>
 <ports>
 <ethernetPhonePort>2000</ethernetPhonePort>
 <sipPort>5060</sipPort>
 <securedSipPort>5061</securedSipPort>
 </ports>
<processNodeName>DNS-name-or-IP-address-Asterisk-server</processNodeName>
 </callManager>
 </member>
 </members>
 </callManagerGroup>
 </devicePool>

<commonProfile>
 <phonePassword></phonePassword>
 <backgroundImageAccess>true</backgroundImageAccess>
 <callLogBlfEnabled>0</callLogBlfEnabled>
 </commonProfile>
 <loadInformation>SIP31.8-5-3SR1S</loadInformation>
  <loadInformation434 model="Cisco 7931">SIP31.8-5-3SR1S</loadInformation434>
 <vendorConfig>
 <disableSpeaker>false</disableSpeaker>
 <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset>
 <pcPort>0</pcPort>
 <settingsAccess>1</settingsAccess>
 <garp>0</garp>
<voiceVlanAccess>0</voiceVlanAccess>
 <videoCapability>0</videoCapability>
 <autoSelectLineEnable>0</autoSelectLineEnable>
 <daysDisplayNotActive>1,7</daysDisplayNotActive>
 <displayOnTime>10:30</displayOnTime>
 <displayOnDuration>06:05</displayOnDuration>
 <displayIdleTimeout>00:05</displayIdleTimeout>
 <webAccess>0</webAccess>
 <spanToPCPort>1</spanToPCPort>
 <loggingDisplay>1</loggingDisplay>
 <loadServer></loadServer>
</vendorConfig>

<userLocale>
 <name>Russian_Federation</name>
 <uid></uid>
 <langCode>en_En</langCode>
 <version>SIP31.8-5-3SR1S</version>
  <winCharSet>utf-8</winCharSet>
 </userLocale>
 <networkLocale>Russian_Federation</networkLocale>
 <networkLocaleInfo>
 <name>Russian_Federation</name>
 <uid></uid>
 <version>SIP31.8-5-3SR41S</version>
 </networkLocaleInfo>

<deviceSecurityMode>1</deviceSecurityMode>
 <idleTimeout>0</idleTimeout>
 <directoryURL></directoryURL>
 <servicesURL></servicesURL>
 <idleURL></idleURL>
 <messagesURL></messagesURL>
 <proxyServerURL></proxyServerURL>
 <dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig>
 <dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices>
 <dscpForCm2Dvce>96</dscpForCm2Dvce>
 <transportLayerProtocol>2</transportLayerProtocol>
 <capfAuthMode>0</capfAuthMode>
 <capfList>
 <capf>
 <phonePort>3804</phonePort>
 </capf>
 </capfList>
 <certHash></certHash>
<encrConfig>false</encrConfig>
 <sipProfile>
 <sipProxies>
 <backupProxy></backupProxy>
 <backupProxyPort></backupProxyPort>
 <emergencyProxy></emergencyProxy>
 <emergencyProxyPort></emergencyProxyPort>
 <outboundProxy></outboundProxy>
  <outboundProxyPort></outboundProxyPort>
  <registerWithProxy>true</registerWithProxy>
 </sipProxies>
 <sipCallFeatures>
 <cnfJoinEnabled>true</cnfJoinEnabled>
 <callForwardURI>x--serviceuri-cfwdall</callForwardURI>
 <callPickupURI>x-cisco-serviceuri-pickup</callPickupURI>
 <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI>
 <callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI>
 <meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI>
 <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI>
 <rfc2543Hold>false</rfc2543Hold>
<callHoldRingback>2</callHoldRingback>
 <localCfwdEnable>false</localCfwdEnable>
 <semiAttendedTransfer>false</semiAttendedTransfer>
 <anonymousCallBlock>2</anonymousCallBlock>
 <callerIdBlocking>2</callerIdBlocking>
 <dndControl>0</dndControl>
 <remoteCcEnable>true</remoteCcEnable>
 </sipCallFeatures>
 <sipStack>
 <sipInviteRetx>6</sipInviteRetx>
 <sipRetx>10</sipRetx>
 <timerInviteExpires>180</timerInviteExpires>
 <timerRegisterExpires>300</timerRegisterExpires>
 <timerRegisterDelta>5</timerRegisterDelta>
 <timerKeepAliveExpires>120</timerKeepAliveExpires>
 <timerSubscribeExpires>120</timerSubscribeExpires>
<timerSubscribeDelta>5</timerSubscribeDelta>
 <timerT1>500</timerT1>
 <timerT2>4000</timerT2>
 <maxRedirects>70</maxRedirects>
 <remotePartyID>false</remotePartyID>
 <userInfo>None</userInfo>
 </sipStack>

<autoAnswerTimer>1</autoAnswerTimer>
 <autoAnswerAltBehavior>false</autoAnswerAltBehavior>
 <autoAnswerOverride>true</autoAnswerOverride>
 <transferOnhookEnabled>false</transferOnhookEnabled>
 <enableVad>false</enableVad>
 <preferredCodec>g711alaw</preferredCodec>
 <dtmfAvtPayload>101</dtmfAvtPayload>
 <dtmfDbLevel>3</dtmfDbLevel>
 <dtmfOutofBand>avt</dtmfOutofBand>
 <alwaysUsePrimeLine>false</alwaysUsePrimeLine>
 <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail>
 <kpml>3</kpml>
 <stutterMsgWaiting>1</stutterMsgWaiting>
<callStats>true</callStats>
 <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts>
 <disableLocalSpeedDialConfig>true</disableLocalSpeedDialConfig>
 <startMediaPort>16100</startMediaPort>
 <stopMediaPort>19300</stopMediaPort>
 <voipControlPort>5061</voipControlPort>
 <dscpForAudio>184</dscpForAudio>
 <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy>
 <dialTemplate></dialTemplate>
 <phoneLabel>301</phoneLabel>

<natReceivedProcessing>false</natReceivedProcessing>
<natEnabled>false</natEnabled>
<natAddress></natAddress>

<sipLines>
 <line button="1">
 <featureID>9</featureID>
<featureLabel>Number</featureLabel>
 <proxy>DNS-name-or-IP-address-Asterisk-server</proxy>
 <port>5060</port>
  <name>SIP-account-number</name>
  <displayName>SIP-account-number-or-Name</displayName>
 <autoAnswer>
 <autoAnswerEnabled>2</autoAnswerEnabled>
 </autoAnswer>
 <callWaiting>3</callWaiting>
 <authName>SIP-account-auth-name</authName>
  <authPassword>SIP-password</authPassword>
 <sharedLine>false</sharedLine>
 <messageWaitingLampPolicy>3</messageWaitingLampPolicy>
 <messagesNumber></messagesNumber>
 <ringSettingIdle>4</ringSettingIdle>
 <ringSettingActive>5</ringSettingActive>
 <contact>SIP-account-number</contact>
 <forwardCallInfoDisplay>
<callerName>true</callerName>
 <callerNumber>false</callerNumber>
 <redirectedNumber>false</redirectedNumber>
 <dialedNumber>true</dialedNumber>
 </forwardCallInfoDisplay>
 </line>
 <line button="2">
 <featureID>21</featureID>
 <featureLabel>Name</featureLabel>
 <speedDialNumber>Number</speedDialNumber>
 </line>
 </sipLines>
 </sipProfile>
 </device>

Следует отметить, что если телефон не принимает конфигурационный файл, например из-за наличия ошибок в нем, то он будет отображать на экране состояние «Unprovisioned» и каждые 30 секунд обращаться к tftp-серверу, пытаясь вновь скачать конфигурационный файл (вдруг, на этот раз он не будет содержать ошибок). Эти попытки прекрасно видны по tcpdump`у и в логах TFTP.
Для проверки корректности XML синтаксиса конфигурационного файла мне дали хороший совет: просто открыть файл конфига браузером. Лично мне это помогло, помогло осознать почему конфиг не принимается, а так же браузер точно указал в каком именно месте ошибка синтаксиса.

Пробежимся по настройкам:
dateTemplate — формат День — Месяц — Год.
timeZone — Временные зоны, например, перечислены тут
loadInformation — Версия прошивки, которую брать. Должно совпадать с названием файла .loads
phoneLabel — в правом верхнем углу будет висеть этот лейбл. Не длинее 12 символов.
preferredCodec — голосовой кодек, который будет использовать телефон

webAccess — Включение WEB-сервера на телефона. Обратите внимание, что для включение веб-интерфейса необходимо установить значение параметра в ноль.
sshAccess — Тоже самое касается ssh доступа на устройство.

Причем основная часть инструкций считает достаточным ввести 2 строки с UserID и Password для работы сервиса ssh, некоторые источники указывают еще верхние 2, и поясняют их актуальность только для версий прошивки старше 8.5.1. У меня не получилось подключиться по ssh ни в одном из найденных мной версий написания этих параметров.

Настройки сети:
registerWithProxy — для регистрации SIP линий
natEnable — ставим «true» если телефон находится за NAT
Если natEnable в «true», то телефону необходимо знать внешний IP-адрес NAT`а. Для этого есть две опции:

  • natReceivedProcessing — внешний IP-адрес будет автоматически браться из поля VIA (received=XXX.XXX.XXX.XXX) SIP-пакета 200 ОК полученный от сервера в ответ на пакет REGISTER от телефона, вместо поля Contact
  • natAddress — явное указание внешнего IP адрес NAT`a

При работе за NAT`ом выбрала установку natReceivedProcessing, а natAddress оставила пустым:

<natReceivedProcessing>true</natReceivedProcessing>
<natEnabled>true</natEnabled>
<natAddress></natAddress>

Указание диапазона RTP портов:

  • startMediaPort
  • stopMediaPort

voipControlPort — если значение пустое, то по умолчанию порт 5060. Обратите внимание, что в зависимости от значения параметра natEnabled поведение разное.
Если natEnabled «false», то этот порт используется в кач-ве SRC порта для отправки SIP пакетов. Если natEnabled «true», то телефон будет отправлять пакеты с непривилегированных портов, а на этом порту будет ожидать ОТВЕТЫ от SIP-сервера.
Таким образом, при установке телефона за NAT и без дополнительной настройки шлюза (проброс порта) он работать не будет.
Изыскания на эту тему написаны в топике «Cisco 7931g SIP» на forum.asterisk.ru:

1.1.1.16 — сервер
10.10.1.153 — Cisco 7931G

11:12:05.794376 IP (tos 0x60, ttl 64, id 249, offset 0, flags [none], proto UDP (17), length 609)
    10.10.1.153.49287 > 1.1.1.16.5060: SIP, length: 581
        REGISTER sip:1.1.1.16 SIP/2.0
        Via: SIP/2.0/UDP 10.10.1.153:5060;branch=z9hG4bKb92b2996
        From: <sip:7896@1.1.1.16>;tag=5cfc665d4f9a00100ee171b2-9eb423e6
        To: <sip:7896@1.1.1.16>
        Call-ID: 5cfc665d-4f9a0002-b7a3ced0-c1c67a5a@10.10.1.153
        Max-Forwards: 70
        Date: Tue, 01 Jun 2010 06:05:18 GMT
        CSeq: 110 REGISTER
        User-Agent: Cisco-CP7931G/8.5.3
        Contact: <sip:7896@10.10.1.153:5060;transport=udp>;+sip.instance="";+u.sip!model.ccm.cisco.com="348"
        Supported: (null),X-cisco-xsi-7.0.1
        Content-Length: 0
        Expires: 300

11:12:05.831242 IP (tos 0x0, ttl 60, id 57479, offset 0, flags [none], proto UDP (17), length 588, bad cksum 0 (->8afc)!)
    1.1.1.16.5060 > 10.10.1.153.49287: SIP, length: 560
        SIP/2.0 401 Unauthorized
        Via: SIP/2.0/UDP 10.10.1.153:5060;branch=z9hG4bKb92b2996;received=1.1.1.16;rport=49287
        From: <sip:7896@1.1.1.16>;tag=5cfc665d4f9a00100ee171b2-9eb423e6
        To: <sip:7896@1.1.1.16>;tag=as35525338
        Call-ID: 5cfc665d-4f9a0002-b7a3ced0-c1c67a5a@10.10.1.153
        CSeq: 110 REGISTER
        Server: sip8.domain.com
        Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
        Supported: replaces, timer
        WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="070714aa"
        Content-Length: 0

После чего телефон утверждает udp port 49287 unreachable:

11:12:05.832048 IP (tos 0x0, ttl 64, id 250, offset 0, flags [none], proto ICMP (1), length 56)
10.10.1.153 > 1.1.1.16: ICMP 10.10.1.153 udp port 49287 unreachable, length 36
IP (tos 0x0, ttl 60, id 57479, offset 0, flags [none], proto UDP (17), length 588)
1.1.1.16.5060 > 10.10.1.153.49287: SIP, length: 560
[|sip]

….SKIPED….

Снова попробовал через NAT и наконец разобрался.
Могу сказать, что в предыдущий раз, это я ОЛЕНЬ (правда не пойму как так получилось), но судя по дампу, и наличию «rport» в конце строки VIA на которую я не обратил внимания, в пире в этот момент точно стояло nat=yes, а не nat=no.

Установил nat=no на стороне Asterisk, в конфиге телефона:

<voipControlPort>5061</voipControlPort>
<natReceivedProcessing>true</natReceivedProcessing>
<natEnabled>true</natEnabled>
<natAddress></natAddress>

И… и это не взлетело, но на этот раз причина ясна:

  • 1.1.68.16 — Asterisk
  • 1.1.68.72 — IPшник NAT`а
  • 10.10.1.153 — IPшник телефона

Прохождение пакета REGISTER от телефона: 10.10.1.153.49845 > 1.1.68.72.49845 > 1.1.68.16.5060 (поле Contact: <sip:7896@1.1.68.72:5061;transport=udp>)
Прохождение ответного пакета 401 Unauthorized: 1.1.68.16.5060 > 1.1.68.72.5061
Пакет доезжает до 1.1.68.72, но не проходит к 10.10.1.153 т.к. в таблице NAT трансляций отсутствует запись о 10.10.1.153:5061, т.к. изначальный пакет 10.10.1.153.49845, посему пакет просто отбрасывается.

Соответственно становится логично, что если сделать проброс порта 5061 с внешнего 1.1.68.72 на 10.10.1.153, то все конечно же заработает.
Делаем проброс 5061 и ч.т.д.

Дамп на стороне Asterisk`а:

11:04:44.251049 IP (tos 0x0, ttl 60, id 767, offset 0, flags [none], proto UDP (17), length 768)
1.1.68.72.49845 > 1.1.68.16.5060: SIP, length: 740
REGISTER sip:1.1.68.16 SIP/2.0
Via: SIP/2.0/UDP 1.1.68.72:5061;branch=z9hG4bKff66d16c
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a003e6c2253cc-3c681c9c
To: <sip:7896@1.1.68.16>
Call-ID: 5cfc665d-4f9a0002-30c35668-66fda434@10.10.1.153
Max-Forwards: 70
Date: Wed, 28 Oct 2015 08:04:43 GMT
CSeq: 165 REGISTER
User-Agent: Cisco-CP7931G/8.5.3
Contact: <sip:7896@1.1.68.72:5061;transport=udp>;+sip.instance="<urn:uuid:00000000-0000-0000-0000-5cfc665d4f9a>";+u.sip!model.ccm.cisco.com="348"
Authorization: Digest username="7896",realm="asterisk",uri="sip:1.1.68.16",response="6a2ea6fed25e34d552573634601fb9d1",nonce="19016509",algorithm=MD5
Supported: (null),X-cisco-xsi-7.0.1
Content-Length: 0
Expires: 300

11:04:44.251109 IP (tos 0x0, ttl 64, id 63304, offset 0, flags [none], proto UDP (17), length 590)
1.1.68.16.5060 > 1.1.68.72.5061: SIP, length: 562
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 1.1.68.72:5061;branch=z9hG4bKff66d16c;received=1.1.68.72
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a003e6c2253cc-3c681c9c
To: <sip:7896@1.1.68.16>;tag=as2a67ddfa
Call-ID: 5cfc665d-4f9a0002-30c35668-66fda434@10.10.1.153
CSeq: 165 REGISTER
Server: sip8.domain.com
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="4a6dbb1e", stale=true
Content-Length: 0

11:04:44.258586 IP (tos 0x0, ttl 60, id 768, offset 0, flags [none], proto UDP (17), length 768)
1.1.68.72.49846 > 1.1.68.16.5060: SIP, length: 740
REGISTER sip:1.1.68.16 SIP/2.0
Via: SIP/2.0/UDP 1.1.68.72:5061;branch=z9hG4bK398ff65c
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a003e6c2253cc-3c681c9c
To: <sip:7896@1.1.68.16>
Call-ID: 5cfc665d-4f9a0002-30c35668-66fda434@10.10.1.153
Max-Forwards: 70
Date: Wed, 28 Oct 2015 08:04:43 GMT
CSeq: 166 REGISTER
User-Agent: Cisco-CP7931G/8.5.3
Contact: <sip:7896@1.1.68.72:5061;transport=udp>;+sip.instance="<urn:uuid:00000000-0000-0000-0000-5cfc665d4f9a>";+u.sip!model.ccm.cisco.com="348"
Authorization: Digest username="7896",realm="asterisk",uri="sip:1.1.68.16",response="4a56a3e3f5e1b272274fa7cc3ce48d19",nonce="4a6dbb1e",algorithm=MD5
Supported: (null),X-cisco-xsi-7.0.1
Content-Length: 0
Expires: 300


11:04:44.258686 IP (tos 0x0, ttl 64, id 63321, offset 0, flags [none], proto UDP (17), length 609)
1.1.68.16.5060 > 1.1.68.72.5061: SIP, length: 581
SIP/2.0 200 OK
Via: SIP/2.0/UDP 1.1.68.72:5061;branch=z9hG4bK398ff65c;received=1.1.68.72
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a003e6c2253cc-3c681c9c
To: <sip:7896@1.1.68.16>;tag=as2a67ddfa
Call-ID: 5cfc665d-4f9a0002-30c35668-66fda434@10.10.1.153
CSeq: 166 REGISTER
Server: sip8.domain.com
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Expires: 300
Contact: <sip:7896@1.1.68.72:5061;transport=udp>;expires=300
Date: Wed, 28 Oct 2015 08:04:44 GMT
Content-Length: 0
Состояние регистрации на сервере:

7896/7896 1.1.68.72 D 5061 Unmonitored

Addr->IP : 1.1.68.72:5061

Useragent : Cisco-CP7931G/8.5.3

Reg. Contact : sip:7896@1.1.68.72:5061;transport=udp

Дамп на стороне NAT`а (после процесса NAT):

11:45:08.033612 IP (tos 0x60, ttl 64, id 25, offset 0, flags [none], proto UDP (17), length 762)
10.10.1.153.49182 > 1.1.68.16.5060: SIP, length: 734
REGISTER sip:1.1.68.16 SIP/2.0
Via: SIP/2.0/UDP 10.10.1.153:5061;branch=z9hG4bK79f75193
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a0002a072f674-1c4da357
To: <sip:7896@1.1.68.16>
Call-ID: 5cfc665d-4f9a0002-f3129326-816fc831@10.10.1.153
Max-Forwards: 70
Date: Wed, 28 Oct 2015 08:45:05 GMT
CSeq: 103 REGISTER
User-Agent: Cisco-CP7931G/8.5.3
Contact: <sip:7896@10.10.1.153:5061;transport=udp>;+sip.instance="<urn:uuid:00000000-0000-0000-0000-5cfc665d4f9a>";+u.sip!model.ccm.cisco.com="348"
Authorization: Digest username="7896",realm="asterisk",uri="sip:1.1.68.16",response="7f6cf3decde843e30c6475cef15d7bc4",nonce="40839bef",algorithm=MD5
Supported: (null),X-cisco-xsi-7.0.1
Content-Length: 0
Expires: 0


11:45:08.035579 IP (tos 0x0, ttl 60, id 9145, offset 0, flags [none], proto UDP (17), length 588, bad cksum 0 (->47cb)!)
1.1.68.16.5060 > 10.10.1.153.5061: SIP, length: 560
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 10.10.1.153:5061;branch=z9hG4bK79f75193;received=1.1.68.72
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a0002a072f674-1c4da357
To: <sip:7896@1.1.68.16>;tag=as31ab4c73
Call-ID: 5cfc665d-4f9a0002-f3129326-816fc831@10.10.1.153
CSeq: 103 REGISTER
Server: sip8.domain.com
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="10809208", stale=true
Content-Length: 0

11:45:08.041848 IP (tos 0x60, ttl 64, id 26, offset 0, flags [none], proto UDP (17), length 762)
10.10.1.153.49183 > 1.1.68.16.5060: SIP, length: 734
REGISTER sip:1.1.68.16 SIP/2.0
Via: SIP/2.0/UDP 10.10.1.153:5061;branch=z9hG4bK32b5e3e0
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a0002a072f674-1c4da357
To: <sip:7896@1.1.68.16>
Call-ID: 5cfc665d-4f9a0002-f3129326-816fc831@10.10.1.153
Max-Forwards: 70
Date: Wed, 28 Oct 2015 08:45:05 GMT
CSeq: 104 REGISTER
User-Agent: Cisco-CP7931G/8.5.3
Contact: <sip:7896@10.10.1.153:5061;transport=udp>;+sip.instance="<urn:uuid:00000000-0000-0000-0000-5cfc665d4f9a>";+u.sip!model.ccm.cisco.com="348"
Authorization: Digest username="7896",realm="asterisk",uri="sip:1.1.68.16",response="7951fc7add50cbbceb0608a3a8b4379a",nonce="10809208",algorithm=MD5
Supported: (null),X-cisco-xsi-7.0.1
Content-Length: 0
Expires: 0


11:45:08.043572 IP (tos 0x0, ttl 60, id 9161, offset 0, flags [none], proto UDP (17), length 539, bad cksum 0 (->47ec)!)
1.1.68.16.5060 > 10.10.1.153.5061: SIP, length: 511
SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.10.1.153:5061;branch=z9hG4bK32b5e3e0;received=1.1.68.72
From: <sip:7896@1.1.68.16>;tag=5cfc665d4f9a0002a072f674-1c4da357
To: <sip:7896@1.1.68.16>;tag=as31ab4c73
Call-ID: 5cfc665d-4f9a0002-f3129326-816fc831@10.10.1.153
CSeq: 104 REGISTER
Server: sip8.domain.com
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Expires: 0
Date: Wed, 28 Oct 2015 08:45:08 GMT
Content-Length: 0

SIP линии:
featureID — про этот параметр ниже
proxy- IP-адрес нашего сервера c Asterisk
port — SIP порт
name — Имя или номер SIP аккаунта
displayName — Отображаемое имя, соответственно указываем или имя или номер.
authName — имя вашего аккаунта для авторизации на сервере, обычно это ваш номер
authPassword — пароль вашего SIP аккаунта
contact — номер SIP аккаунта

Линия с Speed Dial
SD (Speed Dial — набор номера по нажатии кнопки) на программируемых кнопках (коих 24 штуки).
Хотелось настроить еще и BLF, но это оказалось все непросто с этим на этом телефоне. Идея была отодвинута (отлично гуглятся решения, вроде работы телефона с Cisco Call Manager),  т.к. необходимо пропатчить Астериск, а именно chan_sip.
Кнопки линий пронумерованы от 24 до 1 сверху вниз, чередуясь слева вправо. Соответвенно, 1 линия находится в правом нижнем углу.

featureLabel- выводимое описание
speedDialNumber — номер для набора

featureID — код фичи, то что будет делаться по нажатию кнопки:

  • feature id 1 last number redial
  • feature id 2 speed dial
  • feature id 3 hold
  • feature id 5 fwd all
  • feature id 9 line — Для SIP регистрации
  • feature id 19 private
  • feature id 20 service uri
  • featureid 21 speed dial — Для набора сохраненного номера
  • feature id 22 paging
  • feature id 27 Malicious call ID

Полезные ссылки:

P.S. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Уважайте чужой труд.

Автор: Гриднева Мария

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 4,67 из 5)
Загрузка...
Отправить на почту Отправить на почту

Продолжим обустройство нашей AS5350 и VoIP сети 🙂

Задача

Автоматизация управления VoIP dialpeer’ами на Cisco AS5350.

Решение

Протокол snmp уже используется для отображения картины загрузки потоков (OID: 1.3.6.1.4.1.9.10.19.1.1.9.1.3.номер_слота.номер_порта), то было принято решение управлять по этому же протоколу. Воспользовавшись гуглом и  SNMP Object Navigator, были найдены нужные OID’ы:

Для работы с AS5350 по протоколу snmp воспользуемся утилитами snmpwalk и snmpset из пакета net-snmp.

Получить все диалпиры:

# snmpwalk -v1 -c RO-community -O n 192.168.68.3 .1.3.6.1.2.1.10.21.1.2.1.1.5

.1.3.6.1.2.1.10.21.1.2.1.1.5.11.244 = STRING: «(0072)?84990088048»
.1.3.6.1.2.1.10.21.1.2.1.1.5.12.243 = STRING: «84950003211»
.1.3.6.1.2.1.10.21.1.2.1.1.5.13.195 = STRING: «(0072)?84950003220»

….

.1.3.6.1.2.1.10.21.1.2.1.1.5.246.196 = STRING: «0003217»

Например, нас интересует номер 84950003211, поэтому разберем строку вывода для этого номера поподробнее:

.1.3.6.1.2.1.10.21.1.2.1.1.5.12.243 = STRING: «84950003211», где 12 — номер дилапира на Cisco, 243 — индекс интерфейса по snmp (ifIndex)

Далее, для выключения диалпира нам нужно на него передать команду shutdown, что можно сделать по протоколу snmp при помощи OID 1.3.6.1.2.1.2.2.1.7.ifIndex:

# snmpset -v1 -c WR-community 192.168.68.3 1.3.6.1.2.1.2.2.1.7.243 i 2

.1.3.6.1.2.1.2.2.1.7.243 = INTEGER: down(2)

для его включения:

# snmpset -v1 -c WR-community 192.168.68.3 1.3.6.1.2.1.2.2.1.7.243 i 1

.1.3.6.1.2.1.2.2.1.7.243 = INTEGER: up(1)

Принципиально наша задача решена. Как и на чем ее накодить — оставляем выбор за вами.

 

Перечислю несколько полезных OID’ов ([rw] — OID используется и для чтения и для записи):

  • 1.3.6.1.2.1.10.21.1.2.1.1.4.DialpeerNumber.ifIndex — destination pattern
  • 1.3.6.1.2.1.10.21.1.2.1.1.5.DialpeerNumber.ifIndex — answer address
  • 1.3.6.1.2.1.2.2.1.7.ifIndex [rw] — Состояние интерфейса

1:up
2:down

  • 1.3.6.1.4.1.9.9.63.1.2.4.1.5.ifIndex [rw] — huntstop

1:true

2:false

  • 1.3.6.1.4.1.9.9.63.1.2.4.1.4.ifIndex [rw] — preference
  • 1.3.6.1.4.1.9.9.63.1.2.4.1.2.ifIndex [rw] — max-conn
  • 1.3.6.1.4.1.9.9.63.1.2.3.1.4.ifIndex [rw] — session target
  • 1.3.6.1.4.1.9.9.63.1.2.3.1.1.ifIndex [rw] — session protocol

1:other
2:cisco
3:sdp
4:sip
5:multicast

  • 1.3.6.1.4.1.9.9.63.1.2.3.1.6.ifIndex [rw] — fax rate

1:none
2:voiceRate
3:fax2400
4:fax4800
5:fax7200
6:fax9600
7:fax14400
8:fax12000

  • 1.3.6.1.4.1.9.9.63.1.2.3.1.5.ifIndex [rw] — codec

1:g729r8000
2:g729Ar8000
3:g726r16000
4:g726r24000
5:g726r32000
6:g711ulawr64000
7:g711Alawr64000
8:g728r16000
9:g723r6300
10:g723r5300
11:gsmr13200
12:g729Br8000
13:g729ABr8000
14:g723Ar6300
15:g723Ar5300
16:g729IETFr8000
17:gsmeEr12200
18:clearChannel
19:g726r40000
20:llcc
21:gsmAmrNb

Если используется voice-class codec для задания группы кодеков, то OID вернет первый кодек из группы.

 

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Уважайте чужой труд.

Автор:  Панфилов Алексей (lehis (at) subnets.ru)

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Не так давно поставили очень удобный gsm-voip шлюз на 2 sim и 2 fxo  addpac GS1002 для работы в связке с Asterisk.

До этого работал addpac AP1100F для оцифровки входящих аналоговых линий, они работают под одной OS, так что конфиг похожий на AP1100f:

GS1002# show running-config

# навесим IP на wan:
interface FastEthernet0/0
ip address 10.100.0.248 255.255.255.0
!
! VoIP configuration.
!
!
! Voice service voip configuration.
!
voice service voip
protocol sip
dtmf-relay out-of-band
fax protocol t38 redundancy 0
fax rate 9600
h323 call start fast
h323 call tunnel enable
no call-barring unconfigured-ip-address
no voip-inbound-call-barring enable
!
!
! Voice port configuration.

# тут вешаем на какой номер отправлять входящие звонки на астериск
! GSM
voice-port 0/0
connection plar 377737708
ring number 10
ring detect-timeout 100
ring detect-timer 900
no announcement
no caller-id enable
!
!
! GSM
voice-port 0/1
connection plar 377737709
ring number 10
ring detect-timeout 100
ring detect-timer 900
no announcement
no caller-id enable
!
# fxo порты не исользуем, если надо по образцу выше
! FXO
voice-port 0/2
no caller-id enable
!
!
! FXO
voice-port 0/3
no caller-id enable
!
 # заведем dial-peer destination-pattern по кол портов:
!
dial-peer voice 0 pots
destination-pattern T
port 0/0

!
dial-peer voice 1 pots
destination-pattern T
port 0/1
!
!

# заведем sip cервер с destination-pattern
! Voip peer configuration.
!
dial-peer voice 300 voip
destination-pattern T
# IP sip серевера, куда кидаем входящие звонки

session target ip 10.100.0.1 session protocol sip voice-class codec 1 no vad dtmf-relay info fax protocol t38 redundancy 0 fax rate 9600 ! ! ! ! ! # выставим 711alaw кодек приоритетным ! Codec classes configuration. ! voice class codec 1 codec preference 1 g711alaw ! ! ! ! SIP UA configuration. ! sip-ua user-register sip-server 10.100.0.1 register e164
На аддпаке всё, если есть нюансы можно смотреть дебаг:

GS1002# debug voip call

GS1002# terminal monitor

 

На Астериске:

В  дефаулт секции в  extensions.conf укажем default контекст:

[general]
context=INBOUND

в конексте INBOUND обработаем входящие вызовы с шлюза

[INBOUND]

exten => 377737708,1,Goto(INBOUND,3777377,1)
exten => 377737709,1,Goto(INBOUND,3777377,1)

Для исходящих вызовов в конексте исходящих звонков в  extensions.conf просто кидаем вызов на IP шлюза 10.100.0.248:

exten => _XXXXXXXXXX,1,Dial(SIP/${EXTEN}@10.100.0.248,90,r)

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор: stalex

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 5, среднее: 4,40 из 5)
Загрузка...
Отправить на почту Отправить на почту

В продолжение статей (AS5350 в качестве VoIP-шлюза и Cisco AS5350 и RADIUS) о настройке Cisco AS5350 рассказываем решение по ограничению длительности вызовов, проходящих через Cisco AS5350.

После нахождения очередного зависшего вызова (такое случается уже не часто, но тем не менее бывает) было решено попробовать ввести ограничение максимальной длительности вызова. Использование этого функционала возможно, начиная с  Cisco IOS Release 12.4(4)T.

Активируем данную фичу, дав команды в режиме глобальной конфигурации:

application
package callfeature

Ограничиваем макисмальную длительность вызова 60 минутами:
param long-dur-duration 60

По достижении максимальной длительности вызова завершаем его:

param long-dur-action disconnnect

Помимо завершения доступны еще действия: ignore и syslog.

Включаем режим определения длительности вызова:
param long-dur-call-mon enable

Код причины завершения вызова — «прерывание» (передается в Radius, м.б. полезно для последующей выборки завершенных звонков):
long-dur-disc-cause 8

В логах фиксируется завершенный вызов:

show logging
Mar 23 2011 17:49:43.372 MSK: %SIP-6-LONG_DUR_CALL_DETECTED: Long Duration Call is detected on call with CallId 1011872, GUID 76CC44C1-549311E03/23/2011 17:49:43, Calling number 8499678xxxx, Called Number 89104xxxxxx, at 03/23/2011 17:49:43.372, Duration: 60 min, RTP Media:Active; Control:Inactive.

Mar 23 2011 17:49:43.372 MSK: %VTSP-6-LONG_DUR_CALL_DETECTED: Long Duration Call is detected for call with CallId 1011873, GUID 76CC44C1-549311E0-9E4EECE1-281A6C12, CIC 3/1.31, Calling number 8499678xxxx, CalledNumber 89104xxxxxx, at 03/23/2011 17:49:43.372, Duration: 60 min, RTP media status = N/A

Благодарю Сергея Бабичева (aka zaikini) за наводку на документацию производителя оборудования по этому вопросу.

P.S. На IOS 12.4(15)T11 (на других версиях не проверялось в силу их отсутствия) обнаружилось следующее:

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


dial-peer voice 46 voip
paramspace callfeature long-dur-duration 1
paramspace callfeature long-dur-action disconnect
paramspace callfeature long-dur-call-mon enable

имеем следующее:

  1. заданной в диалпире длительностью ограничиваются вызовы, не попадающие под данный диалпир (но не все вызовы, закономерности выявить не смог).
  2. у вызова, попадающего под данный диалпир, длительность ограничивается только если это вызов в ТфОП, исходящий ИЗ SIP, если же идет вызов из ТфОП В SIP, то ограничение на него не действует.

P.P.S. Т.к. в закладках периодически «протухают» линки на коды завершения вызовов согласно рекомендации ITU-T Q.850, то я решил их «увековечить» в нашем блоге (будьте внимательны — коды даны в десятичном представлении, а в radius’e и дебаге cisco они фигурируют в шестнадцатиричном представлении) :

ISDN Cause Codes (Источник)

Cause No. 0
This is usually given by the router when none of the other codes apply. This cause usually occurs in the same type of situations as cause 1, cause 88, and cause 100.

Cause No. 1 — Unallocated (unassigned) number.
This cause indicates that the destination requested by the calling user cannot be reached because, although the number is in a valid format, it is not currently assigned (allocated).
What it usually means:
The SPIDS may be incorrectly entered in the router or the Telco switch, giving a SPID failure in the router logs.
The ISDN phone number being dialed by the router is invalid and the telco switch cannot locate the number to complete the call, as it is invalid.
On long distance calls, the call cannot be properly routed to its destination.

Cause No. 2 — No route to specified transit network (national use).
This cause indicates that the equipment sending this cause has received a request to route the call through a particular transit network which it does not recognize. The equipment sending this cause does not recognize the transit network either because the transit network does not exist or because that particular transit network not serve the equipment which is sending this cause.

Cause No. 3 — No route to destination.
This cause indicates that the called party cannot be reached because the network through which the call has been routed does not serve the destination desired. This cause is supported on a network dependent basis.

Cause No. 4 — send special information tone.
This cause indicates that the called party cannot be reached for reasons that are of a long term nature and that the special information tone should be returned to the calling party.

Cause No. 5 — misdialed trunk prefix (national use).
This cause indicates the erroneous inclusion of a trunk prefix in the called party number. This number is to sniped from the dialed number being sent to the network by the customer premises equipment.

Cause No. 6 — channel unacceptable.
This cause indicates that the channel most recently identified is not acceptable to the sending entity for use in this call.

Cause No. 7 — call awarded. being delivered in an established channel.
This cause indicates that the user has been awarded the incoming call and that the incoming call is being connected to a channel already established to that user for similar calls (e.g. packet-mode x.25 virtual calls).

Cause No. 8 — preemption.
This cause indicates the call is being preempted.

Cause No. 9 — preemption — circuit reserved for reuse.
This cause indicates that the call is being preempted and the circuit is reserved for reuse by the preempting exchange.

Cause No. 16 — normal call clearing.
This cause indicates that the call is being cleared because one of the users involved in the call has requested that the call be cleared.
What it means:
This could be almost anything; it is the vaguest of the cause codes. The call comes down normally, but the reasons for it could be:
— Bad username or password
— Router’s settings do not match what is expected by the remote end.
— Telephone line problems.
— Hung session on remote end.

Cause No. 17 — user busy.
This cause is used to indicate that the called party is unable to accept another call because the user busy condition has been encountered. This cause value may be generated by the called user or by the network. In the case of user determined user busy it is noted that the user equipment is compatible with the call.
What is means:
Calling end is busy.

Cause No. 18 — no user responding.
This cause is used when a called party does not respond to a call establishment message with either an alerting or connect indication within the prescribed period of time allocated.
What it means:
The equipment on the other end does not answer the call. Usually this is a misconfiguration on the equipment being called.

Cause No. 19 — no answer from user (user alerted).
This cause is used when the called party has been alerted but does not respond with a connect indication within a prescribed period of time. Note — This cause is not necessarily generated by Q.931 procedures but may be generated by internal network timers.

Cause No. 20 — subscriber absent.
This cause value is used when a mobile station has logged off. Radio contact is not obtained with a mobile station or if a personal telecommunication user is temporarily not addressable at any user-network interface.

Cause No. 21 — call rejected.
This cause indicates that the equipment sending this cause does not wish to accept this call. although it could have accepted the call because the equipment sending this cause is neither busy nor incompatible. This cause may also be generated by the network, indicating that the call was cleared due to a supplementary service constraint. The diagnostic field may contain additional information about the supplementary service and reason for rejection.
What it means:
This is usually a telco issue. The call never reaches the final destination, which can be caused by a bad switch translation, or a misconfiguration on the equipment being called.

Cause No. 22 — number changed.
This cause is returned to a calling party when the called party number indicated by the calling party is no longer assigned. The new called party number may optionally be included in the diagnostic field. If a network does not support this cause, cause no. 1, unallocated (unassigned) number shall be used.

Cause No. 26 — non-selected user clearing.
This cause indicates that the user has not been awarded the incoming call.

Cause No. 27 — destination out of order.
This cause indicates that the destination indicated by the user cannot be reached because the interface to the destination is not functioning correctly. The term «not functioning correctly» indicates that a signal message was unable to be delivered to the remote party; e.g., a physical layer or data link layer failure at the remote party or user equipment off-line.

Cause No. 28 — invalid number format (address incomplete).
This cause indicates that the called party cannot be reached because the called party number is not in a valid format or is not complete.

Cause No. 29 — facilities rejected.
This cause is returned when a supplementary service requested by the user cannot be provide by the network.

Cause No. 30 — response to STATUS INQUIRY.
This cause is included in the STATUS message when the reason for generating the STATUS message was the prior receipt of a STATUS INQUIRY.

Cause No. 31 — normal. unspecified.
This cause is used to report a normal event only when no other cause in the normal class applies.

Cause No. 34 — no circuit/channel available.
This cause indicates that there is no appropriate circuit/channel presently available to handle the call.
What it means:
There is no place on the Public Telephone network to place the call; the call never gets to its destiation. This is usually a temporary problem.

Cause No. 35 — Call Queued.

Cause No. 38 — network out of order.
This cause indicates that the network is not functioning correctly and that the condition is likely to last a relatively long period of time e.g., immediately re-attempting the call is not likely to be successful.

Cause No. 39 — permanent frame mode connection out-of-service.
This cause is included in a STATUS message to indicate that a permanently established frame mode connection is out-of-service (e.g. due to equipment or section failure)

Cause No. 40 — permanent frame mode connection operational.
This cause is included in a STATUS message to indicate that a permanently established frame mode connection is operational and capable of carrying user information.

Cause No. 41 — temporary failure.
This cause indicates that the network is not functioning correctly and that the condition is no likely to last a long period of time; e.g., the user may wish to try another call attempt almost immediately.
What it means:
This means that there is a temporary failure at the physical layer on the ISDN network. If you remove the ISDN cable from the Netopia, you would see this. It’s usually temporary.

Cause No. 42 — switching equipment congestion.
This cause indicates that the switching equipment generating this cause is experiencing a period of high traffic.
What it means:
Just too much going on at this point on the ISDN network to get the call through to its destination.

Cause No. 43 — access information discarded.
This cause indicates that the network could not deliver access information to the remote user as requested. i.e., user-to-user information, low layer compatibility, high layer compatibility or sub-address as indicated in the diagnostic. It is noted that the particular type of access information discarded is optionally included in the diagnostic.

Cause No. 44 — requested circuit/channel not available.
This cause is returned when the circuit or channel indicated by the requesting entity cannot be provided by the other side of the interface.

Cause No. 46 — precedence call blocked.
This cause indicates that there are no predictable circuits or that the called user is busy with a call of equal or higher preventable level.

Cause No. 47 — resource unavailable, unspecified.
This cause is used to report a resource unavailable event only when no other cause in the resource unavailable class applies.

Cause No. 49 — Quality of Service not available.
This cause is used to report that the requested Quality of Service, as defined in Recommendation X.213. cannot be provided (e.g., throughput of transit delay cannot be supported).

Cause No. 50 — requested facility not subscribed.
This cause indicates that the user has requested a supplementary service which is implemented by the equipment which generated this cause but the user is not authorized to use.
What it means:
The switch looks at the number being dialed and thinks it is for another service rather than ISDN. If the phone number is put in the correct format, the call should be placed properly. There are no standards for this, all Telcos have their own system for programming the number formats that the switches will recognize. Some systems want to see 7 digits, some 10, and others 11.

Cause No. 52 — outgoing calls barred.

Cause No. 53 — outgoing calls barred within CUG.
This cause indicates that although the calling party is a member of the CUG for the outgoing CUG call. Outgoing calls are not allowed for this member of the CUG.

Cause No. 54 — incoming calls barred

Cause No. 55 — incoming calls barred within CUG.
This cause indicates that although the calling party is a member of the CUG for the incoming CUG call. Incoming calls are not allowed for this member of the CUG.

Cause No. 57 — bearer capability not authorized.
This cause indicates that the user has requested a bearer capability which is implemented by the equipment which generated this cause but the user is not authorized to use.

Cause No. 58 — bearer capability not presently available.
This cause indicates that the user has requested a bearer capability which is implemented by the equipment which generated this cause but which is not available at this time.

Cause No. 62 — inconsistency in outgoing information element.
This cause indicates an inconsistency in the designated outgoing access information and subscriber class.

Cause No. 63 — service or option not available. unspecified.
This cause is used to report a service or option not available event only when no other cause in the service or option not available class applies.

Cause No. 65 — bearer capability not implemented.
This cause indicates that the equipment sending this cause does not support the bearer capability requested.
What it means:
In most cases, the number being called is not an ISDN number but an analog destination.
The equipment is dialing at a faster rate than the circuitry allows, for example, dialing at 64K when only 56K is supported.

Cause No. 66 — channel type not implemented.
This cause indicates that the equipment sending this cause does not support the channel type requested.

Cause No. 69 — requested facility not implemented.
This cause indicates that the equipment sending this cause does not support the requested supplementary services.

Cause No. 70 — only restricted digital information bearer capability is available.
This cause indicates that the calling party has requested an unrestricted bearer service but the equipment sending this cause only supports the restricted version of the requested bearer capability.

Cause No. 79 — service or option not implemented unspecified.
This cause is used to report a service or option not implemented event only when no other cause in the service or option not implemented class applies.

Cause No. 81 — invalid call reference value.
This cause indicates that the equipment sending this cause has received a message with a call reference which is not currently in use on the user-network interface.

Cause No. 82 — identified channel does not exist.
This cause indicates that the equipment sending this cause has received a request to use a channel not activated on the interface for a call. For example, if a user has subscribed to those channels on a primary rate interface numbered from l to 12 and the user equipment or the network attempts to use channels 3 through 23, this cause is generated.

Cause No. 83 — a suspended call exists, but this call identify does not.
This cause indicates that a call resume has been attempted with a call identity which differs from that in use for any presently suspended call(s).

Cause No. 84 — call identity in use.
This cause indicates that the network has received a call suspended request containing a call identity (including the null call identity) which is already in use for a suspended call within the domain of interfaces over which the call might be resumed.

Cause No. 85 — no call suspended.
This cause indicates that the network has received a call resume request containing a call identity information element which presently does not indicate any suspended call within the domain of interfaces over which calls may be resumed.

Cause No. 86 — call having the requested call identity has been cleared.
This cause indicates that the network has received a call resume request containing a call identity information element indicating a suspended call that has in the meantime been cleared while suspended (either by network time-out or by the remote user).

Cause No. 87 — user not a member of CUG.
This cause indicates that the called user for the incoming CUG call is not a member of the specified CUG or that the calling user is an ordinary subscriber calling a CUG subscriber.

Cause No. 88 — incompatible destination.
This cause indicates that the equipment sending this cause has received a request to establish a call which has low layer compatibility. high layer compatibility or other compatibility attributes (e.g., data rate) which cannot be accommodated.
What it means:
This usually means that the Number To Dial in the Connection Profile is in the wrong format. You may need to dial a 10 or 11 digit number, or dial a 9 in front of the number if it is a Centrex line.
This problem may also give a Cause 111.
Dialing at the wrong line speed can also give this Cause.

Cause No. 90 — non-existent CUG.
This cause indicates that the specified CUG does not exist.

Cause No. 91 — invalid transit network selection (national use).
This cause indicates that a transit network identification was received which is of an incorrect format as defined in Annex C/Q.931

Cause No. 95 — invalid message, unspecified.
This cause is used to report an invalid message event only when no other cause in the invalid message class applies.

Cause No. 96 — mandatory information element is missing.
This cause indicates that the equipment sending this cause has received a message which is missing an information element which must be present in the message before that message can be processed.
What it means:
This is rarely seen in North America but usually means that the number that is being dialed is in the wrong format, (similar to cause 88). Some part of the format being used is not understood by either the remote side equipment or the switching equipment between the source and destination of the call.

Cause No. 97 — message type non-existent or not implemented.
This cause indicates that the equipment sending this cause has received a message with a message type it does not recognize either because this is a message not defined of defined but not implemented by the equipment sending this cause.

Cause No. 98 — message not compatible with call state or message type non-existent.
This cause indicates that the equipment sending this cause has received a message such that the procedures do not indicate that this is a permissible message to receive while in the call state, or a STATUS message was received indicating an incompatible call state.

Cause No. 99 — Information element / parameter non-existent or not implemented.
This cause indicates that the equipment sending this cause has received a message which includes information element(s)/parameter(s) not recognized because the information element(s)/parameter name(s) are not defined or are defined but not implemented by the equipment sending the cause. This cause indicates that the information element(s)/parameter(s) were discarded. However, the information element is not required to be present in the message in order for the equipment sending the cause to process the message.

Cause No. 100 — Invalid information element contents.
This cause indicates that the equipment sending this cause has received and information element which it has implemented; however, one or more of the fields in the information element are coded in such a way which has not been implemented by the equipment sending this cause.
What it means:
Like cause 1 and cause 88, this usually indicates that the ISDN number being dialed is in a format that is not understood by the equipment processing the call. SPIDs will sometimes fail to initialize with a Cause 100, or a call will fail with this cause.

Cause No. 101 — message not compatible with call state.
This cause indicates that a message has been received which is incompatible with the call state.

Cause No. 102 — recovery on timer expiry.
This cause indicates that a procedure has been initiated by the expiration of a timer in association with error handling procedures.
What it means:
his is seen in situations where ACO (Alternate Call Offering) is being used. With this type of call pre-emption, the Telco switch operates a timer. For example, when an analog call is placed to a Netopia router that has two B Data Channels in place, the router relinquishes the second channel, but if it doesn’t happen in the time allotted by the switch programming, the call will not ring through and will be discarded by the switch.

Cause No. 103 — parameter non-existent or not implemented — passed on (national use).
This cause indicates that the equipment sending this cause has received a message which includes parameters not recognized because the parameters are not defined or are defined but not implemented by the equipment sending this cause. The cause indicates that the parameter(s) were ignored. In addition, if the equipment sending this cause is an intermediate point, then this cause indicates that the parameter(s) were passed unchanged.

Cause No. 110 — message with unrecognized parameter discarded.
This cause indicates that the equipment sending this cause has discarded a received message which includes a parameter that is not recognized.

Cause No. 111 — protocol error, unspecified.
This cause is used to report a protocol error event only when no other cause in the protocol error class applies.

Cause No. 127 — Intel-working, unspecified.
This cause indicates that an interworking call (usually a call to 5W56 service) has ended.
Notes about Cause Codes over 128
Cause code values of 128 and higher aren’t sent over the network. A terminal displaying a value 128 or higher and claiming it is a cause code arguably has a bug or is implementing some proprietary diagnostic code (not necessarily bad). Some commendation has cause codes listed with numbers higher than 128, but at this time they are proprietary in nature.
The PRI equipment vendors are the most likely to use these codes as they have been using proprietary messages in the facilities data link for some time now (there is an as yet undefined area in the FDL which is big enough to carry small datagrams or messages). It is typically used to pass proprietary control or maintenance messages between multiplexers.

При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор: Панфилов Алексей (lehis (at) subnets.ru)

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

В продолжении статьи Настройка Cisco AS5350 в качестве VoIP-шлюза.

Имеем:

  • Cisco AS5350 (VoIP-шлюз)
  • Сервер FreeBSD с установленным freeradius

Прикручиваем RADIUS к AS5350 для сохранения информации о совершаемых VoIP-звонках. log voip calls, log ip voip calls

Основная задача это обеспечение возможности однозначного сопоставления IP-шной и TDM-ной частей (legs) VoIP-звонка, а также логирование IP-адресов, с которых производятся звонки через наш VoIP-шлюз, что по умолчанию не делается.

Я не буду подробно на этом останавливаться и просто приведу настройки Cisco в части акаутинга и radius:

aaa new-model
aaa authorization exec h323 group radius local
aaa authorization exec sip group radius local
aaa authorization network default group radius local
aaa authorization network h323 group radius local
aaa accounting delay-start
aaa accounting exec default start-stop group radius
aaa accounting exec h323 start-stop group radius
aaa accounting exec sip start-stop group radius
aaa accounting network default start-stop group radius
aaa accounting network h323 start-stop group radius
aaa accounting network sip start-stop group radius
aaa accounting connection h323 start-stop group radius
aaa accounting connection sip start-stop group radius
aaa nas port extended
aaa session-id common
gw-accounting aaa

ip radius source-interface FastEthernet0/0
radius-server host 1.1.1.2 auth-port 1812 acct-port 1813
radius-server timeout 30
radius-server key 7 10491D54261E210823493A2A373B
radius-server vsa send accounting

Обратите внимание на команду на VoIP-шлюзе Cisco:

radius-server vsa send accounting

Благодаря ей VoIP-шлюз будет передавать нужные нам атрибуты, определенные производителем (так называемые Vendor-Specific Attributes), а именно:

  • h323-incoming-conf-id — ID звонка
  • h323-remote-address — IP, с которого/на который был звонок
  • iphop — этот атрибут заполняется при исходящих из IP-сетей звонках количеством хопов до IP-адреса звонящего и их IP-адресами.

Увидеть что Cisco отдает Radius`у можно выполнив в её консоли команды:

terminal monitor
debug radius

Вот пример вывода:

RADIUS(000B0086): Send Accounting-Request to 1.1.1.2:1813 id 1646/229, len 1084
RADIUS:  authenticator 44 55 FD 7F DC D2 19 C3 - 3D 1B D2 B1 82 E6 C4 52
RADIUS:  Acct-Session-Id     [44]  10  "001069EA"
RADIUS:  Calling-Station-Id  [31]  9   "3332211"
RADIUS:  Called-Station-Id   [30]  13  "89259998877"
RADIUS:  Vendor, Cisco       [26]  66
RADIUS:   Cisco AVpair       [1]   60  "call-id=93FA01A7-1FD111E0-B101EAE7-244362EB@1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  21
RADIUS:   Cisco AVpair       [1]   15  "iphop=count:1"
RADIUS:  Vendor, Cisco       [26]  33
RADIUS:   Cisco AVpair       [1]   27  "iphop=hop1:1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  56
RADIUS:   h323-setup-time    [25]  50  "h323-setup-time=14:29:41.703 MSK Sat Jan 15 2011"
RADIUS:  Vendor, Cisco       [26]  28
RADIUS:   h323-gw-id         [33]  22  "h323-gw-id=as5350."
RADIUS:  Vendor, Cisco       [26]  56
RADIUS:   Conf-Id            [24]  50  "h323-conf-id=93F51D6D 1FD111E0 99AD0014 F26ABCA0"
RADIUS:  Vendor, Cisco       [26]  31
RADIUS:   h323-call-origin   [26]  25  "h323-call-origin=answer"
RADIUS:  Vendor, Cisco       [26]  27
RADIUS:   h323-call-type     [27]  21  "h323-call-type=VoIP"
RADIUS:  Vendor, Cisco       [26]  65
RADIUS:   Cisco AVpair       [1]   59  "h323-incoming-conf-id=93F51D6D 1FD111E0 99AD0014 F26ABCA0"
RADIUS:  Vendor, Cisco       [26]  26
RADIUS:   Cisco AVpair       [1]   20  "subscriber=Unknown"
RADIUS:  Vendor, Cisco       [26]  30
RADIUS:   Cisco AVpair       [1]   24  "session-protocol=sipv2"
RADIUS:  Vendor, Cisco       [26]  44
RADIUS:   Cisco AVpair       [1]   38  "gw-rxd-cdn=ton:0,npi:0,#:89259998877"
RADIUS:  Vendor, Cisco       [26]  148
RADIUS:   Cisco AVpair       [1]   142 "feature-vsa=fn:TWC,ft:01/15/2011 14:29:41.703,cgn:3803234,cdn:89259998877,frs:0,fid:730309,fcid:93F51D6D1FD111E099AD0014F26ABCA0,legID:B3920"
RADIUS:  Vendor, Cisco       [26]  58
RADIUS:   h323-connect-time  [28]  52  "h323-connect-time=14:29:52.352 MSK Sat Jan 15 2011"
RADIUS:  Acct-Input-Octets   [42]  6   144960
RADIUS:  Acct-Output-Octets  [43]  6   167360
RADIUS:  Acct-Input-Packets  [47]  6   906
RADIUS:  Acct-Output-Packets [48]  6   1046
RADIUS:  Acct-Session-Time   [46]  6   18
RADIUS:  Vendor, Cisco       [26]  61
RADIUS:   h323-disconnect-tim[29]  55  "h323-disconnect-time=14:30:10.517 MSK Sat Jan 15 2011"
RADIUS:  Vendor, Cisco       [26]  32
RADIUS:   h323-disconnect-cau[30]  26  "h323-disconnect-cause=10"
RADIUS:  Vendor, Cisco       [26]  42
RADIUS:   h323-remote-address[23]  36  "h323-remote-address=1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  24
RADIUS:   Cisco AVpair       [1]   18  "release-source=3"
RADIUS:  Vendor, Cisco       [26]  28
RADIUS:   h323-voice-quality [31]  22  "h323-voice-quality=0"
RADIUS:  Vendor, Cisco       [26]  43
RADIUS:   Cisco AVpair       [1]   37  "remote-media-address=1.1.1.194"
RADIUS:  Vendor, Cisco       [26]  50
RADIUS:   Cisco AVpair       [1]   44  "gw-rxd-cgn=ton:0,npi:0,pi:0,si:0,#:3332211"
RADIUS:  User-Name           [1]   9   "3332211"
RADIUS:  Acct-Status-Type    [40]  6   Stop                      [2]
RADIUS:  Service-Type        [6]   6   Login                     [1]
RADIUS:  NAS-IP-Address      [4]   6   1.1.1.3
RADIUS:  Acct-Delay-Time     [41]  6   0
RADIUS: Received from id 1646/229 1.1.1.2:1813, Accounting-response, len 20

Что ж, для решения основной поставленной перед нами задачи достаточно выполнить следующее:
в /usr/local/etc/raddb/radiusd.conf в секции preprocess указать, что нам нужно преобразовывать VSA :

preprocess {
       with_cisco_vsa_hack = yes
}

Radius разбирает Vendor-Specific Attributes благодаря словарям, которые расположены в папке /usr/local/share/freeradius, в частности файл-словарь по cisco.

dictionary.cisco:

VENDOR          Cisco                           9

#
#       Standard attribute
#
BEGIN-VENDOR    Cisco

ATTRIBUTE       Cisco-AVPair                            1       string
ATTRIBUTE       Cisco-NAS-Port                          2       string

#
#  T.37 Store-and-Forward attributes.
#
ATTRIBUTE       Cisco-Fax-Account-Id-Origin             3       string
ATTRIBUTE       Cisco-Fax-Msg-Id                        4       string
ATTRIBUTE       Cisco-Fax-Pages                         5       string
ATTRIBUTE       Cisco-Fax-Coverpage-Flag                6       string
ATTRIBUTE       Cisco-Fax-Modem-Time                    7       string
ATTRIBUTE       Cisco-Fax-Connect-Speed                 8       string
ATTRIBUTE       Cisco-Fax-Recipient-Count               9       string
ATTRIBUTE       Cisco-Fax-Process-Abort-Flag            10      string
ATTRIBUTE       Cisco-Fax-Dsn-Address                   11      string
ATTRIBUTE       Cisco-Fax-Dsn-Flag                      12      string
ATTRIBUTE       Cisco-Fax-Mdn-Address                   13      string
ATTRIBUTE       Cisco-Fax-Mdn-Flag                      14      string
ATTRIBUTE       Cisco-Fax-Auth-Status                   15      string
ATTRIBUTE       Cisco-Email-Server-Address              16      string
ATTRIBUTE       Cisco-Email-Server-Ack-Flag             17      string
ATTRIBUTE       Cisco-Gateway-Id                        18      string
ATTRIBUTE       Cisco-Call-Type                         19      string
ATTRIBUTE       Cisco-Port-Used                         20      string
ATTRIBUTE       Cisco-Abort-Cause                       21      string

#
#  Voice over IP attributes.
#
ATTRIBUTE       h323-remote-address                     23      string
ATTRIBUTE       h323-conf-id                            24      string
ATTRIBUTE       h323-setup-time                         25      string
ATTRIBUTE       h323-call-origin                        26      string
ATTRIBUTE       h323-call-type                          27      string
ATTRIBUTE       h323-connect-time                       28      string
ATTRIBUTE       h323-disconnect-time                    29      string
ATTRIBUTE       h323-disconnect-cause                   30      string
ATTRIBUTE       h323-voice-quality                      31      string
ATTRIBUTE       h323-gw-id                              33      string
ATTRIBUTE       h323-incoming-conf-id                   35      string

ATTRIBUTE       h323-credit-amount                      101     string
ATTRIBUTE       h323-credit-time                        102     string
ATTRIBUTE       h323-return-code                        103     string
ATTRIBUTE       h323-prompt-id                          104     string
ATTRIBUTE       h323-time-and-day                       105     string
ATTRIBUTE       h323-redirect-number                    106     string
ATTRIBUTE       h323-preferred-lang                     107     string
ATTRIBUTE       h323-redirect-ip-address                108     string
ATTRIBUTE       h323-billing-model                      109     string
ATTRIBUTE       h323-currency                           110     string
ATTRIBUTE       subscriber                              111     string
ATTRIBUTE       gw-rxd-cdn                              112     string
ATTRIBUTE       gw-final-xlated-cdn                     113     string
ATTRIBUTE       remote-media-address                    114     string
ATTRIBUTE       release-source                          115     string
ATTRIBUTE       gw-rxd-cgn                              116     string
ATTRIBUTE       gw-final-xlated-cgn                     117     string
ATTRIBUTE       iphop                                   118     string

# SIP Attributes
ATTRIBUTE       call-id                                 141     string
ATTRIBUTE       session-protocol                        142     string
ATTRIBUTE       method                                  143     string
ATTRIBUTE       prev-hop-via                            144     string
ATTRIBUTE       prev-hop-ip                             145     string
ATTRIBUTE       incoming-req-uri                        146     string
ATTRIBUTE       outgoing-req-uri                        147     string
ATTRIBUTE       next-hop-ip                             148     string
ATTRIBUTE       next-hop-dn                             149     string
ATTRIBUTE       sip-hdr                                 150     string

#
#       Extra attributes sent by the Cisco, if you configure
#       "radius-server vsa accounting" (requires IOS11.2+).
#
ATTRIBUTE       Cisco-Multilink-ID                      187     integer
ATTRIBUTE       Cisco-Num-In-Multilink                  188     integer
ATTRIBUTE       Cisco-Pre-Input-Octets                  190     integer
ATTRIBUTE       Cisco-Pre-Output-Octets                 191     integer
ATTRIBUTE       Cisco-Pre-Input-Packets                 192     integer
ATTRIBUTE       Cisco-Pre-Output-Packets                193     integer
ATTRIBUTE       Cisco-Maximum-Time                      194     integer
ATTRIBUTE       Cisco-Disconnect-Cause                  195     integer
ATTRIBUTE       Cisco-Data-Rate                         197     integer
ATTRIBUTE       Cisco-PreSession-Time                   198     integer
ATTRIBUTE       Cisco-PW-Lifetime                       208     integer
ATTRIBUTE       Cisco-IP-Direct                         209     integer
ATTRIBUTE       Cisco-PPP-VJ-Slot-Comp                  210     integer
ATTRIBUTE       Cisco-PPP-Async-Map                     212     integer
ATTRIBUTE       Cisco-IP-Pool-Definition                217     string
ATTRIBUTE       Cisco-Assign-IP-Pool                    218     integer
ATTRIBUTE       Cisco-Route-IP                          228     integer
ATTRIBUTE       Cisco-Link-Compression                  233     integer
ATTRIBUTE       Cisco-Target-Util                       234     integer
ATTRIBUTE       Cisco-Maximum-Channels                  235     integer
ATTRIBUTE       Cisco-Data-Filter                       242     integer
ATTRIBUTE       Cisco-Call-Filter                       243     integer
ATTRIBUTE       Cisco-Idle-Limit                        244     integer
ATTRIBUTE       Cisco-Account-Info                      250     string
ATTRIBUTE       Cisco-Service-Info                      251     string
ATTRIBUTE       Cisco-Command-Code                      252     string
ATTRIBUTE       Cisco-Control-Info                      253     string
ATTRIBUTE       Cisco-Xmit-Rate                         255     integer

VALUE   Cisco-Disconnect-Cause          Unknown                 2
VALUE   Cisco-Disconnect-Cause          CLID-Authentication-Failure 4
VALUE   Cisco-Disconnect-Cause          No-Carrier              10
VALUE   Cisco-Disconnect-Cause          Lost-Carrier            11
VALUE   Cisco-Disconnect-Cause          No-Detected-Result-Codes 12
VALUE   Cisco-Disconnect-Cause          User-Ends-Session       20
VALUE   Cisco-Disconnect-Cause          Idle-Timeout            21
VALUE   Cisco-Disconnect-Cause          Exit-Telnet-Session     22
VALUE   Cisco-Disconnect-Cause          No-Remote-IP-Addr       23
VALUE   Cisco-Disconnect-Cause          Exit-Raw-TCP            24
VALUE   Cisco-Disconnect-Cause          Password-Fail           25
VALUE   Cisco-Disconnect-Cause          Raw-TCP-Disabled        26
VALUE   Cisco-Disconnect-Cause          Control-C-Detected      27
VALUE   Cisco-Disconnect-Cause          EXEC-Program-Destroyed  28
VALUE   Cisco-Disconnect-Cause          Timeout-PPP-LCP         40
VALUE   Cisco-Disconnect-Cause          Failed-PPP-LCP-Negotiation 41
VALUE   Cisco-Disconnect-Cause          Failed-PPP-PAP-Auth-Fail 42
VALUE   Cisco-Disconnect-Cause          Failed-PPP-CHAP-Auth    43
VALUE   Cisco-Disconnect-Cause          Failed-PPP-Remote-Auth  44
VALUE   Cisco-Disconnect-Cause          PPP-Remote-Terminate    45
VALUE   Cisco-Disconnect-Cause          PPP-Closed-Event        46
VALUE   Cisco-Disconnect-Cause          Session-Timeout         100
VALUE   Cisco-Disconnect-Cause          Session-Failed-Security 101
VALUE   Cisco-Disconnect-Cause          Session-End-Callback    102
VALUE   Cisco-Disconnect-Cause          Invalid-Protocol        120

END-VENDOR      Cisco

Далее, будем формировать уникальный ID звнока в виде MD5 хэша на основании атрибута h323-incoming-conf-id:

acct_unique {
       key = "h323-incoming-conf-id"
}

Однозначние сопоставление IP-шной и TDM-ной частей (legs) VoIP-звонка возможно по полю AcctUniqueId таблицы radacct — оно будет у них одинаковым.

Далее, указываем, что перед аккаунтингом следует данные преобразовать (с использованием словарей):

preacct {
     preprocess
     acct_unique
}

Теперь в /usr/local/etc/raddb/sql.conf мы можем использовать полученные нами данные, которые содержатся в переменных, которые, в свою очередь, определяются в словаре (/usr/local/share/freeradius/dictionary.cisco):

%{h323-remote-address} — в этой переменной содержится IP, с которого/на который был звонок.

Все бы хорошо, но у атрибута iphop есть одна тонкость — он может содержать множественные значения, например:

iphop=count:2
iphop=hop1:192.168.68.4
iphop=hop2:10.10.255.7

и если в sql.conf использовать переменную %{iphop}, то в нее будет попадать только первая строка iphop=count.

Это решаемая проблема. Если атрибут содержит множественные значения, то к ним возможно обращаться как к массиву.

В нашем примере:

  • %{iphop[0]} — будет содержать значение «count:2»
  • %{iphop[1]} — будет содержаться «hop1:192.168.68.4»
  • %{iphop[2]} — будет «iphop=hop2:10.10.255.7»

Добавив в таблицу radacct поля:

  • remote-address
  • hopcount
  • hop1
  • hop2

можно добавить их в SQL запрос в sql.conf:

accounting_stop_query = "UPDATE ${acct_table2} SET AcctStopTime = '%S', \
AcctSessionTime = '%{Acct-Session-Time}', \
AcctInputOctets = '%{Acct-Input-Octets}', \
AcctOutputOctets = '%{Acct-Output-Octets}', \
AcctTerminateCause = '%{h323-disconnect-cause}', \
AcctStopDelay = '%{Acct-Delay-Time}', \
ConnectInfo_stop ='%{Connect-Info}', \
`remote-address`='%{h323-remote-address}', \
`hopcount`='%{iphop[0]}', \
`hop1`='%{iphop[1]}', \
`hop2`='%{iphop[2]}' \
WHERE AcctSessionId = '%{Acct-Session-Id}' \
AND UserName = '%{SQL-User-Name}' \
AND NASIPAddress = '%{NAS-IP-Address}'"

По итогу таблица radacct выглядит так:

CREATE TABLE IF NOT EXISTS `radacct` (
  `RadAcctId` bigint(21) NOT NULL auto_increment,
  `AcctSessionId` varchar(32) NOT NULL default '',
  `AcctUniqueId` varchar(32) NOT NULL default '',
  `UserName` varchar(64) NOT NULL default '',
  `Realm` varchar(64) default '',
  `NASIPAddress` varchar(15) NOT NULL default '',
  `NASPortId` varchar(15) default NULL,
  `NASPortType` varchar(32) default NULL,
  `AcctStartTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `AcctStopTime` datetime NOT NULL default '0000-00-00 00:00:00',
  `AcctSessionTime` int(12) default NULL,
  `AcctAuthentic` varchar(32) default NULL,
  `ConnectInfo_start` varchar(50) default NULL,
  `ConnectInfo_stop` varchar(50) default NULL,
  `AcctInputOctets` bigint(12) default NULL,
  `AcctOutputOctets` bigint(12) default NULL,
  `CalledStationId` varchar(50) NOT NULL default '',
  `CallingStationId` varchar(50) NOT NULL default '',
  `AcctTerminateCause` varchar(32) NOT NULL default '',
  `ServiceType` varchar(32) default NULL,
  `FramedProtocol` varchar(32) default NULL,
  `FramedIPAddress` varchar(15) NOT NULL default '',
  `AcctStartDelay` int(12) default NULL,
  `AcctStopDelay` int(12) default NULL,
  `proc` smallint(1) NOT NULL default '0',
  `remote-address` varchar(15) NOT NULL default '',
  `hopcount` varchar(16) default NULL,
  `hop1` varchar(20) default NULL,
  `hop2` varchar(20) default NULL,
  PRIMARY KEY  (`RadAcctId`),
  KEY `UserName` (`UserName`),
  KEY `FramedIPAddress` (`FramedIPAddress`),
  KEY `AcctSessionId` (`AcctSessionId`),
  KEY `AcctUniqueId` (`AcctUniqueId`),
  KEY `AcctStartTime` (`AcctStartTime`),
  KEY `AcctStopTime` (`AcctStopTime`),
  KEY `NASIPAddress` (`NASIPAddress`),
  KEY `import` (`NASPortType`,`AcctSessionTime`,`AcctStartTime`),
  KEY `proc` (`NASPortType`,`proc`,`AcctSessionTime`)
) TYPE=MyISAM;

Таким образом мы получаем, что в sql складывается информация о совершенных VoIP звонках и с каких IP-адресов они совершены.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.

Автор: Панфилов Алексей (lehis (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 3, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту