Показать страницуСсылки сюдаНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Mikrotik - кеш-система на основе User Manager ====== [[billing:howto|Вернуться на уровень выше]] Как это работает: 1. На микротике настраивается собственный радиус-сервер. 2. Скрипт передает из базы mikbill на mikrotik данные для авторизации (ppp - login/password или ipoe - mac или оба одновременно) например раз в час (ниже вариант с работой реал-тайм). При этом передает только те учетки, у которых положительный баланс или стоит кредит и интернет не заблокирован. 3. При недоступности радиус-сервера микбила (ответ radius-timeout) запросы автоматически пойдут на локальный радиус-сервер. Если микротиков несколько, можно сделать радиус-сервер на одном, а остальные будут к нему подключаться. ===== Установка ====== ===== Версия 1 ===== 1. Качаем и устанавливаем пакет User Manager для своей версии микротика http://www.mikrotik.com/download 2. Доступ к управлению через веб http://IP_MIKROTIK/userman/ Настраиваем routers и создаем профиль admin или делаем тоже самое через консоль <file>/tool user-manager router add customer=admin ip-address=127.0.0.1 shared-secret=RADIUSSECRET</file> <file>/tool user-manager profile add name=admin owner=admin</file> 3. Создаем радиус-клиент на микротике (обязательно ниже микбиловского) для ppp: <file>/radius add address=127.0.0.1 secret=RADIUSSECRET service=ppp</file> для ipoe: <file>/radius add address=127.0.0.1 secret=RADIUSSECRET service=hotspot</file> 4. Проверяем что микротик доступен по ssh с серера 5. Настраиваем авторизацию по ключу https://wiki.mikbill.ru/billing/configuration/cross_server_uathorization 6. На сервере создаем скрипт <file>nano radiuscash.sh</file> <code> #!/bin/bash USERMAN_IP="192.168.10.67" USERMAN_SSH_PORT="22" USERMAN_LOGIN="mikbill" RADIUS_HOTSPOT="1" RADIUS_PPP="1" HOME_DIR=$(cd $(dirname $0)&& pwd) UPLOAD="$HOME_DIR/userman.rsc" PATH_CONFIG=/var/www/mikbill/admin/app/etc/config.xml DB_USER=$(cat $PATH_CONFIG| grep username | awk '{ gsub("<username>"," "); print }' | awk '{ gsub("</username>"," "); print }' | awk '{print $1}') DB_PASSWORD=$(cat $PATH_CONFIG| grep password | awk '{ gsub("<password>"," "); print }' | awk '{ gsub("</password>"," "); print }' | awk '{print $1}') DB_NAME=$(cat $PATH_CONFIG | grep dbname | awk '{ gsub("<dbname>"," "); print }' | awk '{ gsub("</dbname>"," "); print }'| awk '{print $1}') echo "/tool user-manager user" > $UPLOAD echo "remove [find]" >> $UPLOAD if [ "$RADIUS_HOTSPOT" -ne 0 ] then QUERY="SELECT local_mac FROM users WHERE (deposit+credit)>=0 and blocked=0" SQL=`mysql -D $DB_NAME -u $DB_USER -p$DB_PASSWORD -e "$QUERY" 2>/dev/null` SQL=${SQL:10:${#SQL}} for i in $SQL; do if [[ $i != NULL ]] then echo "add customer=admin username=$i" >>$UPLOAD fi done fi if [ "$RADIUS_PPP" -ne 0 ] then QUERY="SELECT user, password FROM users WHERE (deposit+credit)>=0 and blocked=0;" SQL=`mysql -D $DB_NAME -u $DB_USER -p$DB_PASSWORD -e "$QUERY" 2>/dev/null` SQL=${SQL:14:${#SQL}} NUM=0 for i in $SQL; do LOGIN_PASS[$NUM]=$i let "NUM=NUM+1" done for((i=0;i!=NUM;i+=2)) do echo "add customer=admin username=${LOGIN_PASS[$i]} password=${LOGIN_PASS[$i+1]}" >>$UPLOAD done fi echo "create-and-activate-profile profile=admin customer=admin numbers=[find]" >>$UPLOAD #SSH for (( i=0;i!=10;i++ )); do scp -P $USERMAN_SSH_PORT $UPLOAD $USERMAN_LOGIN@$USERMAN_IP:/ STATUS=$? if [ $STATUS -ne 0 ]; then sleep 10 else CMD="/import file=$(basename $UPLOAD)" for (( i=0;i!=10;i++ )); do ssh -p $USERMAN_SSH_PORT $USERMAN_LOGIN@$USERMAN_IP "${CMD}" > /dev/null STATUS=$? if [ $STATUS -ne 0 ]; then sleep 10 fi done break fi done </code> Указываем свои данные микротика на котором установлен User Manager <code> USERMAN_IP USERMAN_SSH_PORT USERMAN_LOGIN </code> Указываем тип авторизации <code>RADIUS_TYPE="hotspot"</code> или <code>RADIUS_TYPE="ppp"</code> 7. Разрешаем исполнение скрипта <file>chmod +x radiuscash.sh</file> 8. Добавляем исполнение скрипта по крону. ===== Версия 2 ===== Собственно это доработанная система первой версии, но весьма утяжеленная, поэтому и первая версия имеет право на существование. Выгрузка радиус-шейперов из тарифов (значения Rx/Tx). Выгрузка IP учеток с биллинга. Теперь скрипт учитывает разрешенный минус. Учет индивидуальных шейперов в учетке. Изменена логика выгрузки на микротик. Теперь общая выгрузка делается после 24.00, а после в течении дня учетки добавляются при пополнении. То есть, практически, кеш работает в реальном времени. 1. При добавлении учетной записи (проверка новых учеток раз в 5 мин) 2. При пополнении (сразу) 3. При включении из замороженных (сразу) 4. Можно обновить вручную все через админку (настройки-действия-обновить шейперы) === Установка === Качаем файлы в отдельный каталог, например в /home/radcash/ <file> wget https://github.com/mikbill/design/raw/master/radiuscash/radcash_limits/radcash.conf wget https://github.com/mikbill/design/raw/master/radiuscash/radcash_limits/radcash.lib wget https://github.com/mikbill/design/raw/master/radiuscash/radcash_limits/radcash.sh wget https://github.com/mikbill/design/raw/master/radiuscash/radcash_limits/update_uid.sh wget https://github.com/mikbill/design/raw/master/radiuscash/radcash_limits/radcash_check_new_uid.sh </file> Даем права на исполнение <file> chmod +x radcash.sh update_uid.sh radcash_check_new_uid.sh </file> Правим radcash.conf <file> USERMAN_IP="192.168.10.67" # IP микротика USERMAN_SSH_PORT="22" # Порт микротика USERMAN_LOGIN="mikbill" # Логин учетки микротика (не забываем настроить авторизацию по ключу) RADIUS_HOTSPOT="1" # Вкл/выкл IPOE NAS RADIUS_PPP="1" # Вкл/выкл PPP NAS LOG_REMOVE="1" # Удаляет предыдущий лог User Manager при общей заливке CONNECT_INTERVAL=60 # Интервал между попытками подключения CONNECT_SUM=180 # Общая сумма попыток подключения PATH_CONFIG=/var/www/mikbill/admin/app/etc/config.xml </file> Настраиваем крон <file>nano /etc/crontab</file> <code> # RadCash 20 00 * * * root /home/radcash/radcash.sh </code> Настраиваем выгрузку при пополнении <file>nano /var/www/mikbill/admin/sys/scripts/mikbill_payment_event.sh</file> Добавляем в конец файла <code> # RadCash /home/radcash/update_uid.sh $2 </code> Настраиваем выгрузку при включении из замороженных <file>nano /var/www/mikbill/admin/sys/scripts/mikbill_onoff_user_event.sh</file> Добавляем в конец файла <code> # RadCash /home/radcash/update_uid.sh $2 </code> Добавляем ручную общую выгрузку через админку через Настройки-Действия-Обновить шейперы <file>nano /var/www/mikbill/admin/sys/scripts/mikbill_pcq.sh</file> Добавляем в конец файла <code> # RadCash /home/radcash/radcash.sh </code> Настаиваем синхронизацию при добавлении новой учетной записи в админке <file>nano /var/www/mikbill/admin/sys/scripts/mikbill_5min.sh</file> <code> # RadCash /home/radcash/radcash_check_new_uid.sh </code> === Настройка Mikrotik === На микротике создаем скрипт мониторящий сервер биллинга и добавляем его в scheduler например раз в минуту <code> :local IP 10.10.10.1 :local COUNT 3 :local radiusMikbill1 0 :local radiusRadCash 1 :local dhcpServer1 server1 :local dhcpRelay1 relay1 :local STATUS ([/ping $IP count=$COUNT]) :global statusRadCash :if ($STATUS = 0) do={ :if ($statusRadCash = 0) do={ log warning "enable RadCash" / radius disable numbers=$radiusMikbill1 / radius enable numbers=$radiusRadCash / ip dhcp-server enable $dhcpServer1 / ip dhcp-relay disable $dhcpRelay1 } :global statusRadCash 1 } else { :if ($statusRadCash = 0) do={ log warning "disable RadCash" / radius enable numbers=$radiusMikbill1 / radius disable numbers=$radiusRadCash / ip dhcp-server disable $dhcpServer1 / ip dhcp-relay enable $dhcpRelay1 } :global statusRadCash 0 } </code> :local IP 10.10.10.1 - Меняем на свой IP биллинга :local COUNT 3 - Количество попыток проверки за раз (если хотя бы раз из количесва попыток пройдет сервер считается доступным) Регистрируем в скрипте свои DHCP-server/DHCP-relay/Radius в скрипте. Общая логика работы скрипта- при недоступности биллинга выключать dhcp-relay, включать dhcp-server, отключать radius на биллинг/ включать свой. И обратные действия в случае появления доступности биллингового сервера. Создаем свой radius-server ip - 127.0.0.1 При работе с DHCP в настройках dhcp-server включить "Use Radius" и в настройках локального радиуса поставить галку "dhcp" Для добавления микротиков для выгрузки в скрипте radcash.sh раскомментировать строку <code> # SSH_UPLOAD "$USERMAN_IP_1" "$USERMAN_SSH_PORT_1" "$USERMAN_LOGIN_1" "$USERMAN_APPLY_1" </code> И добавить эти переменные в radcash.conf по типу существующих. Таким образом можно добавлять в выгрузку неограниченное количество устройств mikrotik billing/howto/mikrotik_cache_userman.txt Последнее изменение: 7 лет назад — vilko