====== radClientWrapper.sh - radclient для внешних radius серверов ====== \\ При установке Radius на отдельный сервер, не все BRASы поддерживают запросы "не от radius" так как биллинг продолжает отправлять запросы от IP сервера биллинга. \\ Для решения этой проблемы был создан скрипт radClientWrapper.sh Скрипт использует ssh и sshpass для подключения к внешнему radius серверу Создайте **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" Дайте права на файл и скрипт что бы биллинг смог его запускать и читать: * [[#tab-apache|Centos]] * [[#tab-wwwdata|Debian]] 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, после чего проверить работу выполнив выкидывание тест абонента из админки.