Назад | Перейти на главную страницу

freeradius: назначить IP из определенного пула, отфильтрованного пользователем

Я здесь новенький.

У меня есть freeradius 3 с sqlippool и аутентификацией LDAP (с «гостевым» пользователем, настроенным на файл), все работает нормально. У меня 2 sqlippools:

-main_pool

-guest_pool

Я хочу сделать следующее:

если пользователь «гость», тогда предложите IP от guest_pool, иначе предложите от main_pool. Моя идея состоит в том, чтобы гости и другие пользователи находились в разных вланах.

¿Как я могу узнать в radius dhcp, если пользователь является гостевым предложением от guest_pool?

Извините за мой плохой английский.

Спасибо.

Я решил это!

Спасибо Аррану Кадбард-Беллу за подсказку!

Сначала была создана таблица с именем «userhardaddr» с именем пользователя и mac (PK) как varchar.

В (radius conf dir) / sites-enabled / defaul (раздел post-auth) я сделал запрос «REPLACE»:

post-auth {
    ...
    update reply {
        Tmp-String-0 := "%{sql:REPALCE INTO userhardaddr(username,mac) VALUES(%{User-Name},%{Calling-Station-Id})}"
    ... 
    }
}

Это заменяет пользователя для подключенного MAC в таблице, если он существует. Если не существует, REPLACE создает строку, как в INSERT.

Затем в sites-enabled / dhcp (разделы обнаружения и запроса):

dhcp DHPC-Discover {
    update request {
        ...
        User-Name = "%{sql:SELECT username FROM userhardaddr where mac = REPLACE ('%{DHCP-Client-Hardware-Address}',':','-')}"
        ...
    }
    ...
    if(&User-Name=='guest') {
        &Pool-Name = "guest_pool"
    }
    else {
        &Pool-Name = "main_pool"
    }
...
}
...
dhcp DHPC-Request {
    (same in discover)
}

При этом я получаю имя пользователя из БД в соответствии с MAC-адресом.

В операторе IF я сравниваю значение, возвращаемое запросом, с «гостем» и назначаю соответствующий пул IP-адресов.

Еще раз спасибо.

С уважением.