BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 28 апр 2024, 04:10

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: 27 мар 2017, 19:04 
Не в сети

Зарегистрирован: 20 мар 2017, 14:10
Сообщения: 440
Карма: 0
Добрый день
У нас есть физические и юридические лица, для юрлиц тарифы в несколько раз выше естественно, поэтому некоторые люди используют логин и пароль для физ лица на предприятии.
Мы бы хотели, чтобы порты коммутаторов доступа можно было бы привязывать абонентов к определённому порту коммутатора, чтобы нельзя было выйти логином физ лица с коммутатора, где могут быть только юрлица! Речь идеть только про PPPoE по RADIUS. никаких netflow.

Абонента подключает монтажник, настраивает роутер, роутер подключается используя логин и пароль
Биллинг через атрибуты RADIUS узнает с какого коммутатора и порта подключен новый абонент и привязывает абонента к порту коммутатора
Оператор может изменить привязку в случае переезда абонента на другой адрес, выбрав новое значение коммутатора и абонентского порта из справочника.
Скажите пожалуйста, реализован ли такой функционал?
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 мар 2017, 19:25 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Одновременного поиска по логину и по порту сейчас нет - либо то, либо это.
В том числе потому, что для PPPoE по логину обычно не заводят в дереве коммутаторов, а только NAS'ы.

Как вариант, можно использовать поле Идентификатор
https://docs.bitel.ru/pages/viewpage.action?pageId=73597961&src=search#id-Процессорru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor-MAC-адресиидентификатор
Только нужно будет его в предобработке RADIUS-пакетов проставлять (вытащить значение из атрибута и положить по специальному ключу request.setOption( InetRadiusProcessor.IDENTIFIER, myIdentifier )):
Код:
Pattern identifierPattern = Pattern.compile( "(.+) vlan-id (\\d+)" );
 
String nasPortId = request.getStringAttribute( -1, 87, null );
if( nasPortId != null )
{
  Matcher m = identifierPattern.matcher( nasPortId );
  if( m.find() )
  {
    String identifier = m.group( 2 );
    request.setOption( InetRadiusProcessor.IDENTIFIER, identifier );
  }
}


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 11:36 
Не в сети

Зарегистрирован: 20 мар 2017, 14:10
Сообщения: 440
Карма: 0
Нужен именно справочник, причем с точностью до порта, иначе где в интерфейсе осуществлять привязку?
От NAS прихоидит Calling-Station-Id=28:D2:44:A6:C3:FA::10.3.2.6::3 (MAC абонента::IP коммутатора::порт коммутатора)
Нужно иметь возможность в любой момент выбрать новые данные для привязки.
Что можно придумать?
Я пока вижу два способа:
1) Создавать объект, в котором в параметрах определять IP и порт. Определив предварительно списочные параметры объектов - список всех IP коммутаторов и список портов (1-48).
Привязать логин к объекту. Получится ли потом в каком-нибудь сервис-активаторе вытащить эти данные и сверив с Calling-Station-Id принимать решение пускать не пускать?

2) Определить в дереве устройств отдельную папку, вбить в нее все коммутаторы, в параметрах каждого устройства определив его IP, привязывать сервис к этому устройству, ну а порт определять например в идентификаторе. Получится ли так на этапе активации определить IP устройства к которому привязан сервис и его порт содержащийся в идентификаторе?
Кстати что это за идентификатор? Это просто поле в которое можно поместить любое значение для сервиса, а потом его на этапе активации или обработки достать и посмотреть?
Для чего предполагается его использовать? Я бы с удовольствием обратился бы с этим вопросом к документации, по каким-то досадным и нелепым причинам, описание этого параметра сервиса я в руководстве не нашел. https://docs.bitel.ru/pages/viewpage.action?pageId=73598076. На скришоте он есть, но задокументировать его поленились. Наверное пятница была, очень хотелось побыстрее свалить домой и попить пивка.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 13:06 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Можно было бы сделать так, заводится тип сервиса в котором поставить галочку напротив логина, устройства и порта и mac. Заводится сервис с этими параметрами(устройство, порт, mac, логин, пароль).

Потом пишется скрипт обработчика протокола, который на основе вашей строки Calling-Station-Id проставит нужны опции AGENT_REMOTE_ID, AGENT_CIRCUIT_ID, MAC_ADDRESS. И проставляется radius.servSearchMode одним из этих значений:
https://docs.bitel.ru/pages/viewpage.ac ... d=73597961
Цитата:
0 - поиск по логину из атрибута User-Name;
1 - поиск по интерфейсу на (найденном) устройстве;
2 - поиск по VLAN'у на устройстве (в предобработке должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID);
4 - поиск по VLAN'у на устройстве и его дочерних устройствах (в предобработке должны быть проставлены опции AGENT_REMOTE_ID и AGENT_CIRCUIT_ID или VLAN_ID);
5 - поиск по MAC-адресу на устройстве (в предобработке должна быть проставлена опция MAC_ADDRESS);
6 - поиск по MAC-адресу на устройстве и дочерних устройствах (в предобработке должна быть проставлена опция MAC_ADDRESS);
7 - поиск по адресу, указанному в User-Name, из диапазона адресов сервиса (в типе сервиса должно быть указано serv.search.address=1);
9 - поиск по адресу, указанному в User-Name, из диапазона адресов сервиса (в типе сервиса должно быть указано serv.search.address=1) на агентских (дочерних) устройствах;
10 - поиск по MAC-адресу на всех устройствах.


Есть там еще один режим( доработали буквально на днях по заказу одного из клиентов), в документации пока нет
Цитата:
13 - поиск по MAC-адресу на устройстве и интерфейсе(в предобработке должна быть проставлена опция MAC_ADDRESS, AGENT_REMOTE_ID и AGENT_CIRCUIT_ID );


В этом случае он найдет по идее сервис по этим параметрам и после этого вроде проверит User-Name и пароль . Если абонент выйдет с другого адреса или Mac, то сервис не найдет и его не пустит. Тут вопрос а нужно ли вам привязка mac ? Если нет, то можно его выкинуть,оставить только устройство и порт.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 13:22 
Не в сети

Зарегистрирован: 20 мар 2017, 14:10
Сообщения: 440
Карма: 0
MAC не нужен.
То есть это вариант 2?
1) Сначала завести все коммутаторы в отдельной папке в дереве устройств.
2) На этапе создания сервиса определить устройство и интерфейс.
3) Какие именно опции скрипт должен проставить для устройства и мака? AGENT_REMOTE_ID, AGENT_CIRCUIT_ID ?
4) Какой именно тип поиска выбрать, если мак не нужен? 1 - поиск по интерфейсу на (найденном) устройстве ? Что будет если у сервиса не будет скажем привязки к порту? Пустит или не пустит? Иногда же хочется определить сервисы для которых не должны действовать эти ограничения.
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 16:45 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Цитата:
Нужен именно справочник, причем с точностью до порта, иначе где в интерфейсе осуществлять привязку?

По ссылке там описано, что идентификатор в сервис подставляется автоматически, в следующий раз когда он будет подключаться - будет идти проверка идентификатора.
Если же надо, чтобы зашел с нового места - можно очистить идентификатор в редакторе и при новом подключении проставится новый идентификатор.
Если нужно, чтобы заходил с любого "идентификатора", то можно указать в поле * (а для поля MAC-адреса - FF:FF:FF:FF:FF:FF).

Еще можно сделать два типа сервиса, один с логин/пароль, второй - с устройство/порт,
соответственно в одном случае указывать логин/пароль (если ему можно с разных мест заходить), во втором - только устройство/порт
а в конфиге указать:
radius.servSearchMode=1,0
Тогда сначала будет искать по устройству/порту (проверка пароля может быть включена или выключена для типа сервиса, проверки логина - не будет), затем, если по устройству/порту ничего не найдено -
по логину.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 16:57 
Не в сети

Зарегистрирован: 20 мар 2017, 14:10
Сообщения: 440
Карма: 0
По ссылке не помню чтобы было это описано, а сейчас там 502 Bad Gateway
Короче я начинаю понимать, нельзя спрашивать больше одного вопроса в посте длинной больше одного предложения. Иначе с вероятностью 0.99 на них ответа не будет))
Ну и хорошо. Тем лучше)
Внимание вопрос.
Скажите пожалуйста, что хранится в поле идентификатор?
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 17:20 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Любая строка, которая передается из предобработки RADIUS-запроса. Т.е. универсальное поле.
Цитата:
При RADIUS Access-Request можно также использовать MAC-адрес, чтобы авторизовывать запросы только с
определенным MAC-адресом. MAC-адрес из Access-Request пакета устанавливается в Обработчике процессора
протокола, в методе preprocessAccessRequest: request.setOption( InetRadiusProcessor.MAC_ADDRESS, macAddress ).
Стандартные обработчики процессора протокола, поставляемые с модулем уже реализуют этот функционал, нужно
только прописать в конфигурации устройства или типа устройства:
Код:
# Вендор атрибута, где хранится MAC-адрес
radius.macAddress.vendor=-1
# Код атрибута, где хранится MAC-адрес
radius.macAddress.type=31
# Префикс атрибута (если есть), где хранится MAC-адрес. Например, для cisco avpair
#radius.macAddress.prefix=client-mac-address=
Или:
Код:
# Вендор атрибута, где хранится MAC-адрес
radius.macAddress.vendor=9
# Код атрибута, где хранится MAC-адрес
radius.macAddress.type=1
# Префикс атрибута (если есть), где хранится MAC-адрес. Например, для cisco avpair
radius.macAddress.prefix=client-mac-address=
Таким образом, при извлечении MAC-адреса из RADIUS-пакета, он будет сравнен с MAC-адресом из
аутентифицированного сервиса при условии, что в этом сервисе заведен MAC-адрес.
Для автоматического привязывания MAC-адреса к сервису в конфигурации модуля/типа сервиса/устройства/типа устройства можно прописать:
Код:
# Нужно ли автоматически проставлять в сервис MAC-адрес, если его еще нет.
# Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса.
# 0 - не привязывать, 1 - привязывать, если поле сервиса пустое, 2 - перетирать новым значением, 3 - добавлять
# (в последних двух случаях отказа в авторизации по MAC-адресу не будет)
serv.macAddress.auto=1
Таким образом при первой удачной авторизации MAC-адрес будет привязан к сервису и с другим MAC-адресом
клиент уже не сможет авторизоваться.

Аналогично MAC-адресу можно использовать поле Идентификатор сервиса. Например, в качестве идентификатора
использовать значение атрибута Calling-Station-Id, устанавливая в Обработчике процессора протокола, в методе
preprocessAccessRequest: request.setOption( InetRadiusProcessor.IDENTIFIER, callingStationId ).
Для автоматического привязывания идентификатора к сервису в конфигурации модуля/типа сервиса/устройства/типа устройства можно прописать:
Код:
# Нужно ли автоматически проставлять в сервис идентификатор, если его еще нет.
# Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса.
# 0 - не привязывать, 1 - привязывать, если поле сервиса пустое, 2 - перетирать новым значением, 3 - добавлять
# (в последних двух случаях отказа в авторизации по идентификатору не будет)
serv.identifier.auto=1


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 17:38 
Не в сети

Зарегистрирован: 20 мар 2017, 14:10
Сообщения: 440
Карма: 0
Я никак не пойму, что с чем будет сверено?
1)То что содержится в поле идентификатор с тем что можно вытащить через preprocessAccessRequest: request.setOption( InetRadiusProcessor.IDENTIFIER, callingStationId ). из любого атрибута?
Например если я руками вобью в поле идентификатор "kissMyAss" то потом могу сверить эту строку со значением любого из атрибутов предварительно установив его через request.setOption() ?

2) При serv.identifier.auto=1 из какого атрибута или еще откуда будет автоматически проставлено значение? Эту "простановку" сделает тот же request.setOption() ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 17:58 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Если поле Идентификатор не пусто - после предобработки пытается вытащить request.getOption( InetRadiusProcessor.IDENTIFIER ).
Если значение не пусто и не совпадает со значением в поле - ошибка авторизации.

Если serv.identifier.auto=1 и поле Идентификатор пусто, то значение из request.getOption( InetRadiusProcessor.IDENTIFIER ) (если значение не пусто) подставляется в поле Идентификатор.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 мар 2017, 18:25 
Не в сети

Зарегистрирован: 20 мар 2017, 14:10
Сообщения: 440
Карма: 0
Спасибо, О солнцеликие ) Даже я теперь понял.))
И что дальше? Как решается моя задача? Допустим при первом входе, в поле Identificator запишется то, что я выдерну из Calling-Station-ID Пусть это будет IP:порт_ коммутатора
например 192.168.0.1:24 И далее будет сверяться и (не) пускаться.

Изменить потом эту привязку можно только руками правя поле идентификатор? Справочник хотя бы коммутаторов (порт уж как-нибудь можно выставить в ручную) нельзя прикрутить?
Просто монтажник при подключении знает порт, и может его сказать, а вот IP коммутатора он не знает и не видит, и оператор тоже.
Хотелось бы выбирать из списка коммутаторов по более мнемоническим именам.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.085s | 42 Queries | GZIP : On ]