Client-IP-Address в radius.log
У FreeRADIUS есть такой врожденный атавизм. В radius.log пишутся все успешные и неуспешные попытки авторизации. И в каждой строке пишется нечто типа расшифровки
(from client short-name-client port 0)
Так вот этот short-name-client
не несёт никакой полезной информации. radacct раскладывает детальную информацию из пакетов в каталоги по IP-адресам, с которых был прислан пакет. В radius.log название, в radacct – IP-адрес источника пакета. Как же тяжело потом копаться в логах, нужно помнить всех клиентов.
Можно, конечно, давать short-name в виде IP-адреса. Но что делать, если клиенты в clients.conf вообще описаны в виде сети? Ведь формат radius.log не настраивается никак…
Сделаем вот такой патчик:
--- src/main/auth.c 2012-09-10 14:51:34.000000000 +0300 +++ src/main/auth.c 2014-08-14 17:44:39.000000000 +0300 @@ -41,6 +41,7 @@ VALUE_PAIR *pair; int port = 0; const char *tls = ""; + char client_ip_address[128];
if ((cli = pairfind(request->packet->vps, PW_CALLING_STATION_ID)) == NULL) do_cli = 0; @@ -55,8 +56,12 @@ } }
+ inet_ntop(request->packet->src_ipaddr.af, + &request->packet->src_ipaddr.ipaddr, + client_ip_address, sizeof(client_ip_address)); + snprintf(buf, buflen, "from client %.128s port %u%s%.128s%s", - request->client->shortname, port, + client_ip_address, port, (do_cli ? " cli " : ""), (do_cli ? (char *)cli->vp_strvalue : ""), tls);
Патчик подходит для версий FreeRADIUS 2.2.0-2.2.5. Пропатченая версия фрирадиуса пишет в radius.log вместо названия клиента IP-адрес источника пакета. Выглядит примерно вот так:
(from client 95.138.219.26 port 0)