Mikrotik - кеш-система базы абонентов mikbill на основе User Manager

             Решение копирует в реальном времени всю базу пользователей на Mikrotik. При потере связи с сервером mikbill Mikrotik автоматически переключается на собственный радиус. В итоге падение сервера остается незамеченным для абонентов. Соединение даже не рвется. Шейпера также создаются по настройкам тарифов учеток. При восстановлении связи с сервером происходит автоматическое обратное переключение абонентов.

Работает с PPPoE/PPPtP и Hotspot, можно даже одновременно на одном NAS.

Выгрузка радиус-шейперов из тарифов (значения Rx/Tx).

Выгрузка IP учеток с биллинга.

Скрипт учитывает разрешенный минус.
Учет индивидуальных шейперов в учетке.

Общая выгрузка делается после 24.00, а после в течении дня учетки добавляются при пополнении. То есть, практически, кеш работает в реальном времени.
1. При добавлении учетной записи (проверка новых учеток раз в 5 мин) 
2. При пополнении (сразу) 
3. При включении из замороженных (сразу) 
4. Можно обновить вручную все через админку (настройки-действия-обновить шейперы)

Новая версия (скрипты переведены на php, поддержка режима работы с mac-onu)\
Тут только то, что отличается от установки версии приведенной ниже


Крон
# RadCash
20 00 * * * root /usr/bin/php /var/mikbill/custom_scripts/radiuscash/radcash.php
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_payment_event.sh
# RadCash
/usr/bin/php /var/mikbill/custom_scripts/radiuscash/update_uid.php $2
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_onoff_user_event.sh
# RadCash
/usr/bin/php /var/mikbill/custom_scripts/radiuscash/update_uid.php  $2
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_pcq.sh
# RadCash
/usr/bin/php /var/mikbill/custom_scripts/radiuscash/radcash.php
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_5min.sh
# RadCash
/usr/bin/php /var/mikbill/custom_scripts/radiuscash/radcash_check_new_uid.php


Установка


Качаем файлы в отдельный каталог, например в /home/radcash/
  • 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
Даем права на исполнение
  • chmod +x radcash.sh update_uid.sh radcash_check_new_uid.sh
Правим radcash.conf
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

Настраиваем крон
  • nano /etc/crontab
# RadCash
20 00 * * * root /home/radcash/radcash.sh

Настраиваем выгрузку при пополнении
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_payment_event.sh
Добавляем в конец файла

# RadCash
/home/radcash/update_uid.sh $2
Настраиваем выгрузку при включении из замороженных
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_onoff_user_event.sh
Добавляем в конец файла
# RadCash
/home/radcash/update_uid.sh $2
Добавляем ручную общую выгрузку через админку через Настройки-Действия-Обновить шейперы
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_pcq.sh
Добавляем в конец файла
# RadCash
/home/radcash/radcash.sh
Настаиваем синхронизацию при добавлении новой учетной записи в админке
  • nano /var/www/mikbill/admin/sys/scripts/mikbill_5min.sh
# RadCash
/home/radcash/radcash_check_new_uid.sh

Настройка Mikrotik

1. Качаем и устанавливаем пакет User Manager для своей версии микротика http://www.mikrotik.com/download

2. Доступ к управлению через веб http://IP_MIKROTIK/userman/
(осторожно, у меня сильно глючило отображение веб, приходилось каждый раз чистить кеш)
Учетка в панель отдельная! По умолчанию admin с пустым паролем. Проверить учетку для входа можно командой
  • /tool user-manager customer print
Настраиваем routers и создаем профиль admin
или делаем тоже самое через консоль
/tool user-manager router add customer=admin ip-address=127.0.0.1 shared-secret=RADIUSSECRET
/tool user-manager profile add name=admin owner=admin
3. Создаем радиус-клиент на микротике (обязательно ниже микбиловского)

для ppp:

/radius add address=127.0.0.1 secret=RADIUSSECRET service=ppp

для ipoe:

/radius add address=127.0.0.1 secret=RADIUSSECRET service=hotspot
4. Проверяем что микротик доступен по ssh с серера

5. Настраиваем авторизацию по ключу между сервером и mikrotik
6. Cоздаем скрипт мониторящий сервер биллинга и добавляем его в scheduler например раз в минуту

: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 = 1) 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
    }
На заметку
Выбрать все релеи и сервера можно подобной командой

  • ip dhcp-relay disable numbers=[/ip dhcp-relay find]



: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 раскомментировать строку
# SSH_UPLOAD "$USERMAN_IP_1" "$USERMAN_SSH_PORT_1" "$USERMAN_LOGIN_1" "$USERMAN_APPLY_1"
И добавить эти переменные в radcash.conf по типу существующих. Таким образом можно добавлять в выгрузку неограниченное количество устройств mikrotik

Старая версия (упрощенная)

  • nano radiuscash.sh
#!/bin/bash
USERMAN_IP="192.168.10.150"
USERMAN_LOGIN="mikbill"
USERMAN_PASSWORD="mikbill"
UPLOAD="userman.rsc"

HOME_DIR=$(cd $(dirname $0)&& pwd)
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}')
                                                  
MAC=`mysql -D mikbill -u $db_user -p$db_password -e "SELECT local_mac FROM users " 2>/dev/null`
                                                  
echo "/tool user-manager user remove [find]" > $HOME_DIR/$UPLOAD
for i in $MAC; do                                 
echo "/tool user-manager user add customer=admin name=$i" >>$HOME_DIR/$UPLOAD
done                                              

curl --upload-file $HOME_DIR/$UPLOAD  ftp://$USERMAN_LOGIN:$USERMAN_PASSWORD@$USERMAN_IP/
CMD="/import file=$UPLOAD"
ssh $USERMAN_LOGIN@$USERMAN_IP "${CMD}" > /dev/null

Указываем свои данные микротика на котором установлен User manager
USERMAN_IP
USERMAN_LOGIN
USERMAN_PASSWORD

Добавляем исполнение скрипта по крону

Комментарии

Популярные сообщения из этого блога

Accel-ppp команды

mikbill расшифровка завершений сессий

Zabbix agent установка и настройка