Настройка Freeradius для хранения radpostauth в альтернативной базе MySQL
Данную инструкцию рассмотрим для ситуации, когда пользователи и логи Freeradius уже хранятся в базе MySQL, но необходимо сбалансировать нагрузку и отправлять логи авторизации (radpostauth) на другой сервер MySQL. Все команды приведены на примере FreeBSD.
Открываем на редактирование файл с политиками freeradius:
# ee /usr/local/etc/raddb/policy.conf
И добавляем следующее:
sql_auth_custom {
post_auth_custom
}
* где sql_auth_custom — название политики; post_auth_custom — имя файла модуля, в котором будут находиться инструкции.
Теперь создаем новый файл в модулях freeradius:
# ee /usr/local/etc/raddb/modules/post_auth_custom
* обратите внимание, для удобства название файла post_auth_custom совпадает с содержимым политики sql_auth_custom.
Приводим содержимое нового файла к следующему виду:
sql post_auth_custom {
database = "mysql"
driver = "rlm_sql_${database}"
server = "192.168.0.10"
login = "radius"
password = "radius"
radius_db = "radius"
postauth_table = "radpostauth"
sqltrace = no
sqltracefile = /var/log/postauthtrace.sql
num_sql_socks = 32
connect_failure_retry_delay = 60
sql_user_name = "%{User-Name}"
postauth_query = "INSERT INTO ${postauth_table} \
(`username`, `pass`, `reply`, `authdate`, `callfrom`,`callto`,`nasip`,`acctsessionid`,`msg`) \
VALUES ( \
'%{User-Name}', \
'%{%{User-Password}:-%{Chap-Password}}', \
'%{reply:Packet-Type}', '%S', '%{Calling-Station-Id}', '%{Called-Station-Id}', '%{NAS-IP-Address}', '%{Acct-Session-Id}', '%{reply:Reply-Message}');"
}
* где post_auth_custom — название политики; 192.168.0.10 — IP-адрес альтернативного сервера MySQL; radius (login, password, radius_db) — данные для подключения к базе данных (соответственно, логин, пароль и название базы); radpostauth — имя таблицы для хранения лога.
Теперь открываем следующий файл:
# ee /usr/local/etc/raddb/sites-enabled/default
Находим секцию post-auth и добавляем следующее:
post-auth {
...
sql_auth_custom
...
где sql_auth_custom — название нашей политики.
Для применения настроек, перезагружаем службу radiusd:
# service radius restart
После перезагрузки данные об авторизации начнут отправляться на новый сервер MySQL. На нем уже должна быть создана база с правильными именем и таблицей.