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

FreeRadius 3 + sqlippool

У меня есть базовая конфигурация FreeRadius в сочетании с Postgresql и Mikrotik. Модуль SQL настроен правильно и авторизация PPPoE через базу данных работает. Мне нужно подключить и настроить модуль sqlippool. На данный момент у меня проблемы, потому что в Интернете нет подробных инструкций по настройке этого модуля. Вот список того, что я пытался сделать:

  1. Указал диалект "postgresql" в файле sqlippool
  2. Подключил модуль
  3. Создал таблицу radippool через схему PostgreSQL
  4. В базу добавлены следующие строки:

INSERT INTO radippool (pool_name, framedipaddress) VALUES ('main_pool', '10.1.0.5');

INSERT INTO radippool (pool_name, framedipaddress) VALUES ('main_pool', '10.1.0.6');

INSERT INTO radcheck (username, attribute, op, value) VALUES ('tester', 'Cleartext-Password', ':=', 'test');

INSERT INTO radcheck (username, attribute, op, value) VALUES ('tester', 'Pool-Name', ':=', 'main_pool');

Перезагрузка. В итоге - ничего. FreeRadius не выдает ip-адреса из пула, и я не вижу ошибок в логах. Вы можете сказать мне, что я сделал не так? Нужно ли еще что-то подключать, или я где-то ошибся? Расскажите, пожалуйста, подробную последовательность действий для корректной настройки этого модуля. Думаю, это руководство поможет многим новичкам, так как подробной информации просто нет.

ОБНОВИТЬ. Журналы:

Готовы обрабатывать запросы

(0) Полученный идентификатор запроса доступа 19 от 10.1.0.1:53161 до 10.1.0.4:1812 длина 198

(0) Service-Type = Framed-User

(0) Framed-Protocol = PPP

(0) NAS-порт = 15728646

(0) NAS-Port-Type = Ethernet

(0) User-Name = "тестировщик"

(0) Calling-Station-Id = "C4: 12: F5: D4: 85: 70"

(0) Called-Station-Id = "myclients"

(0) NAS-Port-Id = "ether3"

(0) Acct-Session-Id = "81a00006"

(0) MS-CHAP-Challenge = 0x97e9a21dabacee5e9c0384f778dc7915

(0) MS-CHAP2-Response = 0x010029335f35cdd38e0fa6eab66e12022f47000000000000000078126d15554660d74add815846c50ab6353c7e0847952eac

(0) NAS-идентификатор = "MikroTik"

(0) IP-адрес NAS = 10.1.0.1

(0) # Выполнение авторизации раздела из файла /etc/freeradius/3.0/sites-enabled/default

(0) авторизовать {

(0) policy filter_username {

(0) if (& Имя пользователя) {

(0) если (& Имя пользователя) -> ИСТИНА

(0) if (& Имя пользователя) {

(0) if (& User-Name = ~ / /) {

(0) если (& User-Name = ~ / /) -> FALSE

(0) if (& User-Name = ~ / @ [^ @] * @ /) {

(0) если (& User-Name = ~ / @ [^ @] * @ /) -> FALSE

(0) if (& User-Name = ~ /../) {

(0) если (& User-Name = ~ /../) -> FALSE

(0) if ((& User-Name = ~ / @ /) && (& User-Name! ~ /@(.+).(.+)$/)) {

(0) if ((& User-Name = ~ / @ /) && (& User-Name! ~ /@(.+).(.+)$/)) -> FALSE

(0) if (& User-Name = ~ /.$/) {

(0) если (& User-Name = ~ /.$/) -> FALSE

(0) if (& User-Name = ~ /@./) {

(0) если (& User-Name = ~ /@./) -> ЛОЖЬ

(0)} # if (& User-Name) = notfound

(0)} # policy filter_username = notfound.

(0) [препроцесс] = нормально

(0) [chap] = нет

(0) mschap: Обнаружены атрибуты MS-CHAP. Установка Auth-Type = mschap

(0) [mschap] = нормально

(0) [дайджест] = нет

(0) суффикс: проверка суффикса после "@"

(0) суффикс: Нет '@' в User-Name = "tester", поиск области NULL

(0) суффикс: Нет такой области "NULL"

(0) [суффикс] = нет

(0) eap: Нет EAP-сообщения, EAP не выполняется

(0) [eap] = нет

(0) files: users: Соответствующая запись DEFAULT в строке 181

(0) [файлы] = хорошо

(0) sql: EXPAND% {Имя пользователя}

(0) sql: -> тестер

(0) sql: SQL-User-Name установлен на 'tester' rlm_sql (sql): Зарезервированное соединение (1)

(0) sql: EXPAND SELECT id, UserName, Attribute, Value, Op FROM radcheck WHERE Username = '% {SQL-User-Name}' ORDER BY id

(0) sql: -> SELECT id, UserName, Attribute, Value, Op FROM radcheck WHERE Username = 'tester' ORDER BY id

(0) sql: Выполнение запроса выбора: SELECT id, UserName, Attribute, Value, Op FROM radcheck WHERE Username = 'tester' ORDER BY id rlm_sql_postgresql: Status: PGRES_TUPLES_OK rlm_sql_postgresql: затронутые запросом строки = 2, поля = 5

(0) sql: пользователь найден в таблице radcheck

(0) sql: элементы условной проверки сопоставлены, объединение элементов проверки присвоения

(0) sql: Открытый текст-Пароль: = "тест"

(0) sql: Pool-Name: = "main_pool"

(0) sql: EXPAND SELECT id, UserName, Attribute, Value, Op FROM radreply WHERE Username = '% {SQL-User-Name}' ORDER BY id

(0) sql: -> SELECT id, UserName, Attribute, Value, Op FROM radreply WHERE Username = 'tester' ORDER BY id

(0) sql: Выполнение запроса выбора: SELECT id, UserName, Attribute, Value, Op FROM radreply WHERE Username = 'tester' ORDER BY id rlm_sql_postgresql: Status: PGRES_TUPLES_OK rlm_sql_postgresql: затронутые запросы строки = 0, fields = 5

(0) sql: EXPAND SELECT GroupName FROM radusergroup WHERE UserName = '% {SQL-User-Name}' ORDER BY priority

(0) sql: -> SELECT GroupName FROM radusergroup WHERE UserName = 'tester' ORDER BY priority

(0) sql: Выполнение запроса выбора: SELECT GroupName FROM radusergroup WHERE UserName = 'tester' ORDER BY priority rlm_sql_postgresql: Status: PGRES_TUPLES_OK rlm_sql_postgresql: затронутые запросы строки = 0, поля = 1

(0) sql: Пользователь не найден ни в одной группе rlm_sql (sql): Разорванное соединение (1) Требуется еще 4 соединения для достижения 10 запасных частей rlm_sql (sql): Открытие дополнительного соединения (6), используется 1 из 26 ожидающих слотов rlm_sql_postgresql: Подключение с использованием параметров: dbname = 'radius' host = 'localhost' port = 5432 user = 'radius' password = 'radpass' Подключен к базе данных 'radius' на сервере 'localhost' версии 110007, версии протокола 3, бэкэнда PID 28624

(0) [sql] = нормально

(0) [истечение срока] = нет

(0) [время входа] = нет

(0) pap: ВНИМАНИЕ: Auth-Type уже установлен. Не устанавливается на PAP

(0) [pap] = нет

(0)} # authorize = ok

(0) Найдено Auth-Type = mschap

(0) # Запуск группы из файла /etc/freeradius/3.0/sites-enabled/default

(0) Authenticate {

(0) mschap: Найден открытый текст-пароль, хеширование для создания NT-пароля

(0) mschap: Найден открытый текст-пароль, хеширование для создания LM-пароля

(0) mschap: Создание хэша задачи с именем пользователя: tester

(0) mschap: клиент использует MS-CHAPv2

(0) mschap: Добавление ключей MPPE MS-CHAPv2

(0) [mschap] = нормально

(0)} # Authenticate = ok

(0) # Выполнение пост-авторизации раздела из файла /etc/freeradius/3.0/sites-enabled/default

(0) post-auth {

(0) update {

(0) Атрибуты не обновлены

(0)} # update = noop

(0) sql: EXPAND .query

(0) sql: -> .query

(0) sql: Использование шаблона запроса 'query' rlm_sql (sql): Зарезервированное соединение (2)

(0) sql: EXPAND% {Имя пользователя}

(0) sql: -> тестер

(0) sql: SQL-User-Name установлен на 'tester'

(0) sql: EXPAND INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ('% {User-Name}', '% {% {User-Password}: - Chap-Password}', '% {reply) : Packet-Type} ', СЕЙЧАС ())

(0) sql: -> INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ('tester', 'Chap-Password', 'Access-Accept', NOW ())

(0) sql: Выполнение запроса: INSERT INTO radpostauth (username, pass, reply, authdate) VALUES ('tester', 'Chap-Password', 'Access-Accept', NOW ()) rlm_sql_postgresql: Статус: PGRES_COMMAND_OK rlm_sql: затронутые строки = 1

(0) sql: SQL-запрос возвращен: успех

(0) sql: 1 запись (и) обновлены rlm_sql (sql): освобожденное соединение (2)

(0) [sql] = нормально

(0) [exec] = нет

(0) policy remove_reply_message_if_eap {

(0) if (& reply: EAP-сообщение && & reply: Reply-сообщение) {

(0) если (& ответ: EAP-сообщение && & ответ: Ответное сообщение) -> ЛОЖЬ

(0) else {

(0) [noop] = noop

(0)} # else = noop

(0)} # policy remove_reply_message_if_eap = noop

(0)} # post-auth = ok

(0) Отправлен идентификатор доступа 19 с 10.1.0.4:1812 на 10.1.0.1:53161 длина 0

(0) Framed-Protocol = PPP

(0) Framed-Compression = Van-Jacobson-TCP-IP

(0) MS-CHAP2-Success = 0x01533d42443236373932353546324538304641374430424235463938333445314331454330323244463233

(0) MS-MPPE-Recv-Key = 0xf03b52e2c28c093649b396d6e2b16945

(0) MS-MPPE-Send-Key = 0xb4d2427c437eca3f444403b060bc59f7

(0) MS-MPPE-Encryption-Policy = Шифрование-Разрешено

(0) MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed

(0) Завершенный запрос Пробуждение через 4,9 секунды.

(1) Получен идентификатор запроса учета 20 от 10.1.0.1:48965 до 10.1.0.4:1813 длиной 146

(1) Service-Type = Framed-User

(1) Framed-Protocol = PPP

(1) NAS-порт = 15728646

(1) NAS-Port-Type = Ethernet

(1) User-Name = "тестировщик"

(1) Calling-Station-Id = "C4: 12: F5: D4: 85: 70"

(1) Called-Station-Id = "мои клиенты"

(1) NAS-Port-Id = "ether3"

(1) Acct-Session-Id = "81a00006"

(1) Framed-IP-Address = 10.1.0.252

(1) Acct-Authentic = RADIUS

(1) Event-Timestamp = "13 июля 2020 14:57:41 +08"

(1) Acct-Status-Type = Пуск

(1) NAS-идентификатор = "MikroTik"

(1) Acct-Delay-Time = 0

(1) IP-адрес NAS = 10.1.0.1

(1) # Выполнение preacct раздела из файла /etc/freeradius/3.0/sites-enabled/default

(1) preacct {

(1) [препроцесс] = хорошо

(1) policy acct_unique {

(1) запрос на обновление {

(1) & Tmp-String-9: = "ai:"

(1)} # update request = noop

(1) if (("% {hex: & Class}" = ~ / ^% {hex: & Tmp-String-9} /) && ("% {string: & Class}" = ~ / ^ ai: ([0- 9a-f] {32}) / i)) {

(1) EXPAND% {hex: & Class}

(1) ->

(1) EXPAND ^% {шестнадцатеричный: & Tmp-String-9}

(1) -> ^ 61693a

(1) if (("% {hex: & Class}" = ~ / ^% {hex: & Tmp-String-9} /) && ("% {string: & Class}" = ~ / ^ ai: ([0- 9a-f] {32}) / i)) -> ЛОЖЬ

(1) else {

(1) запрос на обновление {

(1) EXPAND% {md5:% {User-Name},% {Acct-Session-ID},% {% {NAS-IPv6-Address}: -% {NAS-IP-Address}},% {NAS- Идентификатор},% {NAS-Port-ID},% {NAS-Port}}

(1) -> 9b06bc7d71ce816cb361a7625387ab61

(1) & Acct-Unique-Session-Id: = 9b06bc7d71ce816cb361a7625387ab61

(1)} # update request = noop

(1)} # else = noop

(1)} # policy acct_unique = noop

(1) суффикс: проверка суффикса после "@"

(1) суффикс: Нет '@' в User-Name = "tester", поиск области NULL

(1) суффикс: Нет такой области "NULL"

(1) [суффикс] = нет

(1) [файлы] = нет

(1)} # preacct = ok

(1) # Выполнение учета раздела из файла /etc/freeradius/3.0/sites-enabled/default

(1) бухгалтерский учет {

(1) деталь: EXPAND / var / log / freeradius / radacct /% {% {Packet-Src-IP-Address}: -% {Packet-Src-IPv6-Address}} / detail-% Y% m% d

(1) деталь: -> /var/log/freeradius/radacct/10.1.0.1/detail-20200713

(1) деталь: / var / log / freeradius / radacct /% {% {Packet-Src-IP-Address}: -% {Packet-Src-IPv6-Address}} / detail-% Y% m% d расширяется до /var/log/freeradius/radacct/10.1.0.1/detail-20200713

(1) деталь: EXPAND% t

(1) деталь: -> пн 13 июл 14:57:45 2020

(1) [деталь] = хорошо

(1) [unix] = нормально

(1) sql: EXPAND% {tolower: type.% {% {Acct-Status-Type}: - none} .query}

(1) sql: -> type.start.query

(1) sql: использование шаблона запроса 'query' rlm_sql (sql): зарезервированное соединение (3)

(1) sql: EXPAND% {Имя пользователя}

(1) sql: -> тестер

(1) sql: SQL-User-Name установлен на 'tester'

(1) SQL: Увеличить вставить в radacct (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctUpdateTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_Stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIpAddress) VALUES ('% {Acct-Session-Id}', '% {Acct-Unique-Session-Id}', '% {SQL-User-Name}', NULLIF ('% {Realm}', ''), '% {% {NAS-IPv6-Address}: -% {NAS-IP-Address}}', NULLIF ('% {% {NAS-Port-ID}: -% {NAS-Port}} ',' '),'% {NAS-Port-Type} ', TO_TIMESTAMP (% {integer: Event-Timestamp}), TO_TIMESTAMP (% {integer: Event-Timestamp}), NULL, 0,'% {Acct- Authentic} ','% {Connect-Info} ', NULL, 0, 0,'% {Called-Station-Id} ','% {Calling-Station-Id} ', NULL,'% {Service-Type} ','% {Framed-Protocol} ', NULLIF ('% {Framed-IP-Address} ',' ') :: inet)

(1) SQL: -> INSERT INTO radacct (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctUpdateTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_Stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIpAddress) VALUES ('81a00006', '9b06bc7d71ce816cb361a7625387ab61', 'tester', NULLIF ('', ''), '10 .1.0.1 ', NULLIF (' ether3 ',' '),' Ethernet ' (1594623461), TO_TIMESTAMP (1594623461), NULL, 0, 'RADIUS', '', NULL, 0, 0, 'myclients', 'C4: 12: F5: D4: 85: 70', NULL, 'Framed-User ',' PPP ', NULLIF ('10 .1.0.252', '') :: inet)

(1) SQL: Выполнение запроса: INSERT INTO radacct (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctUpdateTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_Stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIpAddress) VALUES ('81a00006', '9b06bc7d71ce816cb361a7625387ab61', 'tester', NULLIF ('', ''), '10 .1.0.1 ', NULLIF (' ether3 ',' '),' Ethernet ' (1594623461), TO_TIMESTAMP (1594623461), NULL, 0, 'RADIUS', '', NULL, 0, 0, 'myclients', 'C4: 12: F5: D4: 85: 70', NULL, 'Framed-User ',' PPP ', NULLIF ('10 .1.0.252', '') :: inet) rlm_sql_postgresql: Статус: PGRES_COMMAND_OK rlm_sql_postgresql: строки, затронутые запросом = 1

(1) sql: запрос SQL возвращен: успех

(1) sql: 1 запись (и) обновлены rlm_sql (sql): освобожденное соединение (3)

(1) [sql] = хорошо

(1) [exec] = нет

(1) attr_filter.accounting_response: EXPAND% {User-Name}

(1) attr_filter.accounting_response: -> тестер

(1) attr_filter.accounting_response: Соответствующая запись DEFAULT в строке 12

(1) [attr_filter.accounting_response] = обновлено

(1)} # Accounting = обновлено

(1) Отправлен учетный идентификатор ответа 20 с 10.1.0.4:1813 на 10.1.0.1:48965, длина 0

(1) Завершенный запрос

(1) Очистка пакета запроса ID 20 с отметкой времени +5 Пробуждение через 4,9 секунды.

(0) Очистка пакета запроса с идентификатором 19 с отметкой времени +5 Готовность к обработке запросов