Подключение к FREERADIUS. Часть 2
- Подключение к FREERADIUS. Часть 1
- Насторойка М-200
- Подключение к FREERADIUS. Часть 2
- Насторойка FREERADIUS
- Подключение к FREERADIUS. Часть 3
- Авторизация
- Подключение к FREERADIUS. Часть 4
- Маршрутизация
Теперь настроим сам freeradius. Я не ставлю задачи разобраться со всеми возможностями сервера и настраивать буду только самый необходимый минимум, чтобы связка м-200 - freeradius заработала.
Для начала нужно создать подключение для callbuilder. В файл clients.conf добавить:
client m-200 { ipaddr = 127.0.0.1 secret = testing123 nastype = other }
Думаю очевидно, что пароль calbuider-а и здесь должны совпадать. ipaddr - адрес callbuider-а.
Далее необходимо обеспечить проверку пользователей. Freeradius позволяет делать это разными путями и для начала используем самый простой и "тупой" - через текстовый файл.
В файл radiusd.conf добавляем:
authorize { preprocess files }
В файле users создаем пользователя 904:
904 Auth-Type := accept h323-credit-time = "h323-credit-time=1000"
- М-200 не использует пароль для авторизации, так что необходимо указать Auth-Type := accept.
- h323-credit-time = "h323-credit-time=1000" - это разрешенное время разговора. Передаваться оно должно именно в таком формате (AV Pair).
- freeradius "съел" запись о пользователе только в таком виде - h323-credit-time на новой стороке и обязательно с пробелом впереди. Наверное это так и надо)
Перезапускаем freeradius, проверяем:
# radtest 904 password 127.0.0.1 0 testing123 Sending Access-Request of id 54 to 127.0.0.1 port 1812 User-Name = "904" User-Password = "password" NAS-IP-Address = 127.0.0.1 NAS-Port = 0 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=54, length=20 #
Если все правильно, то получаем Access-Accept.
Теперь тестовый звонок.
Терминал М-200 (у меня коммутатор и МАЛ, так что 2 терминала):
Коммутатор: SEIZ EXT<SIP>(904)$ CALL EXT<SIP>(904)$:6157 -> CallAuth_in(770:9)$:6205 [904,407] SEIZ CallAuth_out(1538:9)$ CALL CallAuth_out(1538:9)$:6206 -> INT_IP(769/14)$:6132 [904,407] RLSI EXT<SIP>(904)$:CV:16 RLSO CallAuth_in(770:9)$ RLSI CallAuth_out(1538:9)$:CV:16 RLSO INT_IP(769/14)$ МАЛ: SEIZ INT_IP(772/14)$ CALL INT_IP(772/14)$:779 -> SUB(407/1/8)$:60 [904,407] RLSI INT_IP(772/14)$:CV:16 RLSO SUB(407/1/8)$
Файл /ATS/TARIF_LOG/callbuilder.log
[03-04-2013 13:24:21] Auth radius pr: send: sid: 1364981061-872532 h323-conf-id=1364981061-872532 [03-04-2013 13:24:21] Auth radius pr: send: sid: 1364981061-872532 904 [03-04-2013 13:24:21] Auth radius pr: send: sid: 1364981061-872532 904 [03-04-2013 13:24:21] Auth radius pr: send: sid: 1364981061-872532 h323-gw-id=904 [03-04-2013 13:24:21] Auth radius pr: send: sid: 1364981061-872532 407 [03-04-2013 13:24:21] Auth radius pr: Auth OK: sid: 1364981061-872532 h323-credit-time=1000 [03-04-2013 13:24:21] Auth radius pr: Auth OK: 904 -> 407 time=1000 [03-04-2013 13:24:21] AuthRadiusPrepayAnswer: unipar len=78 module=127 port_id=6205 credit_time=1000
Если freeradius запускать не демоном, а командой radiusd -X, то можно увидеть, что у него внутри твориться:
rad_recv: Access-Request packet from host 127.0.0.1 port 36070, id=109, length=113 Service-Type = Login-User h323-conf-id = "h323-conf-id=1364981061-872532" User-Name = "904" Calling-Station-Id = "904" h323-gw-id = "h323-gw-id=904" Called-Station-Id = "407" NAS-Port = 0 NAS-IP-Address = 127.0.0.1 +- entering group authorize {...} ++[preprocess] returns ok [files] users: Matched entry 904 at line 24 ++[files] returns ok Found Auth-Type = Accept Auth-Type = Accept, accepting the user Login OK: [904/<via Auth-Type = accept>] (from client m-200 port 0 cli 904) +- entering group post-auth {...} ++[exec] returns noop Sending Access-Accept of id 109 to 127.0.0.1 port 36070 h323-credit-time = "h323-credit-time=123" Finished request 1. Going to the next request Waking up in 4.9 seconds. Cleaning up request 1 ID 109 with timestamp +533 Ready to process requests.
Теперь, чтобы убедиться, что все работает, проверим запрет.
В файле users изменим:
914 Auth-Type := accept h323-credit-time = "h323-credit-time=0"
Перезапускаем freeradius, проверяем:
SEIZ EXT<SIP>(904)$ CALL EXT<SIP>(904)$:6157 -> CallAuth_in(770:8)$:6203 [904,407] RLSI CallAuth_in(770:8)$:CV:21 RLSO EXT<SIP>(904)$
Как видно, вызов от абонента 904 не прошел авторизацию.
Использовать файл users конечно можно, но это как минимум неудобно. Freeradius предлагает разные пути проверки пользователей и мне, например, нравится вариант использования модуля RLM_PERL - это встроенный PERL интерпретатор. Об этом в третьей части.
Настройка авторизации с помощью модуля perl в третей части.