Jump to content

Самопроизвольное возрастание трафика


Recommended Posts

Люди добрые!

 

Я вроде не полный дурак, так чуть-чуть... :loop:

 

Ситуация в следующем. Поставил STG 2.4 и нарвался на такие грабли. Пока пользователи ходят просто по нету, ася и тд., все нормально. Как только что-то качают начинаються следующие чудеса:

 

Чем быстрее скорость и больше размер файла тем больше СТГ врет.

 

Пример: Файл 2Мб (скорость 80к/с) = 4Мб.

Файл 5Мб (скорость 170к/с) = 11.5Мб.

Файл 27Мб (скорость 110к/с) = 62Мб.

 

И деньги ЖРЕТ!

 

Переустановил СТГ (самый последний). EXPAT.

 

НЕ ФИГА!!!

 

 

 

 

 

 

Мой конфиг: AMD 2000+ / 512 / 3 net card + ppp0 / SLES 9

 

1 карта - локаль (192.168.128.0/17)

2 карта - соседняя сеть (192.168.0.0/24)

3 карта - ADSL с NAT и алиасы для серверов (192.168.100.0/24)

ppp0 - медленный анлим

 

Адреса динамические.

 

Конфиг файервола

#!/bin/bash

# Path
IPT=/usr/sbin/iptables
IP=/sbin/ip

# Admin IP
INTERPOL_IP="192.168.128.1"
MAX_IP="192.168.128.2"

# World net IP
SIRIUS_IP="213.179.251.48"
ADSL_IP="192.168.100.254"

# Nets
SKYNET_NET="192.168.0.0/24"
SERVER_NET="192.168.100.0/24"
CLIENT_NET="192.168.128.0/17"

# Router IP
SKYNET_IP="192.168.0.254"
SERVER_IP="192.168.100.1"
CLIENT_IP="192.168.255.254"

# Interfaces
SERVER_IFACE="eth0"
CLIENT_IFACE="eth1"
SKYNET_IFACE="eth2"
SIRIUS_IFACE="ppp0"

#Ports STG
USER_PORT="5555"
ADMIN_PORT="7777"

# Services
WWW="192.168.100.4"

# Enable forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Clear farewall
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# Default police
$IPT -t filter -P INPUT DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT DROP

# Enable ping
$IPT -t filter -A INPUT -p icmp -j ACCEPT
$IPT -t filter -A FORWARD -p icmp -j ACCEPT
$IPT -t filter -A OUTPUT -p icmp -j ACCEPT

# Enable full on local interface
$IPT -t filter -A INPUT -s 127.0.0.1 -j ACCEPT
$IPT -t filter -A INPUT -d 127.0.0.1 -j ACCEPT
$IPT -t filter -A OUTPUT -s 127.0.0.1 -j ACCEPT
$IPT -t filter -A OUTPUT -d 127.0.0.1 -j ACCEPT

# Enable DNS
$IPT -t filter -A INPUT -p udp --sport 53 -j ACCEPT
$IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT
$IPT -t filter -A FORWARD -p udp --sport 53 -j ACCEPT
$IPT -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
$IPT -t filter -A OUTPUT -p udp --sport 53 -j ACCEPT
$IPT -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT

$IPT -t filter -A INPUT -p tcp --sport 53 -j ACCEPT
$IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
$IPT -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT
$IPT -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --sport 53 -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT

# Enable SSH
$IPT -t filter -A INPUT -p tcp -s $INTERPOL_IP -d $SERVER_IP --dport 22 -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp -d $INTERPOL_IP -s $SERVER_IP --sport 22 -j ACCEPT

$IPT -t filter -A INPUT -p tcp -s $MAX_IP -d $SERVER_IP --dport 22 -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp -d $MAX_IP -s $SERVER_IP --sport 22 -j ACCEPT

# Enable STG Access
$IPT -t filter -A INPUT -p tcp -s $INTERPOL_IP --dport $ADMIN_PORT -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp -d $INTERPOL_IP --sport $ADMIN_PORT -j ACCEPT

$IPT -t filter -A INPUT -p tcp -s $MAX_IP --dport $ADMIN_PORT -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp -d $MAX_IP --sport $ADMIN_PORT -j ACCEPT

$IPT -t filter -A INPUT -p udp -s $CLIENT_NET --dport $USER_PORT -j ACCEPT
$IPT -t filter -A OUTPUT -p udp -d $CLIENT_NET --sport $USER_PORT -j ACCEPT

# Enable DHCP
$IPT -t filter -A INPUT -p udp -s $CLIENT_NET --dport 67 -j ACCEPT
$IPT -t filter -A OUTPUT -p udp -d $CLIENT_NET --sport 67 -j ACCEPT

# Enable SERVER to world

# Enable NAT
$IPT -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source $SIRIUS_IP

# Enable local site for nologin
$IPT -t filter -A INPUT -p tcp --dport 80 -s $CLIENT_NET -j ACCEPT
$IPT -t filter -A OUTPUT -p tcp --sport 80 -d $CLIENT_NET -j ACCEPT

$IPT -t nat -A PREROUTING -p tcp --dport 80 -s $CLIENT_NET -j DNAT --to-destination $WWW

# Enable ADSL route
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 0 > $i
done

$IP rule del fwmark 1 table adsl
$IP rule add fwmark 1 table adsl
$IP route del default via $ADSL_IP dev $SERVER_IFACE table adsl
$IP route add default via $ADSL_IP dev $SERVER_IFACE table adsl
$IP route flush cache

 

Конфиг СТГ

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



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



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



# Время через которое пишется d БД детальная статистика пользователя
# Значения: 1, 1/2, 1/4, 1/6.
# 1 - раз в чаc, 1/2 - раз в пол часа, 1/4 - раз в 15 мин, 1/6 - раз в 10 мин
DetailStatWritePeriod=1/6



# Периодичность записи записи в БД информации о стаитистке пользователя (минуты)
# При большом кол-ве пользователей эту величину стоит увеличить, т.к.
# запись в БД может занимать длительное время.
# Значения: 1...1440 (минуты)
StatWritePeriod = 10



# День снятия абонплаты
# Значения: 0...31. 0 - Последний день месяца
DayFee = 1



# День сброса данных о трафике за месяц и день перехода пользователей на новые тарифы
# Значения: 0...31. 0 - Последний день месяца
DayResetTraff = 1



# "Размазанное" снятие абонплаты. Снятие АП не раз в месяц, а каждый
# день 1/30 или 1/31 части АП
# Значения: yes, no
SpreadFee = yes



# Данная опция определяет может ли пользователь получить доступ в интерент
# если у него на счету нет денег, но остался предоплаченный трафик
# Значения: yes, no
FreeMbAllowInet = no



# Названия направлений. Направления без названий не будут отображаться в
# авторизаторе и конфигураторе. Названия состоящие из нескольких слов должны
# быть взяты в кавычки
<DirNames>
   DirName0 = "File Server"
   DirName1 = "Local Net"
   DirName2 = "Mail"
   DirName3 = "SkyNet"
   DirName4 = "World"
   DirName5 =
   DirName6 =
   DirName7 = 
   DirName8 =
   DirName9 =
</DirNames>



# Кол-во запускаемых процессов stg-exec.
# Эти процессы отвечают за выполнение скриптов OnConnect, OnDisconnect, ...
# Кол-во процессов означает сколько скриптов могут выполнятся одновременно.
# Значения: 1...1024
ExecutersNum = 1



# Message Key для stg-exec.
# Идентификатор очереди сообщений для выполнятеля скриптов.
# Его изменение может понядобится если есть необходимость запустить несколько
# экземпляров stg. Если вы не понимаете, что это, не трогайте этот параметр!
# Значения: 0...2^32
# Значение по умолчанию: 5555
# ExecMsgKey = 5555



# Путь к директории, в которой находятся моудли сервера
ModulesPath = /server/stargazer/lib



################################################################################
# Store module
# Настройки плагина работающего с БД сервера

# Второй параметер - это имя модуля без mod_ в начале и .so в конце
# Т.е. полное имя модуля mod_store_files.so
<StoreModule store_files>

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


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


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

   # Владелец, группа и права доступа на лог-файлы (log) пользователя
   UserLogOwner = root
   UserLogGroup = root
   UserLogMode = 640
   
</StoreModule>



################################################################################
# Прочие модули

<Modules>

   # Настройки плагина авторизации Always Online "mod_auth_ao.so"
   # Второй параметер - это имя модуля без mod_ в начале и .so в конце
   # Т.е. полное имя модуля mod_auth_ao.so
   <Module auth_ao>
   </Module>



   # Настройки плагина авторизации InetAccess "mod_auth_ia.so"
   # Второй параметер - это имя модуля без mod_ в начале и .so в конце
   # Т.е. полное имя модуля mod_auth_ia.so
   <Module auth_ia>

       # Порт на которм принимаются обращения от авторизатора
       # Значения: 1...65534
       Port = 5555


       # Время между посылками запроса пользовател жив ли он 
       # и обновлением данных статистики (секунды)
       # Значения: 5...600
       UserDelay = 15


       #Таймаут для пользователя. Если в течение этого времени авторизатор
       #не отвечает, пользователь будет отключен
       # Значения: 15...1200
       UserTimeout = 65


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

   </Module>



   # Модули можно использовать несколько раз с разными параметрами
   #<Module auth_ia>
   #    Port = 7777
   #    UserDelay = 15
   #    UserTimeout = 65
   #    FreeMb = 0
   #</Module>



   # Настройки модуля конфигурации SgConfig "mod_conf_sg.so"
   # Второй параметер - это имя модуля без mod_ в начале и .so в конце
   <Module conf_sg>

       # Порт по которому сервер взаимодействует с конфигуратором
       # Значения: 1...65535
       Port = 7777

   </Module>



   # Модуль захвата трафика "mod_cap_ether.so"
   # Второй параметер - это имя модуля без mod_ в начале и .so в конце
   # Без параметров. Только имя модуля.
   <Module cap_ether>
       # Модуль без параметров
   </Module>



   # Настройки модуля пингующего пользователей "mod_ping.so"
   # Второй параметер - это имя модуля без mod_ в начале и .so в конце
   <Module ping>

       # Время, в секундах, между пингами одного и тогоже пользователя
       # Значения: 10...3600
       PingDelay = 15

   </Module>

</Modules>
################################################################################

 

Rules

# Ping
ICMP	0.0.0.0/0  NULL

# File server
ALL	192.168.100.6  DIR0

# Local net
ALL	192.168.128.0/17	DIR1
ALL	192.168.100.1  DIR1
ALL	192.168.100.4  DIR1
ALL	192.168.100.5  DIR1
ALL	192.168.100.6  DIR1
ALL	192.168.100.7  DIR1
ALL	192.168.100.254  DIR1

# Mail
ALL	192.168.100.3  DIR2
ALL	192.168.100.3  DIR2

# Resources SkyNet
ALL	192.168.0.0/24  DIR3
ALL	192.168.1.0/24  DIR3

# DNS
ALL	192.168.100.2  DIR4

# World
ALL     0.0.0.0/0        DIR4

 

OnConnect

#!/bin/bash

# Path
IPT=/usr/sbin/iptables
ADMINS=/server/stargazer/var/admins

# User IF
IF="eth1"

# Login
LOGIN=$1

# User IP
IP=$2

# Cash
CASH=$3

# User ID
ID=$4



# For all users
###########################################################################################################

# All traffic
$IPT -t filter -A INPUT -s $IP -j ACCEPT
$IPT -t filter -A FORWARD -s $IP -j ACCEPT
$IPT -t filter -A FORWARD -d $IP -j ACCEPT
$IPT -t filter -A OUTPUT -d $IP -j ACCEPT

# Disable DNAT
$IPT -t nat -I PREROUTING 1 -i $IF -s $IP -j ACCEPT



# For no admins
###########################################################################################################
for a in $ADMINS/*
do

   NAME=`basename $a .adm`

   if [ $LOGIN != $NAME ]; then

       # WWW
       $IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 80 -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 8080 -j MARK --set-mark 1
       $IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 443 -j MARK --set-mark 1

# FTP
       #$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 20 -j MARK --set-mark 1
       #$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 21 -j MARK --set-mark 1

       # Mail
$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 25 -j MARK --set-mark 1
       $IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 110 -j MARK --set-mark 1

       # For L2_C4 TheAbuss
       #$IPT -t mangle -A PREROUTING -i $IF -s $IP -d 85.21.79.41 -j MARK --set-mark 1

       break

   else
break

   fi

done
###########################################################################################################



echo "C `date +%Y.%m.%d-%H.%M.%S` IP:$IP Cash:$CASH" >> /server/stargazer/var/users/$LOGIN/connect.log

 

OnDisconnect

#!/bin/bash

# Path
IPT=/usr/sbin/iptables
ADMINS=/server/stargazer/var/admins

# User IF
IF="eth1"

# Login
LOGIN=$1

# User IP
IP=$2

# Cash
CASH=$3

# User ID
ID=$4



# For all users
###########################################################################################################

# All traffic
$IPT -t filter -A INPUT -s $IP -j ACCEPT
$IPT -t filter -A FORWARD -s $IP -j ACCEPT
$IPT -t filter -A FORWARD -d $IP -j ACCEPT
$IPT -t filter -A OUTPUT -d $IP -j ACCEPT

# Disable DNAT
$IPT -t nat -I PREROUTING 1 -i $IF -s $IP -j ACCEPT



# For no admins
###########################################################################################################
for a in $ADMINS/*
do

   NAME=`basename $a .adm`

   if [ $LOGIN != $NAME ]; then

       # WWW
       $IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 80 -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 8080 -j MARK --set-mark 1
       $IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 443 -j MARK --set-mark 1

# FTP
       #$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 20 -j MARK --set-mark 1
       #$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 21 -j MARK --set-mark 1

       # Mail
$IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 25 -j MARK --set-mark 1
       $IPT -t mangle -A PREROUTING -i $IF -s $IP -p tcp --dport 110 -j MARK --set-mark 1

       # For L2_C4 TheAbuss
       #$IPT -t mangle -A PREROUTING -i $IF -s $IP -d 85.21.79.41 -j MARK --set-mark 1

       break

   else
break

   fi

done
###########################################################################################################



echo "C `date +%Y.%m.%d-%H.%M.%S` IP:$IP Cash:$CASH" >> /server/stargazer/var/users/$LOGIN/connect.log

 

 

PS.

Просидел пол дня читая всю ветку форума, похожего не нашел!

 

Если кто наступал на грабли подскажите. Может попробовать на QUEUE перейти. Говорят чеснее считает. Правда пока не знаю как ее настроить.

 

ЗАРАНЕЕ ВСЕМ СЕНК!!!

Link to post
Share on other sites

мона было все это не писать

ключевое это:

<Module cap_ether>

# Модуль без параметров

</Module>

правь на:

<Module cap_ipq>

# Модуль без параметров

</Module>

 

потом перед запуском делаешь modprobe ip_queue(вроде так)

и все трафик нужный для подсчета заворачиваешь в очередь QUEUE

 

потипу

iptables -I FOWARD -s $ip -j QUEUE

iptables -I FOWARD -d $ip -j QUEUE

 

а вообще есть такое, стандартный коллектор и счетчик как то криво считают траф, я сначало тестил паралельно СТГ и UTM3, врет хорошо...

а вот когда на очереди заворачиваешь, считает вроде четко.

 

пс

 

маркировки админов для шейпера делаешь?шейпер на чем?HTB?

 

 

да и вот еще

если модуля ip_queue не будет, не торопись пересобирать ядро,

во всех последних шапкоподобных этот модуль идет в поставке стандартного

ядра.А еще может быть оно у тебя собрано прям в ядро.

У меня были обе ситуации, первая на центосе а вторая на генту.

Link to post
Share on other sites

Спасибо попробую.

 

Маркировка не для шейпера. По умолчанию деф.роут на медленный анлим. А по маркеровке меняю роут трафика от юзверей на АДСЛ.

Link to post
Share on other sites

скорей всего кривонаписаный неоткалиброваный коллектор, либо то что анализирует траф с устройств.

 

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

считают они 100% точно

вон у Max'a вроде как модуль коллектора под нетфло есть, ваще тема, мона трафик прям с циски заворачивать =)

Link to post
Share on other sites
вон у Max'a вроде как модуль коллектора под нетфло есть, ваще тема, мона трафик прям с циски заворачивать =)

да под цыски и писали, плюс есть куча nix* коллекторов которые позволяют с PC-роутеров сливать стату, тем самым централизуя базу юзеров, а то приходилось держать десять биллингов, в десяти местах.

Скоро кстати будем VPN и Mysql модули писать.

Link to post
Share on other sites

меня интересует как вы сформировали базу?

просто сам тоже хочу переписать готовый модуль на мускул тока пока

с базой не определился.

Link to post
Share on other sites
меня интересует как вы сформировали базу?

Ключевое слово: будем писать примерно с 1 ноября.

просто сам тоже хочу переписать готовый модуль на мускул тока пока

с базой не определился.

Скорее всего за основу ляжет модуль firebert, он почти готов помоему.

ВПН будем писать с 1 декабря.

Link to post
Share on other sites

базу уже щас можно написать, чем вас не устраивает написаный модуль mod_store_files?

там все понятно, я думаю его просто заменить своим.

Основная проблема для меня щас это структура бд

еще бы хоть краешком представлять как будет у разработчиков

чтобы потом не так болезнено было переходить на их вариант(если конечно понадобится).

Link to post
Share on other sites
базу уже щас можно написать, чем вас не устраивает написаный модуль mod_store_files?

пишу то код не я, а программер, спрошу у него...

Link to post
Share on other sites

меня смущает одно, получается для каждой процедуры-фунукция я должен явно или неявно вызывать функцию коннекта к базе, и соответсвенно в конце фунцию закрытия по хорошему.... это наверно, будет как то притормаживать работу СТГ

Link to post
Share on other sites
  • 2 months later...
меня смущает одно, получается для каждой процедуры-фунукция я должен явно или неявно вызывать функцию коннекта к базе, и соответсвенно в конце фунцию закрытия по хорошему.... это наверно, будет как то притормаживать работу СТГ

Меня тоже смущает этот момент. Можно конечно сделать глобальный указатель на открытую базу, но не красиво это.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...