Це стара версія документу!
Зміст
Общие аспекты установки Ubilling на FreeBSD 8.x
Внимание
Данное руководство актуально для версии Ubilling 0.1.9 (сильно устарело, почитать можно только для общего развития). Используйте Автоматическую установку Stargazer+Ubilling на FreeBSD при помощи UBinstaller в реальном мире.
Возможные конфигурации
Существует три наиболее распространенных конфигурации
- СУБД (MySQL), Stargazer, Ubilling, NAS на одном физическом сервере, возможно использование при небольших объемах пользовательских баз и трафика
- СУБД, Stargazer, Ubilling, NAS - различные физические сервере, для обеспечения максимального быстродействия и масштабирования по горизонтали
- Компромиссный с точки зрения стоимости и быстродействия вариант, когда СУБД, Stargazer, Ubilling размещены на одном сервера а вся обработка пользовательского трафика производиться на удаленном NAS
Требования к установленному ПО
- FreeBSD 6.x-8.x
- MySQL >=5.x
- libexpat
- Stargazer версии 2.407 или выше
- Конфигураторы Stargazer - sgconf/sgconf_xml/xmlrpc
- PHP версии >=5.x собранный с поддержкой CLI и MySQL
- Apache версии >=1.3
- ISC-DHCPD >=3.x
- sudo
- Ядро FreeBSD собранное с IPFW и DUMMYNET (для NAS)
- bandwidthd (для NAS)
- softflowd (для NAS)
- thttpd (для NAS)
Конфигурации установки для примера
1. СУБД (MySQL), Stargazer, Ubilling, NAS на одном физическом сервере

2. СУБД, Stargazer, Ubilling размещены на одном сервере а вся обработка пользовательского трафика производиться на удаленном NAS

Установка требуемого внешнего ПО
В данном примере рассматривается установка всего требуемого ПО при помощи системы портов.
# cd /usr/ports/databases/mysql51-server/ && make install # cd /usr/ports/net-mgmt/softflowd/ && make install # cd /usr/ports/net-mgmt/bandwidthd/ && make install # cd /usr/ports/textproc/expat2 && make install # cd /usr/ports/security/sudo && make install # cd /usr/ports/net/isc-dhcp31-server/ && make install
php5 должен быть собран с поддержкой CLI и модулем Apache
# cd /usr/ports/lang/php5 && make install
собираем модули MYSQL, MBSTRING, ICONV
# cd /usr/ports/lang/php5-extensions/ && make config && make install
редактируем /etc/rc.conf
mysql_enable="YES" apache_enable="YES" dhcpd_enable="YES" dhcpd_flags="-q" dhcpd_conf="/usr/local/etc/multinet/dhcpd.conf" dhcpd_ifaces="em0"
редактируем /usr/local/etc/sudoers
User_Alias BILLING = www BILLING ALL = NOPASSWD: ALL
запускаем Apache и MySQL
# /usr/local/etc/rc.d/mysql-server start # apachectl start
устанавливаем новый пароль пользователя root для mysql (newpassword — для примера)
#mysqladmin -u root password newpassword
Установка Stargazer
# fetch http://stg.dp.ua/download/server/2.407-p1/stg-2.407-p1.tar.gz # tar zxvf stg-2.407-p1.tar.gz # cd stg-2.407-p1/projects/stargazer/ # ./build # gmake install # cd ../sgconf && ./build && gmake && gmake install # cd ../sgconf_xml/ && ./build && gmake && gmake install
редактируем /etc/stargazer/stargazer.conf, приводя его в соответствие текущим потребностям Также рекомендуется ознакомиться с документацией по Stargazer для уточнения деталей.
# путь к логфайлу
LogFile = /var/log/stargazer.log
# путь к pid
PIDFile = /var/run/stargazer.pid
# файл с описанием класов трафика
Rules = /etc/stargazer/rules
# время записи детальной статистики в базу
DetailStatWritePeriod = 1/4
# время сброса счетчиков трафика в базу
StatWritePeriod = 10
# день снятия абонплаты
DayFee = 1
# это последний день месяца?
DayFeeIsLastDay = no
# день обнуления счетчиков трафика
DayResetTraff = 1
# "размазанное" снятие абонплаты
SpreadFee = no
# позволять пользователю доступ если у него остался предоплаченый трафик?
FreeMbAllowInet = no
# писать стоимость предоплаченого трафика?
WriteFreeMbTraffCost = yes
# снимать полную абонплату ежемесячно?
FullFee = yes
# названия класов трафика относительно /etc/stargazer/rules
<DirNames>
DirName0 = Internet
DirName1 = Internal
DirName2 =
DirName3 =
DirName4 =
DirName5 =
DirName6 =
DirName7 =
DirName8 =
DirName9 =
</DirNames>
ExecutersNum = 1
# путь модулей
ModulesPath = /usr/lib/stg
# модуль хранения данных
<StoreModule store_mysql>
# хост MySQL
dbhost = localhost
# имя базы
dbname = stg
# логин пользователя MySQL
dbuser = root
# пароль пользователя MySQL
rootdbpass = newpassword
</StoreModule>
<Modules>
# модуль авторизации AlwaysOnline (рекомендуется)
<Module auth_ao>
</Module>
# модуль авторизации штатного авторизатора stargazer
<Module auth_ia>
Port = 5555
UserDelay = 60
UserTimeout = 65
FreeMb = cash
</Module>
# модуль коллектора трафика NetFlow
<Module cap_nf>
TCPPort = 42111
UDPPort = 42111
</Module>
# модуль конфигуратора
<Module conf_sg>
Port = 5555
</Module>
</Modules>
редактируем конфиг /etc/stargazer/rules
ALL 192.168.56.0/24 DIR1 ALL 0.0.0.0/0 DIR0
запускаем stargazer
# stargazer
Убеждаемся в том что модуль store_mysql создал все нужные таблицы в БД
# mysql -u root -p stg -e "SHOW TABLES" Enter password: +---------------+ | Tables_in_stg | +---------------+ | admins | | messages | | stat | | tariffs | | users | +---------------+
Останавливаем stargazer
#killall stargazer
Устанавливаем текущую версию Ubilling
# cd /usr/local/www/data/ # mkdir billing # cd billing # fetch http://ubilling.net.ua/ub.tgz # tar zxvf ub.tgz # chmod -R 777 content/ config/ multinet/ exports/ remote_nas.conf vservices.php
разворачиваем дамп с нужными таблицами по умолчанию
# cat docs/test_dump.sql | mysql -u root -p stg
убеждаемся нормально ли развернулся дамп
#mysql -u root -p stg -e "SHOW TABLES" Enter password: +---------------+ | Tables_in_stg | +---------------+ | address | | admins | | apt | | build | | cardbank | | cardbrute | | cashtype | | city | | contracts | ..много разных таблиц.. | vcash | | vservices | | weblogs | +---------------+
редактируем конфиг config/mysql.ini приводя его в соответствие с текущей ситуацией
;Хост БД server = "localhost" ;порт MySQL port = "3306" ;логин пользователя MySQL username = "root" ;его пароль password = "newpassword" ;имя базы db = "stg" character = "UTF8" prefix = "billing"
редактируем файл config/billing.ini Прежде всего следует определиться с методом взаимодействия со stargazer. На данный момент возможен выбор одного из трех обработчиков: sgconf, sgconfxml(рекомендуется) и xmlrpc.
; метод взаимодействия со stargazer baseconf = sgconfxml ; путь к sgconf SGCONF=/usr/sbin/sgconf ; путь к sgconf_xml SGCONFXML=/usr/sbin/sgconf_xml ; хост на котором запущен stargazer STG_HOST=localhost ; порт конфигуратора STG_PORT=5555 ; порт XMLRPC XMLRPC_PORT=8081 ; логин администратора stargazer (по умолчанию admin) STG_LOGIN=admin ; пароль администратора stargazer (по умолчанию 123456) STG_PASSWD=123456 ;Пути окружения ;путь к sudo SUDO=/usr/local/bin/sudo ;путь к top в пакетном режиме TOP = /usr/bin/top -b ;путь к cat CAT=/bin/cat ;путь к grep GREP=/usr/bin/grep ;путь к RC скрипту isc-dhcpd RC_DHCPD=/usr/local/etc/rc.d/isc-dhcpd ;путь к uptime UPTIME=/usr/bin/uptime ;путь к ping PING=/sbin/ping ; путь к kill KILL=/bin/kill ; путь к PID файлу stargazer STGPID=/var/run/stargazer.pid ; указывает на потребность посылки SIGHUP к stargazer при добавлении NAS-а. STGNASHUP=0 ;путь к PHPSysInfo PHPSYSINFO=phpsysinfo/ ;язык по умолчанию LANG = ua ;размер иконок в "панели задач" TASKBAR_ICON_SIZE = 128 ; опции регистрации новых пользователей ; регистрировать новых пользователей со случайным MAC REGRANDOM_MAC=1 ; регистрировать новых пользователей с флагом "Всегда онлайн" REGALWONLINE=1 ; регистрировать новых пользователей с отключенной детальной статистикой REGDISABLEDSTAT=1
правильность путей к программам окружения можно проверить при помощи команды whereis
разворачиваем заготовки стартовых скриптов
# cp -f docs/presets/FreeBSD/etc/stargazer/* /etc/stargazer/ # chmod a+x /etc/stargazer/*
редактируем конфиг /etc/stargazer/config прописывая в него текущие параметры MySQL
host = localhost username = root password = newpassword database = stg
редактируем файл /etc/stargazer/OnConnect Вписываем интерфейс на котором будет производиться шейпинг пользователей а также контроль доступа в виде
IFACE="em0"
создаем несколько нужных симлинков
# chmod -R 777 /etc/stargazer/dn # ln -fs /usr/local/www/data/billing/multinet /usr/local/etc/multinet # ln -fs /usr/local/www/data/billing/remote_nas.conf /etc/stargazer/remote_nas.conf # ln -fs /usr/local/bandwidthd/htdocs /usr/local/www/data/band # ln -fs /etc/stargazer/dn /usr/local/www/data/billing/content/dn
редактируем конфиг /usr/local/bandwidthd/etc/bandwidthd.conf
прописывая в него подсеть пользователей, интерфейс для подсчета трафика, и опции вывода и сохранения данных
subnet 172.30.0.0/21 dev "em0" output_cdf true recover_cdf true
запускаем stargazer
# stargazer
и посещаем web-интерфейс который исходя из нашего примера имеет вид: http://192.168.56.2/billing/
логин и пароль по умолчанию admin/demo
Если мы увидели нечто подобное рисунку приведенному ниже значит установка идет по плану ;)
Возможные проблемы
Возможно в верхней части страницы будет отображаться ошибка
Warning: date() [function.date]: It is not safe to rely on the system's timezone settings
исправляется эта неожиданность довольно просто - вписыванием вашей текущей временной зоны, например date.timezone=“Europe/Kiev” в файл /usr/local/etc/php.ini и перезапуском Apache
#apachectl restart
Если при попытке нажать на иконку практически любого из модулей мы видим ошибку wrong data input возможно в PHP включен magic_quotes.
Вставляем в файл /usr/local/etc/php.ini следующее
magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Off
Перезапускаем Apache
# apachectl restart
Первоначальная настройка
Весь процес первоначальной настройки вплоть до регистрации первого пользователя запечатлен в виде трехминутного видеоролика
В общих чертах последовательность минимальной настройки приемлемой для того чтобы начинать регистрировать пользователей, должна быть такой:
- добавляем нового админа, назначаем ему права
- добавляем классы трафика в соответствии с описанными ранее для stargazer
- добавляем нужные сети
- вешаем на эти сети услуги
- добавляем нужные нам тарифы
- назначаем им скоростя
- добавляем сервера доступа
- настраиваем соответствующим образом dhcp
- добавляем населенные пункты
- добавляем в города улицы и дома куда будем селить абонентов
- также желательно заполнить справочник “предприниматели” своими реквизитами
Настройка DHCPD
Начиная с версии 0.0.8 глобальный конфиг dhcpd.conf, файлы с хостами и описания подсетей генерируються автоматически исходя из настроек заполненных в модулях “Сети” и “DHCP”. Единственное что теперь требуется это запускать isc-dhcpd с конфигом который находиться в /usr/local/etc/multinet/dhcpd.conf
Шаблонизация глобального конфига и описаний подсетей при надобности производиться в файлах config/dhcp/global.template и config/dhcp/subnets.template. Пожалуйста ознакомтесь с описанием макросов доступных в этих шаблонов по этой ссылке - это избавит вас от неожиданностей.
Периодические задачи
в # crontab -e добавляем
20 0 * * 1 cd /usr/local/www/data/billing/ ; /usr/local/bin/php /usr/local/www/data/billing/vservices.php > /var/log/vservices.log
Стартовый скрипт
/etc/rc.d/billing
#!/bin/sh /usr/sbin/stargazer /usr/local/bandwidthd/bandwidthd /usr/local/sbin/softflowd -i em0 -n 127.0.0.1:42111
назначаем ему нужные права
# chmod a+x /etc/rc.d/billing
останавливаем stargazer и проверяем все ли запускается как надо после чего смотрим как все запускается вместе:
# killall stargazer # /etc/rc.d/billing # ps aux | grep stargazer # ps aux | grep bandwidthd # ps aux | grep softflowd
Итак на данный момент мы рассмотрели с вами наиболее примитивный пример в котором сам биллинг, его БД, сенсор и коллектор netflow а также весь routing/shape пользовательского трафика проходят на одном единичном хосте. Естественно для сетей с каким либо существенным количеством абонентов и трафика это не является допустимой архитектурой. К счастью stargazer предлагает очень простой и елегантный механизм масштабирования по горизонтали, зовущийся rscriptd и позволяющий удаленно исполнять скрипты OnConnect/OnDisconnect.
Более глубоко настройка NAS будет рассмотрена в другом документе с наглядными примерами и заготовками конфигов. На этом этапе написания документации хотелось бы в общих чертах рассмотреть общие принципы работы удаленных NAS на rscriptd.
Основы конфигурации удаленного NAS на rscriptd
** вставляем в /etc/stargazer/stargazer.conf**
<Module remote_script> SendPeriod = 10 SubnetFile =/etc/stargazer/remote_nas.conf Password = secretpassword UserParams=Cash Tariff Port = 9999 </Module>
описания NAS для различных подсетей храняться в файле remote_nas.conf в виде
172.30.0.0/24 192.168.0.3
что соотвествует тому, что команды для пользователей в подсети 172.30.0.0/24 следует отправлять rscriptd запущенном на сервере 192.168.0.3
Сборка rscriptd
# fetch http://stg.dp.ua/download/server/2.407-p1/stg-2.407-p1.tar.gz # tar zxvf stg-2.407-p1.tar.gz # cd stg-2.407-p1/projects/rscriptd/ # ./build # gmake install
редактируем конфиг /etc/stargazer/rscriptd.conf
LogFileName=/var/log/rscriptd.log ExecutersNum=1 ConfigDir=/etc/rscriptd Password=secretpassword Port=9999 UserTimeout=60 ScriptOnConnect=/etc/rscriptd/OnConnect ScriptOnDisconnect=/etc/rscriptd/OnDisconnect
Скрипты OnConnect/OnDisconnect/GetSpeed/GetMac/GetUpSpeed вы можете использовать точно теже что и в описанном выше примере только с той разницей что параметры в OnConnect/OnDisconnect передаються в виде
LOGIN=$1 IP=$2 CASH=$4 ID=$3
Тонкая настройка
в файле config/alter.ini можно редактировать специфичные для разных ISP опции
Кабинет пользователя
- находиться в каталоге userstats
- следует прописать параметры БД в config/mysql.ini
- параметры самой статистики в config/userstats.ini
- Более подробное описание опций можно увидеть здесь
