Search
Write a publication
Pull to refresh

Биллинговая система сетей Stargazer

Добрый день!

Так сложились обстоятельства, что на третьем курсе обучения в институте мне пришлось переезжать в другой город. В общежитии в котором я поселился предоставлялся интернет с суровыми 1,5 рубля за 1 мегабайт. Конечно же это меня не устраивало, так как в городе уже были доступные безлимитные тарифы. В связи с этим было решено проводить свой интернет, с максимально возможной скоростью, и раздавать его по сети всем таким же жаждущим юзверям безлимитного интернета.

В наличии имелся ноутбук и простенький компьютер (intel 1,5Ghz / 512Mb ОЗУ / 80Gb HDD), который и решено было использовать в качестве сервера. К компьютеру докупилась еще одна сетевая карта. Одна соединялась с модемом. Вторая была пущена в локалку. Из за незнания linux, изначально на него ставилась винда в комплекте с usergate, затем прокси заменил kwf, который жутко подвешивал систему. В конечном итоге, из за постоянных подвисаний и жалоб пользователей, было решено потратить пару выходных для перехода на linux и по рекомендации знакомого на биллинговую систему stargazer. О том как установить и настроить stargazer пожалуйста сюда

Установка


Установка производилась на системе ubuntu 9.04, сейчас система также полноценно функционирует на ubuntu 10.04 LTS.
Для правильной работы нам необходимо установить: серверную часть, конфигуратор, авторизатор. Следуя установке по документации на сайте у меня ничего не вышло. Чтение google помогло найти следующие этапы установки системы.
Установку всю производил под root.

1. Необходимо доставить в систему несколько пакетов, делал я это строчкой вида:

apt-get install gcc gccxml expat expat*-dev libexpat make

2. Для сборки системы необходим пакет gmake, здесь используем ln для создания ссылки:

ln —s /usr/bin/make /usr/bin/gmake

3. Создаем в любом удобном для Вас месте папку куда будем закачивать: cd /home/root
mkdir stargazer
cd /stargazer

4. Качаем сам сервер:

wget http://stg.dp.ua/download/server/2,406/stg-2.406.src.tgz

5. Распаковываем

tar —zxvf stg-2.406.src.tgz

6. Собираем сервер:
cd /stg-2,406/projects/stargazer
./build


7. Устанавливаем:
make install

8. Для запуска пользуемся:
stargazer

Конфигурируем



eth0, 192.168.10.1/24, к нему подключены клиенты
eth1, 192.168.1.2/24, через него происходит выход во внешний мир. На этом же интерфейсе производится маскарадинг

Будем считать, что: направлекние №0 — локальный трафик (DIR0)
направлекние №1 — остальной трафик (DIR2)

Для начала редактируем файлик /etc/stargazer/rules:
# Самые скоростные ресурсы распологаем в самом верху наших правил
# Это позволит уменьшить нагрузку на процессор

#ПРОТОКОЛ АДРЕС НАПРАВЛЕНИЕ

# Трафик на роутер ALL 192.168.1.2 DIR0
ALL 192.168.10.1 DIR0

# Пинги не считаем ICMP 0.0.0.0/0 NULL

# Весь остальной траффик, те всё что не попало под предыдущие правила ALL 0.0.0.0/0 DIR2

Сохраняем закрываем. Далее настраиваем фаервол.

Назовем этот фвйл fw, сделаем его исполняемым и разместим в директории /etc/stargazer
#!/bin/bash

#Мой комп, комп второго админа
albert=192.168.10.105
zona7o=192.168.10.77

#Адреса роутера
server0=192.168.10.1
server1=192.168.1.2

# Интерфейс смотрящий на клиентов
iface_cli=eth1

# Интерфейс смотрящий во внешний мир
iface_world=eth0

#Порты, на которых работает конфигуратор и авторизатор
conf_port=5555
user_port1=5555

# Разрешаем форвардинг пакетов между интерфейсами
# Эта штука необязательна, просто в некоторых дистрибутивах
# по умолчанию форвардинг разрешен, а в некоторых — запрещен
# Если мы подстрахуемся, хуже не бкдет
echo «1» > /proc/sys/net/ipv4/ip_forward

# Очищаем правила файрвола, у меня кроме этой системы ничего больше сервер пока не делает поэтому следующие вещи делаем без проблем.
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X

# Политика по умолчанию DROP: всем всё запрещено
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Разрешаем всё на локальном интерфейсе
iptables -t filter -A INPUT -d 127.0.0.1 -j ACCEPT
iptables -t filter -A OUTPUT -s 127.0.0.1 -j ACCEPT

# Разрешить серверу общаться со внешним миром
iptables -t filter -A INPUT -i $iface_world -j ACCEPT
iptables -t filter -A OUTPUT -o $iface_world -j ACCEPT

# DNS.
iptables -t filter -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --sport 53 -j ACCEPT
iptables -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

# SSH
iptables -t filter -A INPUT -p tcp -s $office -d $server0 --dport 23688 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d $office -s $server0 --sport 23688 -j ACCEPT
iptables -t filter -A INPUT -p tcp -s $admin -d $server0 --dport 23688 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d $admin -s $server0 --sport 23688 -j ACCEPT

# Stargazer configurator
iptables -t filter -A INPUT -p tcp -s 192.168.10.0/24 -d $server0 --dport $conf_port -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -d 192.168.10.0/24 -s $server0 --sport $conf_port -j ACCEPT

# UDP stargazer InetAccess
iptables -t filter -A INPUT -p udp -s 192.168.10.0/24 --sport $user_port1 -d $server0 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -d 192.168.10.0/24 --dport $user_port1 -s $server0 -j ACCEPT

#Маскарад
iptables -t nat -A POSTROUTING -d 0.0.0.0/0 -j MASQUERADE

Далее по очереди правим файлы лежащие тут /etc/stargazer/

OnConnect
#!/bin/bash

ip=$2

iptables -t filter -A INPUT -s $ip -j ACCEPT
iptables -t filter -A FORWARD -s $ip -j ACCEPT
iptables -t filter -A FORWARD -d $ip -j ACCEPT
iptables -t filter -A OUTPUT -d $ip -j ACCEPT

#Также здесь разрешаем пинги, то есть после подключения к серверу
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A FORWARD -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

OnDisconnect
#!/bin/bash

ip=$2

iptables -t filter -D INPUT -s $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D INPUT -s $ip -j ACCEPT
done

##################################

iptables -t filter -D FORWARD -s $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -s $ip -j ACCEPT
done

##################################

iptables -t filter -D FORWARD -d $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D FORWARD -d $ip -j ACCEPT
done

##################################

iptables -t filter -D OUTPUT -d $ip -j ACCEPT
while [ $? -eq 0 ]
do
iptables -t filter -D OUTPUT -d $ip -j ACCEPT
done


stargazer.conf
# Файл настроек сервера stargazer

# Имя файла в котором определяются правила подсчета трафика
rules=/etc/stargazer/rules

# Рабочая директория сервере, тут содержатся данный о тарифах, изерах и админах
WorkDir=/var/stargazer/

# Имя лог файла куда пушутся события
LogFile=/var/log/stargazer.log

# Если юзер в течение UserTimeout секунд не подает признаков жизни, сервер отключит его
# (естественно, если клиент был подключен до этого)
UserTimeout=60

# Время через которое сервер повторяет проверку того, жив ли клиент. Также это время
# через которое у клиента обновляется его статитстика. UserDelay должно быть в
# 3...10 раз меньше чем UserTimeout
UserDelay=10

# Эта опция действительна только для сервера работающего со вторым типом тарифных планов
# Она определяет что будет передаватся программе InetAccess от сервера
# FreeMb = 0 — кол-во бесплатных мегабайт в пресчете на цену нулевого направления
# FreeMb = 1 — кол-во бесплатных мегабайт в пресчете на цену первого направления
# FreeMb = 2 — кол-во бесплатных мегабайт в пресчете на цену второго направления
#…
# FreeMb = 9 — кол-во бесплатных мегабайт в пресчете на цену девятого направления
# FreeMb = cash — кол-во денег на которые юзер может бесплатно качать
# FreeMb = none — ничего не передавать
FreeMb=2

# Время через которое пишется детальная статистика
# возможные значения 3, 2, 1, 1/2, 1/4, 1/6
# 3 — раз в три часа, 1 — раз в чаc, 1/2 — раз в пол часа, 1/6 — раз в 10 мин
StatTime=1/6

# Номер порта по которому сервер слушает обращения конфигуратора
adminPort=5555

# Номер порта по которому сервер ожидает обращения авторизатора
userPort=5555

# Максимальное кол-во юзеров. Эта величина влияет на кол-во памяти необходимой серверу
MaxUsers=50

# Опция определяющая менять ли местами upload и download
TurnTraff=no

# День снятия абонплаты
DayFee=1

# День, в который происходит обнуление счетчиков трафика, и
# перехода на новый тариф
DayResetTraff=1

# Имена направлений. Пустые имена не будут отображаться
# ни в авторизаторе, ни в конфигураторе
DirName0=Локаль
DirName1=Город
DirName2=Мир
DirName3=
DirName4=
DirName5=
DirName6=
DirName7=
DirName8=
DirName9=

# «Разамазанное» снятие абонплаты. Каждый день
# 1/30 (1/31, 12/28) часть абонплаты
SpreadFee=no

# Владелец, группа и права доступа на файлы
# статистики у пользователей
StatOwner=root
StatGroup=stg_stat
StatMode=640

# Владелец, группа и права доступа на файлы
# конфигурации у пользователей
ConfOwner=root
ConfGroup=root
ConfMode=640

# Владелец, группа и права доступа на логи
# у пользователей
UserLogOwner=root
UserLogGroup=root
UserLogMode=640

# Разрешение на доступ конфигуратором
AdminOrder=allow,deny
AdminAllowFrom=192.168.10.105 192.168.10.77 192.168.10.1
AdminDenyFrom=all

# Разрешение на доступ авторизатором
UserOrder=allow,deny
UserAllowFrom=192.168.10.0/24
UserDenyFrom=all

# Запрет на слишком частые обращения на порт авторизатора
FloodControl=yes


Теперь добавляем в /etc/rc.local
/etc/stargazer/fw
stargazer


Теперь остается конфигуратором добавить тарифы, пользователей. У конфигуратора есть интерфейс там все просто не думаю что нужно рассказывать как это делать а то статья будет просто огромной.
Так выглядит окно конфигуратора:
image
Окно авторизатора:
image

Конфигуратор существует под windows и linux, так же как и авторизатор.

Вот впринципе и все что я хотел Вам рассказать.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.