Перейти до

Stargazer+mysql+freeradius_mysql+vpn+stg-web


Рекомендованные сообщения

решил вернуться к простому freeradius - у..всё сделал..но дальше столкнулся с бочиной -

есть ли деньги, нету ли денег, онлайн/всегда он лайн/не он лайн = старгазеру на это глубоко наплевать, трафик не считается, бабки не снимаются...подключаются и пользуются Инетом все кому не лень..

Проверь срабатывают ли скрипты OnConnect, OnDisconnect и обязательно используй коллектор трафика ipq_linux он хорошо считает трафик с впн, правила в форварде должны быть QUEUE, например

$IPTABLES -I FORWARD -s $IP -j QUEUE

$IPTABLES -I FORWARD -d $IP -j QUEUE

Ссылка на сообщение
Поделиться на других сайтах
  • Відповіді 148
  • Створено
  • Остання відповідь

Top Posters In This Topic

Новый довесочек к этой сборке - шейпер входящего и исходящего трафика впн соединений реализованный следующим образом:

Создаем файл с произвольным именем в каталоге /etc/ppp/ip-up.d, например route с таким кодом

#!/bin/bash

INTERFACE=$1
LOCAL_IP=$4
REMOTE_IP=$5
IPPARAM=$6

LOGIN="stg_sql_user"
PASSWORD="stg_sql_password"
DB="stg_billing"

IPTABLES=/sbin/iptables

RES=`echo $REMOTE_IP | grep "^192\.168\.5.*" -c`
if [[ $RES = 1  ]]
then
   DOWN=`/usr/bin/mysql -u $LOGIN --password="$PASSWORD" -e "select Userdata1  from users where ip = '$REMOTE_IP'" $DB| /usr/bin/tail -n 1`
   UP=`/usr/bin/mysql -u $LOGIN --password="$PASSWORD" -e "select Userdata2  from users where ip = '$REMOTE_IP'" $DB| /usr/bin/tail -n 1`
   if [[ $DOWN = '' ]]
   then
       DOWN='2048'
   fi
   if [[ $UP = '' ]]
   then
       UP='128'
   fi
   DEVICE=$INTERFACE
   /sbin/tc qdisc del dev $DEVICE root
   /sbin/tc qdisc add dev $DEVICE root tbf rate ${DOWN}Kbit latency 50ms burst $[$DOWN*1024]
   /sbin/tc qdisc del dev $DEVICE handle ffff: ingress
   /sbin/tc qdisc add dev $DEVICE handle ffff: ingress
   /sbin/tc filter add dev $DEVICE parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${UP}Kbit burst $[$DOWN*1024] drop flowid :1
fi

 

 

Где:

LOGIN="stg_sql_user"

PASSWORD="stg_sql_password"

DB="stg_billing"

логин, пароль и название базы SQL используемой stg сервером

 

Скорость загрузки у пользователя в конфигураторе пишем в поле Userdata1, а скорость аплоада у пользователя пишем в Userdata2 в килобитах. Если эти значения не указаны используются DOWN='2048', и UP='128' - загрузка 2Мбита и аплоад 128 Кбит соотв.

 

Строчка RES=`echo $REMOTE_IP | grep "^192\.168\.5.*" -c` определяет является ли это подключение впн соединением пользователя (в данном случае это сеть 192.168.5*, если у Вас другая, то необходимо сделать соотв. изменения.)

 

Жду критики.

Спасибо за внимание.

Адрес для связи: omega@ua.fm

 

Для удобства в веб админке 8 версии можно поля Userdata1 и Userdata2 можно назвать Download и Upload соотв. Это можно сделать в пункте Userdata раздела Настройки.

Ссылка на сообщение
Поделиться на других сайтах
/sbin/tc qdisc del dev $DEVICE root

  /sbin/tc qdisc add dev $DEVICE root tbf rate ${DOWN}Kbit latency 50ms burst $[$DOWN*1024]

  /sbin/tc qdisc del dev $DEVICE handle ffff: ingress

  /sbin/tc qdisc add dev $DEVICE handle ffff: ingress

  /sbin/tc filter add dev $DEVICE parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${UP}Kbit burst $[$DOWN*1024] drop flowid :1

а если использовать ето только не для интерфеса а для айпи.... то как бы выглядили ети строки?

Ссылка на сообщение
Поделиться на других сайтах

Всем привет. Сталкнулся с такой проблемой. Настраивал всё как сказанно здесь и всё прекрассно работает за исключением одного но. Не хочeт правильно считать хоть ты тресни. Сначала не считало трафик вообще, после того как заменил в форварде ACCEPT на QUEUE считать начало но коряво. То есть есть подозрение что не учитывается тср. Мои конфиги

 

stargazer.conf

 

# Имя лог-файла куда пушутся события

LogFile = /var/log/stargazer.log

 

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

Rules = /etc/stargazer/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

 

DayFeeIsLastDay=yes

WriteFreeMbTraffCost=no

 

# День сброса данных о трафике за месяц и день перехода пользователей на новые тарифы

# Значения: 0...31. 0 - Последний день месяца

DayResetTraff = 1

 

# "Размазанное" снятие абонплаты. Снятие АП не раз в месяц, а каждый

# день 1/30 или 1/31 части АП

# Значения: yes, no

SpreadFee = no

 

# Данная опция определяет может ли пользователь получить доступ в интерент

# если у него на счету нет денег, но остался предоплаченный трафик

# Значения: yes, no

FreeMbAllowInet = no

 

# Названия направлений. Направления без названий не будут отображаться в

# авторизаторе и конфигураторе. Названия состоящие из нескольких слов должны

# быть взяты в кавычки

<DirNames>

DirName0 =

DirName1 = MediaServer

DirName2 = World

DirName3 =

DirName4 =

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 = /usr/lib/stg/

 

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

# Store module

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

 

<StoreModule store_mysql>

# stg_billing - название базы с которой будет работать биллинг

# stg_sql_user - пользователь для этой базы

# stg_sql_password - пароль для этого пользователя

dbuser = stg

rootdbpass = aq1sw2de3

dbname = stg_base

dbhost = 127.0.0.1

</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 = 5555

</Module>

 

 

 

# Модуль захвата трафика "mod_cap_ether.so"

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

# Без параметров. Только имя модуля.

<Module cap_ipq>

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

</Module>

 

 

 

# Настройки модуля пингующего пользователей "mod_ping.so"

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

<Module ping>

 

# Время, в секундах, между пингами одного и тогоже пользователя

# Значения: 10...3600

PingDelay = 15

 

</Module>

 

</Modules>

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

 

 

правила iptables

 

 

LAN_IP="192.168.0.254"

LAN_IP_RANGE="192.168.0.0/24"

LAN_IFACE="eth0"

LO_IFACE="lo"

LO_IP="127.0.0.1"

INET_IP="192.168.3.3"

INET_IFACE="eth1"

IPTABLES="/sbin/iptables"

$IPTABLES -F

$IPTABLES -t nat -F

$IPTABLES -t mangle -F

$IPTABLES -X

$IPTABLES -t nat -X

$IPTABLES -t mangle -X

$IPTABLES -F FORWARD

/sbin/depmod -a

/sbin/modprobe ip_conntrack

/sbin/modprobe ip_tables

/sbin/modprobe iptable_filter

/sbin/modprobe iptable_mangle

/sbin/modprobe iptable_nat

/sbin/modprobe ipt_LOG

echo "1" > /proc/sys/net/ipv4/ip_forward

$IPTABLES -P INPUT DROP

$IPTABLES -P OUTPUT DROP

$IPTABLES -P FORWARD DROP

$IPTABLES -N bad_tcp_packets

$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \

--log-prefix "New not syn:"

$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

$IPTABLES -N icmp_packets

$IPTABLES -N tcp_packets

$IPTABLES -N udpincoming_packets

$IPTABLES -N allowed

$IPTABLES -A allowed -p TCP --syn -j ACCEPT

$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A allowed -p TCP -j DROP

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 1723 -j allowed

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed

$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 5555 -j allowed

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets

$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udpincoming_packets

$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT

$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT

$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \

-j ACCEPT

$IPTABLES -I INPUT 2 -p tcp --dport 3128 -s 192.168.0.0/24 -j REJECT

$IPTABLES -I INPUT 2 -p tcp --dport 2121 -s 192.168.0.0/24 -j REJECT

$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \

--log-level DEBUG --log-prefix "IPT INPUT packet died: "

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT

$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT

$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \

--log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

$IPTABLES -P FORWARD DROP

$IPTABLES -A FORWARD -i ppp+ -s 192.168.10.0/24 -o eth1 -j REJECT

$IPTABLES -A FORWARD -i eth1 -o ppp+ -j QUEUE

$IPTABLES -A FORWARD -i ppp+ -o eth1 -j QUEUE

 

 

 

onconnect

#!/bin/bash

# Login

LOGIN=$1

 

#user IP

IP=$2

 

#cash

CASH=$3

 

#user ID

ID=$4

 

#Selected dirs to connect

DIRS=$4

 

 

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

iptables -I FORWARD 2 -i ppp+ -s $IP -o eth1 -j QUEUE

iptables -A INPUT -i ppp+ -s $IP -j QUEUE

iptables -t nat -A PREROUTING -s $IP/255.255.255.255 -d ! 192.168.10.0/255.255.255.0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.3.3:3128

 

 

OnDisconnect

 

#!/bin/bash

# Login

LOGIN=$1

 

#user IP

IP=$2

 

#cash

CASH=$3

 

#user ID

ID=$4

 

#Selected dirs to disconnect

DIRS=$4

 

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

iptables -D FORWARD -i ppp+ -s $IP -o eth1 -j QUEUE

iptables -D INPUT -ppp+ -s $IP -j QUEUE

iptables -t nat -D PREROUTING -s $IP/255.255.255.255 -d ! 192.168.10.0/255.255.255.0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.3.3:3128

 

 

 

Очень прошу вашей помощи, потому как сам не знаю в какую сторону думать

Ссылка на сообщение
Поделиться на других сайтах

2 ar2r

Это необходимое условие - все пропускать через прокс ?

Мы тоже как то делали похожим образом, помню там была проблема в том, что все что заворачивалось на прокс не проходило, или както криво проходило через правила форварда QUEUE, подробностей уже не помню.

Попробуй локализовать проблему, убрав прокс (сделав просто маскарад) и проверить подсчет трафика проходящего просто через форвард.

Ссылка на сообщение
Поделиться на других сайтах

прокс был бы очень желателен, но по ходу проблемка вся из за него, потому как то что проходит мима прокса вроде как считается....бум пробовать без него....отпишусь чё получится

Ссылка на сообщение
Поделиться на других сайтах

Мое..

привязываем к ip-up.local

 

#!/bin/bash

 

 

echo "start shaper"

IF=$1

RATE=16kbit

ADDR=$2

BUFF=1600

USER=$3

 

usr="stg_usr"

pass="pass"

db="stg_db"

sql="SELECT \`Tariff\` FROM \`users\` WHERE (\`LOGIN\`= \"$USER\")"

 

sql_res=`mysql -e "$sql" --user="$usr" --password="$pass" "$db" `

ultima_res=`echo $sql_res|sed -e "s/Tariff //"`

 

 

 

 

 

 

 

if [ "x$ultima_res" = "x1024" ]; then

RATE=1024kbit

BUFF=102400

 

elif [ "x$ultima_res" = "x64" ]; then

RATE=64kbit

BUFF=6400

elif [ "x$ultima_res" = "x128" ]; then

RATE=128kbit

BUFF=12800

elif [ "x$ultima_res" = "x256" ]; then

RATE=256kbit

BUFF=25600

elif [ "x$ultima_res" = "x96" ]; then

RATE=96kbit

BUFF=9600

 

fi

 

echo "start USER= $USER logdev = $IF , RATE = $RATE, tariff= $ultima_res" >>/var/log/shaper.log

 

#exit

 

tc qdisc del dev $IF root tbf rate 16kbit latency 20ms buffer 1600

 

tc qdisc add dev $IF root tbf rate $RATE latency 20ms buffer $BUFF

 

exit 0

Ссылка на сообщение
Поделиться на других сайтах

Подскажите в чём может быть проблема....когда чел лазиет в инете то его тек трафик отображется в консольном конфигураторе то есть сколько он скачал и так далее но через веб интерфейс в историе этого не видно до тех пор пока не перезапустишь старгейзер. В кокую сторону грешить? Кстати началось это после того ка произошёл сбой с электричеством.

Ссылка на сообщение
Поделиться на других сайтах
Подскажите в чём может быть проблема....когда чел лазиет в инете то его тек трафик отображется в консольном конфигураторе то есть сколько он скачал и так далее но через веб интерфейс в историе этого не видно до тех пор пока не перезапустишь старгейзер. В кокую сторону грешить? Кстати началось это после того ка произошёл сбой с электричеством.

телепаты в отпуске

Ссылка на сообщение
Поделиться на других сайтах
Подскажите в чём может быть проблема....когда чел лазиет в инете то его тек трафик отображется в консольном конфигураторе то есть сколько он скачал и так далее но через веб интерфейс в историе этого не видно до тех пор пока не перезапустишь старгейзер. В кокую сторону грешить?

Это не проблема. Трафик активной сессии показывает с опозданием. Потому как эти данные берутся из БД, запись куда производится через определенный в конфиге СТГ промежуток времени.

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...
файла mysql.h в сиcтеме вообще нет

в инклудах ищи его

Пробегал поиском по всей системе с шаблоном *mysql.h Поиск ничего не дал...

Ниак не мог построить mod_store_mysql. Ось Fedora 7. Помогите новичку

Ссылка на сообщение
Поделиться на других сайтах

вопрос таков....при попытке законектится авторизатором к вышеназванной версии старгейзера в логах выдаёт следующее Script /etc/stargazer//OnConnect cannot be executed. File not found. Вопрос: откуда взялся второй слэш //OnConnect и как это исправить?

Ссылка на сообщение
Поделиться на других сайтах
вопрос таков....при попытке законектится авторизатором к вышеназванной версии старгейзера в логах выдаёт следующее Script /etc/stargazer//OnConnect cannot be executed. File not found. Вопрос: откуда взялся второй слэш //OnConnect и как это исправить?

Двойной слеш ничего не меняет. Проверь наличие файла по указанному пути и права на него.

Ссылка на сообщение
Поделиться на других сайтах

Теперь такая беда

2008-02-06 21:52:23 -- Stg v. Stg 2.403b

2008-02-06 21:52:23 -- Message queue created successfully. msgKey=5555 msgID=32768

2008-02-06 21:52:23 -- Timer thread started successfully.

2008-02-06 21:52:23 -- Storage plugin: mysql_store v.0.67 (Alf). Loading successfull.

2008-02-06 21:52:23 -- Users started successfully.

2008-02-06 21:52:23 -- Traffcounter started successfully.

2008-02-06 21:52:23 -- Error: Cannot open socket!

2008-02-06 21:52:23 -- +++++++++++++++++++++++++++++++++++++++++++++

2008-02-06 21:52:23 -- Module: 'Stg configurator v.0.05'. Stop successfull.

2008-02-06 21:52:23 -- Module: 'Pinger v.1.01'. Stop successfull.

2008-02-06 21:52:23 -- Module: 'Always Online authorizator v.1.0'. Stop successfull.

2008-02-06 21:52:23 -- Module: 'InetAccess authorizator v.1.1'. Stop successfull.

2008-02-06 21:52:23 -- Module: 'ipq_cap v.1.1'. Stop successfull.

2008-02-06 21:52:24 -- Traffcounter: Stop successfull.

2008-02-06 21:52:24 -- Users: Stop successfull.

2008-02-06 21:52:27 -- Queue removed successfully.

2008-02-06 21:52:27 -- StgTimer: Stop successfull.

2008-02-06 21:52:27 -- Stg stopped successfully.

2008-02-06 21:52:27 -- ---------------------------------------------

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

Подскажите в чем грабли ? собираюне патченую версию - собирается нормально а когда патченую версию пытаюсь собрать или накладываю патч на ту версию что без патча собиралась - перестает собираться :)

ось Ubuntu 7.10, Gutsy Gibbon

 

root@Win98:~/stg-2.4-2007.01.20-13.47.20/projects/stargazer# ./build

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

Building STG 2.4 for Linux

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

Makeing stg_logger.lib

cp stg_logger.h ../../include/

cp libstg_logger.a ../../lib/

Makeing crypto.lib

cp ag_md5.h blowfish.h ../../include/

cp libcrypto.a ../../lib/

Makeing common.lib

g++ -g -Wall -I ../../include/ -I ./ -DLINUX -c common.cpp

ar rc libstg_common.a debug.o stg_error.o common.o

ranlib libstg_common.a

cp debug.h stg_error.h common.h ../../include/

cp libstg_common.a ../../lib/

Makeing script_executer.lib

g++ -g -Wall -I ../../include/ -I ./ -DLINUX -DSTG_TIME -c script_executer.cpp

ar rc libscript_executer.a script_executer.o

ranlib libscript_executer.a

cp script_executer.h ../../include/

cp libscript_executer.a ../../lib/

Makeing conffiles.lib

cp conffiles.h ../../include/

cp libconffiles.a ../../lib/

Makeing hostallow.lib

cp hostallow.h ../../include/

cp libhostallow.a ../../lib/

Makeing pinger.lib

cp pinger.h ../../include/

cp libstg_pinger.a ../../lib/

Makeing dotconfpp.lib

cp dotconfpp.h mempool.h ../../include/

cp libdotconfpp.a ../../lib/

deps:11: *** пропущен разделитель. Останов.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.


×
×
  • Створити нове...