URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID6
Нить номер: 1953
[ Назад ]

Исходное сообщение
"openwrt, freeradius"

Отправлено NekroMen , 13-Апр-16 08:49 
OpenWrt Chaos Calmer 15.05.1
freeradius 2.2.8-2

Установлено:
freeradius2
freeradius2-common
freeradius2-democerts
freeradius2-mod-chap
freeradius2-mod-eap
freeradius2-mod-eap-mschapv2
freeradius2-mod-eap-peap
freeradius2-mod-eap-tls
freeradius2-mod-eap-ttls
freeradius2-mod-exec
freeradius2-mod-files
freeradius2-mod-mschap
freeradius2-mod-pap
freeradius2-mod-radutmp
freeradius2-mod-realm
freeradius2-utils

Проблема:
Всё работает, но хочу сделать авторизацию по MAC-адресу.

Я добавил "rewrite.calling_station_id" в секцию "authorize {", в файлике "/etc/freeradius2/sites/default". Вот такой получился конфиг:
authorize {
        rewrite.calling_station_id
eap {
ok = return
}
files
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
eap
}
accounting {
exec
}
session {
radutmp
}

В итоге получаю такую ошибку:
Module: Checking authorize {...} for more modules to load
/etc/freeradius2/sites/default[92]: Failed to find "rewrite.calling_station_id" in the "modules" section.

Я порешил данную ошибку - в файле /etc/freeradius2/radiusd.conf, расскоментировал:
#$INCLUDE policy.conf

Теперь получаю такую ошибку:
Module: Checking authorize {...} for more modules to load
Module: Loading virtual module rewrite.calling_station_id
/etc/freeradius2/policy.conf[250]: Failed to find "updated" in the "modules" section.
/etc/freeradius2/policy.conf[250]: Failed to parse "updated" entry.
/etc/freeradius2/policy.conf[246]: Failed to parse "if" subsection.
/etc/freeradius2/sites/default[69]: Errors parsing authorize section.

Чё эт за модуль такой "updated", чё-т я не понимаю однако...


Содержание

Сообщения в этом обсуждении
"openwrt, freeradius"
Отправлено NekroMen , 14-Апр-16 07:39 
Функция rewrite.calling_station_id находится в файле /etc/freeradius2/policy.conf:
rewrite.calling_station_id {
                if((Calling-Station-Id) && "%{Calling-Station-Id}" =~ /^%{config:policy.mac-addr}$/i) {
                        update request {
                                Calling-Station-Id := "%{tolower:%{1}-%{2}-%{3}-%{4}-%{5}-%{6}}"
                        }
                        updated
                }
                else {
                        noop
                }
        }

"updated", если я правильно понял, находится в "словаре" /usr/share/freeradius2/dictionary.freeradius.internal:

ATTRIBUTE       Module-Return-Code                      1108    integer

VALUE   Module-Return-Code              reject                  0
VALUE   Module-Return-Code              fail                    1
VALUE   Module-Return-Code              ok                      2
VALUE   Module-Return-Code              handled                 3
VALUE   Module-Return-Code              invalid                 4
VALUE   Module-Return-Code              userlock                5
VALUE   Module-Return-Code              notfound                6
VALUE   Module-Return-Code              noop                    7
VALUE   Module-Return-Code              updated                 8

Если она находится в словаре... то почему я получаю ошибку...:
> Module: Checking authorize {...} for more modules to load
> Module: Loading virtual module rewrite.calling_station_id
> /etc/freeradius2/policy.conf[250]: Failed to find "updated" in the "modules" section.

Чёт я не догоняю...


"openwrt, freeradius"
Отправлено NekroMen , 14-Апр-16 08:13 
Получил такие логи:

Mon Apr 11 20:15:00 2016 : Debug: including configuration file /etc/freeradius2/policy.conf
Mon Apr 11 20:15:00 2016 : Debug: including files in directory /etc/freeradius2/sites/
Mon Apr 11 20:15:00 2016 : Debug: including configuration file /etc/freeradius2/sites/default
Mon Apr 11 20:15:00 2016 : Debug: main {
Mon Apr 11 20:15:00 2016 : Debug: allow_core_dumps = no
Mon Apr 11 20:15:00 2016 : Debug: }
Mon Apr 11 20:15:00 2016 : Debug: including dictionary file /etc/freeradius2/dictionary

Как я понимаю:
Сначала грузится /etc/freeradius2/sites/default
И только потом /etc/freeradius2/dictionary

Но если "updated" объявлен в файле dictionary, то естественно про "updated" ничего не известно во время загрузки файла "default".

Хотя в инструкции http://wiki.freeradius.org/guide/Mac-Auth, сказано, что "rewrite.calling_station_id" надо добавлять в файл "/etc/freeradius2/sites/default".


"openwrt, freeradius"
Отправлено NekroMen , 14-Апр-16 14:32 
Проблема была в отсутствующем файле /etc/freeradius2/modules/always.

Буквально сегодня openwrt залило на downloads.openwrt.org модуль freeradius2-mod-always. Я установил это и проблема исчезла.

Кстати, для MAC-авторизации нужно будет ещё установить модуль freeradius2-mod-expr. И в  /etc/freeradius2/radiusd.conf добавить или расскомментировать "expr" в секции "instantiate {". Просто иначе не будет работать функция tolower, которая преобразует MAC-адрес к нижнему регистру.