Общие аспекты установки Ubilling на FreeBSD 8.x

Внимание

Данное руководство актуально для версии Ubilling 0.1.9 (сильно устарело, почитать можно только для общего развития). Используйте Автоматическую установку Stargazer+Ubilling на FreeBSD при помощи UBinstaller в реальном мире.

Возможные конфигурации

Существует три наиболее распространенных конфигурации

  1. СУБД (MySQL), Stargazer, Ubilling, NAS на одном физическом сервере, возможно использование при небольших объемах пользовательских баз и трафика
  2. СУБД, Stargazer, Ubilling, NAS - различные физические сервере, для обеспечения максимального быстродействия и масштабирования по горизонтали
  3. Компромиссный с точки зрения стоимости и быстродействия вариант, когда СУБД, 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

Первоначальная настройка

Весь процес первоначальной настройки вплоть до регистрации первого пользователя запечатлен в виде трехминутного видеоролика

В общих чертах последовательность минимальной настройки приемлемой для того чтобы начинать регистрировать пользователей, должна быть такой:

  1. добавляем нового админа, назначаем ему права
  2. добавляем классы трафика в соответствии с описанными ранее для stargazer
  3. добавляем нужные сети
  4. вешаем на эти сети услуги
  5. добавляем нужные нам тарифы
  6. назначаем им скоростя
  7. добавляем сервера доступа
  8. настраиваем соответствующим образом dhcp
  9. добавляем населенные пункты
  10. добавляем в города улицы и дома куда будем селить абонентов
  11. также желательно заполнить справочник «предприниматели» своими реквизитами

Настройка 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 опции

Кабинет пользователя

  1. находиться в каталоге userstats
  2. следует прописать параметры БД в config/mysql.ini
  3. параметры самой статистики в config/userstats.ini
  4. Более подробное описание опций можно увидеть здесь
setupfreebsd.txt · Последние изменения: 2015/02/21 01:10 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki