Mikrotik - кеш-система базы абонентов mikbill на основе User Manager
Решение копирует в реальном времени всю базу пользователей на Mikrotik. При потере связи с сервером mikbill Mikrotik автоматически переключается на собственный радиус. В итоге падение сервера остается незамеченным для абонентов. Соединение даже не рвется. Шейпера также создаются по настройкам тарифов учеток. При восстановлении связи с сервером происходит автоматическое обратное переключение абонентов.
Работает с PPPoE/PPPtP и Hotspot, можно даже одновременно на одном NAS.
Выгрузка радиус-шейперов из тарифов (значения Rx/Tx).
Работает с PPPoE/PPPtP и Hotspot, можно даже одновременно на одном NAS.
Выгрузка радиус-шейперов из тарифов (значения Rx/Tx).
Выгрузка IP учеток с биллинга.
Скрипт учитывает разрешенный минус.
Учет индивидуальных шейперов в учетке.
Общая выгрузка делается после 24.00, а после в течении дня учетки добавляются при пополнении. То есть, практически, кеш работает в реальном времени.
1. При добавлении учетной записи (проверка новых учеток раз в 5 мин)
2. При пополнении (сразу)
3. При включении из замороженных (сразу)
4. Можно обновить вручную все через админку (настройки-действия-обновить шейперы)
Новая версия (скрипты переведены на php, поддержка режима работы с mac-onu)\
Тут только то, что отличается от установки версии приведенной ниже
wget https://github.com/mikbill/design/raw/master/radiuscash/v3/mikro/mysqlconnect.php wget https://github.com/mikbill/design/raw/master/radiuscash/v3/mikro/radcash.php wget https://github.com/mikbill/design/raw/master/radiuscash/v3/mikro/radcash_check_new_uid.php wget https://github.com/mikbill/design/raw/master/radiuscash/v3/mikro/radcash_conf.php wget https://github.com/mikbill/design/raw/master/radiuscash/v3/mikro/radcash_lib.php wget https://github.com/mikbill/design/raw/master/radiuscash/v3/mikro/radcash_upload.sh wget https://github.com/mikbill/design/raw/master/radiuscash/v3/mikro/update_uid.php
Крон
# 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
Установка
- 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
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
Настаиваем синхронизацию при добавлении новой учетной записи в админке
5. Настраиваем авторизацию по ключу между сервером и mikrotik
6. Cоздаем скрипт мониторящий сервер биллинга и добавляем его в scheduler например раз в минуту
Выбрать все релеи и сервера можно подобной командой
:local IP 10.10.10.1 - Меняем на свой IP биллинга
- 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/
для ppp:
для ipoe:
(осторожно, у меня сильно глючило отображение веб, приходилось каждый раз чистить кеш)
Учетка в панель отдельная! По умолчанию admin с пустым паролем. Проверить учетку для входа можно командой
или делаем тоже самое через консольУчетка в панель отдельная! По умолчанию admin с пустым паролем. Проверить учетку для входа можно командой
- /tool user-manager customer print
/tool user-manager router add customer=admin ip-address=127.0.0.1 shared-secret=RADIUSSECRET
/tool user-manager profile add name=admin owner=admin3. Создаем радиус-клиент на микротике (обязательно ниже микбиловского)
для ppp:
/radius add address=127.0.0.1 secret=RADIUSSECRET service=ppp
/radius add address=127.0.0.1 secret=RADIUSSECRET service=hotspot4. Проверяем что микротик доступен по ssh с серера
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
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
Добавляем исполнение скрипта по крону
Комментарии
Отправить комментарий