Унификация MAC-адресов
Добавлено: 12 апр 2016, 09:40
Данная информация будет полезна тем, кто одним сервером биллинга обслуживает одновременно роутеры mikrotik и какие-то иные роутеры, перешитые dd-wrt (openwrt) с активированным в них chillispot (coova-chilli). Сама проблема заключается в том, что mikrotik по умолчанию отдает MAC-адреса в формате ХХ:ХХ:ХХ:ХХ:ХХ:ХХ, а chillispot (coova-chilli) - в формате ХХ-ХХ-ХХ-ХХ-ХХ-ХХ. Реально, самому биллингу Easyhotspot безразличен формат, он работает и с тем, и с другим. И различие форматов не было бы проблемой абсолютно, если бы не .... привязка аккаунтов к MAC-адресам. В итоге получается что, допустим, клиент активирует ваучер, подключившись к хотспоту, поднятому на роутере mikrotik, и в базе ваучер привязывается к MAC-адресу формата ХХ:ХХ:ХХ:ХХ:ХХ:ХХ. А позже этот же человек, с этим же устройством пытается подключаться к роутеру с chillispot (coova-chilli). Но этот роутер отдает биллингу MAC-адрес клиента уже в формате ХХ-ХХ-ХХ-ХХ-ХХ-ХХ, и биллинг отказывает клиенту в авторизации, т.к. -адреса (строки ХХ:ХХ:ХХ:ХХ:ХХ:ХХ и ХХ-ХХ-ХХ-ХХ-ХХ-ХХ) с точки зрения процедуры сравнения ДЕЙСТВИТЕЛЬНО разные! Соответственно, и наоборот, активация на chillispot и последующая авторизация на mikrotik дадут точно такой же отрицательный результат...
Способов борьбы с этой проблемой есть два. Для начала рассмотрим "простой". Он заключается в смене формата MAC-адреса, который отдает биллингу mikrotik. Взгляните на рисунок . 8 — "Редактирование профиля сервера хотспота, закладка RADIUS" в инструкции, доступной по ссылке:
http://wifi-hotspot.zp.ua/hotspot_info/ ... otspot.pdf
На рисунке среди прочих параметров присутствует MAC-Format. Вот в этом поле выберите из списка вариант ХХ-ХХ-ХХ-ХХ-ХХ-ХХ и сохраните настройки. В результате mikrotik станет отправлять в биллинг MAC-адрес в формате ХХ-ХХ-ХХ-ХХ-ХХ-ХХ (также, как и chillispot).
Второй способ более сложный. Он заключается в том, что задача "унификации" формата MAC-адресов возлагается непосредственно на сам сервер FreeRADIUS. Информация об этом была найдена на странице документации сервера FreeRADIUS, доступной по адресу:
http://wiki.freeradius.org/guide/Mac-Auth
Вам понадобится отредактировать два файла. Во первых, файл /etc/freeradius/policy.conf. В этом файле в самой последней строке присутствует фигурная скобка - } в самой первой позиции (крайней левой/без всевозможных пробелов или табуляций перед ней). Вот НАД этой скобкой вы должны добавить новый код (да-да, упомянутая скобка должна и остаться самой последней в файле):
После этого нужно отредактировать второй файл - /etc/freeradius/sites-available/default. В этом файле вам нужно найти раздел "авторизации", начинающийся строкой "authorize {". А в этом разделе - команду вызова функции preprocess. И под ней добавить еще одну строку и вписать в нее новую команду, вызывающую функцию rewrite_calling_station_id. То есть, в итоге в файле должно получиться вот такое:
После того, как все изменения внесены и файлы сохранены, нужно перезапустить сам сервер командой:
В результате в биллинг MAC-адреса клиентов будут попадать в одинаковом формате вне зависимости от того, отправлял их mikrotik или же chillispot.
Способов борьбы с этой проблемой есть два. Для начала рассмотрим "простой". Он заключается в смене формата MAC-адреса, который отдает биллингу mikrotik. Взгляните на рисунок . 8 — "Редактирование профиля сервера хотспота, закладка RADIUS" в инструкции, доступной по ссылке:
http://wifi-hotspot.zp.ua/hotspot_info/ ... otspot.pdf
На рисунке среди прочих параметров присутствует MAC-Format. Вот в этом поле выберите из списка вариант ХХ-ХХ-ХХ-ХХ-ХХ-ХХ и сохраните настройки. В результате mikrotik станет отправлять в биллинг MAC-адрес в формате ХХ-ХХ-ХХ-ХХ-ХХ-ХХ (также, как и chillispot).
Второй способ более сложный. Он заключается в том, что задача "унификации" формата MAC-адресов возлагается непосредственно на сам сервер FreeRADIUS. Информация об этом была найдена на странице документации сервера FreeRADIUS, доступной по адресу:
http://wiki.freeradius.org/guide/Mac-Auth
Вам понадобится отредактировать два файла. Во первых, файл /etc/freeradius/policy.conf. В этом файле в самой последней строке присутствует фигурная скобка - } в самой первой позиции (крайней левой/без всевозможных пробелов или табуляций перед ней). Вот НАД этой скобкой вы должны добавить новый код (да-да, упомянутая скобка должна и остаться самой последней в файле):
Код: Выделить всё
#
# Rewrite called station id attribute into a standard format.
#
rewrite_calling_station_id {
if (Calling-Station-Id =~ /([0-9a-f]{2})[-:]?([0-9a-f]{2})[-:.]?([0-9a-f]{2})[-:]?([0-9a-f]{2})[-:.]?([0-9a-f]{2})[-:]?([0-9a-f]{2})/i) {
update request {
Calling-Station-Id := "%{tolower:%{1}-%{2}-%{3}-%{4}-%{5}-%{6}}"
}
}
else {
noop
}
Код: Выделить всё
authorize {
preprocess
rewrite_calling_station_id
Код: Выделить всё
service freeradius restart