суббота, 13 июня 2015 г.

Настройка FREERADIUS для приемки аккаутинговой информации от станции ELTEX SMG-2016M

1. Готовим БД MySQL для принятия аккаунтинговой информации:

1.1. Подключаемся к клиенту MySQL
# mysql -u root -p

1.2 Создаем пользователя radiususer c паролем 12345

1.3 Создаем базу данных radius

1.4 Даем пользователю radiususer право распоряжаться базой radius

1.5 Создаем таблицу redacct
mysql> use radius
mysql> CREATE TABLE IF NOT EXISTS `radacct` (
  `radacctid` bigint(21) NOT NULL AUTO_INCREMENT,
  `acctsessionid` varchar(64) NOT NULL DEFAULT '',
  `username` varchar(50) NOT NULL,
  `h323callorigin` varchar(50) NOT NULL,
  `nasipaddress` varchar(15) NOT NULL DEFAULT '',
  `acctstarttime` datetime DEFAULT NULL,
  `acctstoptime` datetime DEFAULT NULL,
  `acctsessiontime` int(12) DEFAULT NULL,
  `calledstationid` varchar(50) NOT NULL DEFAULT '',
  `callingstationid` varchar(50) NOT NULL,
  `nasportid` varchar(25) NOT NULL,
  `nasporttype` varchar(25) NOT NULL,
  `CiscoNASPort` varchar(30) NOT NULL,
  `h323calltype` varchar(30) NOT NULL,
  `EventTimestamp` varchar(30) NOT NULL,
  `AcctStatusType` varchar(10) NOT NULL,
  `currentimeserver` datetime NOT NULL,
  `h323disconnectcause` varchar(3) NOT NULL,
  `AcctDelayTime` int(5) NOT NULL,
  `h323gwid` varchar(20) NOT NULL,
  `xpgkrouteretries` varchar(5) NOT NULL,
  `h323remoteid` varchar(50) NOT NULL,
  `xpgklocaldisconnectcause` int(3) NOT NULL,
  `xpgksrcnumberin` varchar(50) NOT NULL,
  `xpgksrcnumberout` varchar(50) NOT NULL,
  `xpgkdstnumberin` varchar(50) NOT NULL,
  `xpgkdstnumberout` varchar(50) NOT NULL,
  `node` varchar(16) NOT NULL,
  `OutgoingRTPlocaladdress` varchar(15) NOT NULL,
  `OutgoingRTPremoteaddress` varchar(15) NOT NULL,
  PRIMARY KEY (`radacctid`),
  KEY `username` (`username`),
  KEY `acctstarttime` (`acctstarttime`),
  KEY `acctstoptime` (`acctstoptime`),
  KEY `calledstationid` (`calledstationid`),
  KEY `callingstationid` (`callingstationid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
mysql> exit

2. Настраиваем FREERADIUS

2.1 Настраиваем FREERADIUS для работы с БД MySQL

В файле /etc/raddb/radiusd.conf
раскоментируем строчку
    $INCLUDE sql.conf

В файле /etc/raddb/sites-available/default
в секции accounting {…} раскомментируем модуль sql
    #  See "Accounting queries" in sql.conf
    sql
в секции session {…} так же раскоментируем модуль sql
    # See "Simultaneous Use Checking Queries" in sql.conf
    sql

В файле /etc/raddb/sql.conf
проверяем, что в секции sql{…} прописаны правильные имя пользователя и пароль для БД MySQL, 
а так же задана правильная таблица radacct.
sql {
...
        login = "radius"
        password = "12345"
...
        radius_db = "radius"
...
        acct_table1 = "radacct"
        acct_table2 = "radacct"
...
}

2.2 Учим FREERADIUS работать с атрибутами Cisco AV-Pair, передачаемые от станции ELTEX SMG-2016
В файле /etc/raddb/modules/preprocess устанавливаем директиву with_cisco_vsa_hack в yes (по умолчанию no)
    with_cisco_vsa_hack = yes

в файл словаря /usr/share/freeradius/dictionary.cisco
добавил в конец раздела # SIP Attributes (после 150-ого атрибута)
ATTRIBUTE       xpgk-route-retries           171     string
ATTRIBUTE       h323-remote-id               172     string
ATTRIBUTE       xpgk-local-disconnect-cause  173     string
ATTRIBUTE       xpgk-src-number-in           174     string
ATTRIBUTE       xpgk-src-number-out          175     string
ATTRIBUTE       xpgk-dst-number-in           176     string
ATTRIBUTE       xpgk-dst-number-out          177     string

2.3 Определяем запросы по вставке информации в БД MySQL

Делаем резервную копию файла
cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup-save.conf

Затем вносим в файл /etc/raddb/sql/mysql/dialup.conf изменения
Раздел Accounting Queries приводим к виду:
        #######################################################################
        #  Accounting Queries
        #######################################################################
        accounting_stop_query = " \
          INSERT INTO ${acct_table1} \
            (acctsessionid, \
             username, \
             nasipaddress, nasportid, nasporttype,\
             acctstarttime, \
             acctstoptime, \
             acctsessiontime, \
             calledstationid,   callingstationid, \
             h323callorigin, CiscoNASPort, h323calltype, EventTimestamp, \
             AcctStatusType, \
             currentimeserver, h323disconnectcause, \
             AcctDelayTime, h323gwid, xpgkrouteretries, \
             h323remoteid, xpgklocaldisconnectcause, \
             xpgksrcnumberin, xpgksrcnumberout, xpgkdstnumberin, xpgkdstnumberout, node,\
             OutgoingRTPlocaladdress, OutgoingRTPremoteaddress) \
          VALUES \
            ('%{Acct-Session-Id}', \
             '%{User-Name}', \
             '%{NAS-IP-Address}', '%{NAS-Port}', '%{NAS-Port-Type}', \
               CONCAT(SUBSTRING('%{h323-setup-time}',33, 4),'-',\
                case SUBSTRING('%{h323-setup-time}',26, 3) \
                        when \'Jan\' then \'01\' \
                        when \'Feb\' then \'02\' \
                        when \'Mar\' then \'03\' \
                        when \'Apr\' then \'04\' \
                        when \'May\' then \'05\' \
                        when \'Jun\' then \'06\' \
                        when \'Jul\' then \'07\' \
                        when \'Aug\' then \'08\' \
                        when \'Sep\' then \'09\' \
                        when \'Oct\' then \'10\' \
                        when \'Nov\' then \'11\' \
                        when \'Dec\' then \'12\' end,\
                '-',SUBSTRING('%{h323-setup-time}',30,2),\
                ' ',SUBSTRING_INDEX('%{h323-setup-time}', ':', 2),SUBSTRING('%{h323-setup-time}',6, 3)),  \
               CONCAT(SUBSTRING('%{h323-disconnect-time}',33, 4),'-',\
                case SUBSTRING('%{h323-disconnect-time}',26, 3) \
                       when \'Jan\' then \'01\' \
                        when \'Feb\' then \'02\' \
                        when \'Mar\' then \'03\' \
                        when \'Apr\' then \'04\' \
                        when \'Maj\' then \'05\' \
                        when \'Jun\' then \'06\' \
                        when \'Yul\' then \'07\' \
                        when \'Aug\' then \'08\' \
                        when \'Sep\' then \'09\' \
                        when \'Oct\' then \'10\' \
                        when \'Nov\' then \'11\' \
                        when \'Dec\' then \'12\' end,\
                '-',SUBSTRING('%{h323-disconnect-time}',30,2),\
                ' ',SUBSTRING_INDEX('%{h323-disconnect-time}', ':', 2),SUBSTRING('%{h323-disconnect-time}',6, 3)), \
             '%{Acct-Session-Time}', \
             '%{Called-Station-Id}', '%{Calling-Station-Id}', \
             '%{h323-call-origin}', '%{Cisco-NAS-Port}', '%{h323-call-type}', '%{Event-Timestamp}', \
             '%{Acct-Status-Type}', \
             '%S', '%{h323-disconnect-cause}', \
             '%{Acct-Delay-Time}', '%{h323-gw-id}', '%{xpgk-route-retries}', \
             '%{h323-remote-id}', '%{xpgk-local-disconnect-cause}', \
             '%{xpgk-src-number-in}', '%{xpgk-src-number-out}', '%{xpgk-dst-number-in}', '%{xpgk-dst-number-out}', 'UFA-SMG2', \
             '%{Outgoing-RTP-local-address}', '%{Outgoing-RTP-remote-address}')"

Здесь UFA-SMG2 - это имя устройства
 
2.4 Разрешаем серверу FREERADIUS работать со станцией SMG-2016 с ip адресом 10.207.32.5 и с radius-секретом smg
В файле /etc/raddb/clients.conf
client 10.207.32.5 {
        ipaddr = 10.207.32.5
        secret = smg
}

 
2.5 Рестартуем RADIUS
# service radiusd restart

Теперь, если станция ELTEX будет отправлять аккаутинговые пакеты, RADIUS их примет и сложит в БД MySQL  

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

Отправить комментарий