billing:external:radiusclientwrapper

radClientWrapper.sh - radclient для внешних radius серверов


При установке Radius на отдельный сервер, не все BRASы поддерживают запросы "не от radius" так как биллинг продолжает отправлять запросы от IP сервера биллинга.
Для решения этой проблемы был создан скрипт radClientWrapper.sh

Создайте radius_servers.conf и radClientWrapper.sh в директории /var/mikbill

Содержимое radius_servers.conf

# bras_ip   radius_ip   port    radclient path          login           password
10.0.0.1    10.0.0.254  22	/usr/bin/radclient	mikbillcoa	pqwWERehf2gIPOHJWEGFQAw

Так как на radclient передается только IP BRAS, то к нему и будем привязываться, в нашем случаи это 10.0.0.1 Далее идет IP адрес внешнего Radius сервера Потом SSH порт на внешнем Radius сервере Путь к radclient на внешнем Radius сервере (если нету то нужно поставить из пакета freeradius-utils) Далее логин пользователя для подключения по SSH и пароль

После чего создайте скрипт radClientWrapper.sh

#!/bin/bash

SSH=$(which ssh)
SSHPASS=$(which sshpass)
SERVERS_FILE="radius_servers.conf"
WORK_DIR="/var/mikbill"

cd $WORK_DIR || exit

# Проверяем, существует ли файл radius_servers.conf
if [ ! -f $SERVERS_FILE ]; then
    echo "Не найден файл $SERVERS_FILE. Создайте его и добавьте данные для входа на серверы."
    exit 1
fi

# Проверяем наличие обязательных параметров
if [ $# -lt 5 ]; then
    echo "Необходимо указать как минимум 5 параметра: -r 1 server:port type secret"
    exit 1
fi

# Извлекаем параметры
requestAttempts=$2
requestServer=$3
requestType=$4
requestSecret=$5

# Разбираем строки входных данных из стандартного ввода (stdin)
while IFS= read -r requestedUser; do
    # Формируем команду для запуска radclient с каждой строкой входных данных
    user_command="echo \"$requestedUser\""
done

# Получаем IP BRAS из запроса
brasIP=${requestServer%%:*}

# Получаем данные для входа на удаленных серверах из файла radius_servers.conf
credentials=$(grep -P "^${brasIP}[[:space:]]" $SERVERS_FILE | awk '{ print $2,$3,$4,$5,$6 }')
read -r server_ip server_port radclient_path username password <<< "$credentials"

# Проверяем, найдены ли данные для входа на выбранном сервере
if [ -z "$username" ] || [ -z "$password" ]; then
    echo "Не найдены данные для входа на сервер: $server_ip"
    exit 1
fi

# Формируем команду для запуска radclient
command="$user_command | $radclient_path -r $requestAttempts $requestServer $requestType '$requestSecret'"

# Запускаем radclient на удаленном сервере
$SSHPASS -p "$password" "$SSH" -p "$server_port" "$username@$server_ip" "$command"

Дайте права на файл и скрипт что бы биллинг смог его запускать и читать:

chown apache:apache /var/mikbill/radius_servers.conf
chown apache:apache /var/mikbill/radClientWrapper.sh
chmod +x /var/mikbill/radClientWrapper.sh
chown www-data:www-data /var/mikbill/radius_servers.conf
chown www-data:www-data /var/mikbill/radClientWrapper.sh
chmod +x /var/mikbill/radClientWrapper.sh

Теперь можно указать данный скрипт /var/mikbill/radClientWrapper.sh в биллинге в системных путях в место radclient, после чего проверить работу выполнив выкидывание тест абонента из админки.

  • billing/external/radiusclientwrapper.txt
  • Последнее изменение: 11 мес. назад
  • alexd