Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Наступна ревізія | Попередня ревізія | ||
|
setupubuntuserver1010 [2022/09/24 14:39] 127.0.0.1 зовнішнє редагування |
— (поточний) | ||
|---|---|---|---|
| Рядок 1: | Рядок 1: | ||
| - | **Установка Stargazer+Ubilling на Ubuntu Server 10.10** | ||
| - | |||
| - | ====== Установка требуемого внешнего ПО на сервер с Ubilling ====== | ||
| - | |||
| - | < | ||
| - | apt-get install mysql-server-core-5.1 mysql-client-core-5.1 libmysqlclient16 libmysqlclient-dev apache2 mysql-server expat libexpat-dev php5-cli libapache2-mod-php5 php5-mysql dhcp3-server build-essential bind9 bandwidthd softflowd | ||
| - | </ | ||
| - | При установке программ вас попросят ввести пароль для root от mysql. | ||
| - | |||
| - | |||
| - | **Включаем мод в php:** | ||
| - | < | ||
| - | |||
| - | **Редактируем / | ||
| - | < | ||
| - | User_Alias BILLING = www-data | ||
| - | BILLING | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Делаем симлинк на Bandwindthd** | ||
| - | < | ||
| - | ln -fs / | ||
| - | </ | ||
| - | |||
| - | |||
| - | ======= Установка IPSET ======= | ||
| - | |||
| - | **1. Качаем архив IPSET 4.x версии он нормально работает на Maverick (в последних версиях 12.04 можно установить через apt-get install ipset)** | ||
| - | [[http:// | ||
| - | |||
| - | **2. Распаковываем: | ||
| - | < | ||
| - | |||
| - | **3. Заходим в папку собираем и включаем: | ||
| - | < | ||
| - | cd ipset-4.5/ | ||
| - | |||
| - | make && make install && make clean | ||
| - | |||
| - | depmod && depmod -A | ||
| - | modprobe ip_set | ||
| - | </ | ||
| - | Всё должно пройти без ошибок. | ||
| - | |||
| - | И собственно всё.. Ipset уже готов служить вам =) | ||
| - | |||
| - | ======= Установка и настройка Htb ======= | ||
| - | |||
| - | 0. Качаем Htb: [[http:// | ||
| - | |||
| - | 1. В скрипте htb.init проверяем и корректируем по вкусу переменные HTB_PATH, HTB_CACHE, TC, IP, MP. | ||
| - | |||
| - | 2. < | ||
| - | |||
| - | 3. cd / | ||
| - | touch eth0 | ||
| - | touch eth1 | ||
| - | touch eth0-2.root | ||
| - | touch eth1-2.root | ||
| - | </ | ||
| - | |||
| - | |||
| - | nano eth0 < | ||
| - | DEFAULT=0 | ||
| - | R2Q=100 | ||
| - | </ | ||
| - | |||
| - | nano eth1 | ||
| - | < | ||
| - | DEFAULT=0 | ||
| - | R2Q=100 | ||
| - | </ | ||
| - | |||
| - | nano eth0-2.root | ||
| - | < | ||
| - | RATE=100Mbit | ||
| - | CEIL=100Mbit | ||
| - | </ | ||
| - | |||
| - | nano eth1-2.root | ||
| - | < | ||
| - | RATE=100Mbit | ||
| - | CEIL=100Mbit | ||
| - | </ | ||
| - | |||
| - | **Проверить работу скрипта htb.init, кроме спидтестов, | ||
| - | < | ||
| - | tc class show dev ВАШ_ИНТЕРФЕЙС | ||
| - | tc qdisc show dev ВАШ_ИНТЕРФЕЙС | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | ======= Установка Stargazer ======= | ||
| - | < | ||
| - | mkdir / | ||
| - | cd / | ||
| - | wget http:// | ||
| - | tar zxvf stg-2.407-p1.tar.gz | ||
| - | cd stg-2.407-p1/ | ||
| - | ./build | ||
| - | make install | ||
| - | cd ../sgconf && ./build && make && make install | ||
| - | cd ../ | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ======= Редактирование конфигов и настройка опций ======= | ||
| - | |||
| - | |||
| - | **Редактируем конфиг / | ||
| - | __Вот здесь очень сомнительное место. Возможно стоит его не рассматривать.__ | ||
| - | Сделайте симлинк на cap_nf и remote_script из / | ||
| - | и желательно удалить линк на cap_ether говорят он не вменяемый =) | ||
| - | И давайте сразу создадим директорию под логи - для удобства: | ||
| - | |||
| - | < | ||
| - | rm / | ||
| - | ln -fs / | ||
| - | mkdir / | ||
| - | </ | ||
| - | __ | ||
| - | Конец сомнительного места.__ | ||
| - | |||
| - | < | ||
| - | ################################################################################ | ||
| - | # Stargazer Configuration file # | ||
| - | ################################################################################ | ||
| - | |||
| - | # путь к логфайлу | ||
| - | LogFile = / | ||
| - | |||
| - | |||
| - | # путь к pid | ||
| - | PIDFile = / | ||
| - | |||
| - | |||
| - | # файл с описанием класов трафика | ||
| - | Rules = / | ||
| - | |||
| - | |||
| - | # время записи детальной статистики в базу | ||
| - | DetailStatWritePeriod = 1/4 | ||
| - | |||
| - | |||
| - | # время сброса счетчиков трафика в базу | ||
| - | StatWritePeriod = 10 | ||
| - | |||
| - | |||
| - | # день снятия абонплаты | ||
| - | DayFee = 1 | ||
| - | |||
| - | |||
| - | # это последний день месяца? | ||
| - | DayFeeIsLastDay = no | ||
| - | |||
| - | |||
| - | # день обнуления счетчиков трафика | ||
| - | DayResetTraff = 1 | ||
| - | |||
| - | |||
| - | # " | ||
| - | SpreadFee = no | ||
| - | |||
| - | |||
| - | # позволять пользователю доступ если у него остался предоплаченый трафик? | ||
| - | FreeMbAllowInet = no | ||
| - | |||
| - | |||
| - | # писать стоимость предоплаченого трафика? | ||
| - | WriteFreeMbTraffCost = yes | ||
| - | |||
| - | |||
| - | # снимать полную абонплату ежемесячно? | ||
| - | FullFee = yes | ||
| - | |||
| - | |||
| - | # названия класов трафика относительно / | ||
| - | < | ||
| - | DirName0 = Internet | ||
| - | DirName1 = Local | ||
| - | DirName2 = | ||
| - | DirName3 = | ||
| - | DirName4 = | ||
| - | DirName5 = | ||
| - | DirName6 = | ||
| - | DirName7 = | ||
| - | DirName8 = | ||
| - | DirName9 = | ||
| - | </ | ||
| - | ExecutersNum = 1 | ||
| - | |||
| - | |||
| - | # путь модулей | ||
| - | ModulesPath = / | ||
| - | |||
| - | |||
| - | # модуль хранения данных | ||
| - | < | ||
| - | # хост MySQL | ||
| - | dbhost = localhost | ||
| - | # имя базы | ||
| - | dbname = stg | ||
| - | # логин пользователя MySQL | ||
| - | dbuser = root | ||
| - | # пароль пользователя MySQL | ||
| - | rootdbpass = ваш_пароль | ||
| - | </ | ||
| - | < | ||
| - | |||
| - | |||
| - | # модуль авторизации AlwaysOnline (рекомендуется) | ||
| - | <Module auth_ao> | ||
| - | </ | ||
| - | |||
| - | |||
| - | # модуль авторизации штатного авторизатора stargazer | ||
| - | <Module auth_ia> | ||
| - | Port = 5555 | ||
| - | UserDelay = 60 | ||
| - | UserTimeout = 65 | ||
| - | FreeMb = cash | ||
| - | </ | ||
| - | |||
| - | |||
| - | # модуль коллектора трафика NetFlow | ||
| - | <Module conf_sg> | ||
| - | Port = 5555 | ||
| - | </ | ||
| - | |||
| - | <Module cap_nf> | ||
| - | TCPPort = 42111 | ||
| - | UDPPort = 42111 | ||
| - | </ | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | **Редактируем конфиг / | ||
| - | < | ||
| - | |||
| - | ALL | ||
| - | ALL | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | **И так первый запуск stargazer' | ||
| - | < | ||
| - | |||
| - | **Теперь проверим создались ли базы в MySQL** | ||
| - | < | ||
| - | |||
| - | В ответ должны увидеть это: | ||
| - | < | ||
| - | Tables_in_stg | ||
| - | |||
| - | admins | ||
| - | messages | ||
| - | stat | ||
| - | tariffs | ||
| - | users | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Выключаем stargazer: | ||
| - | < | ||
| - | |||
| - | **Теперь можно приступить к установке Ubilling' | ||
| - | |||
| - | < | ||
| - | mkdir billing | ||
| - | cd billing | ||
| - | wget http:// | ||
| - | tar zxvf ub.tgz | ||
| - | </ | ||
| - | |||
| - | **Тут у меня возникала проблема с правами на файлы..** | ||
| - | < | ||
| - | chmod -R 0777 content/ config/ multinet/ exports/ remote_nas.conf vservices.php | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Заливаем дамп mysql из ubilling:** | ||
| - | < | ||
| - | |||
| - | **Проверяем что дамп залит: | ||
| - | < | ||
| - | В ответ увидим много таблиц: | ||
| - | < | ||
| - | +-----------------+ | ||
| - | | Tables_in_stg | | ||
| - | +-----------------+ | ||
| - | | address | | ||
| - | | admins | | ||
| - | | ahenassign | | ||
| - | | apt | | ||
| - | | build | | ||
| - | | cardbank | | ||
| - | | cardbrute | | ||
| - | | cashtype | | ||
| - | | cfitems | | ||
| - | | cftypes | | ||
| - | | city | | ||
| - | | contracts | | ||
| - | | contrahens | | ||
| - | | cpe | | ||
| - | | cpetypes | | ||
| - | | dhcp | | ||
| - | | directions | | ||
| - | | dshape_time | | ||
| - | | emails | | ||
| - | | employee | | ||
| - | | jobs | | ||
| - | | jobtypes | | ||
| - | | logs_11_2011 | | ||
| - | | messages | | ||
| - | | modem_templates | | ||
| - | | modems | | ||
| - | | nas | | ||
| - | | nethosts | | ||
| - | | networks | | ||
| - | | notes | | ||
| - | | payments | | ||
| - | | phones | | ||
| - | | realname | | ||
| - | | services | | ||
| - | | servtariff | | ||
| - | | speeds | | ||
| - | | stat | | ||
| - | | street | | ||
| - | | switches | | ||
| - | | switchmodels | | ||
| - | | tags | | ||
| - | | tagtypes | | ||
| - | | tariffs | | ||
| - | | taskman | | ||
| - | | userreg | | ||
| - | | users | | ||
| - | | userspeeds | | ||
| - | | vcash | | ||
| - | | vcashlog | | ||
| - | | vservices | | ||
| - | | weblogs | | ||
| - | +-----------------+ | ||
| - | </ | ||
| - | |||
| - | **Редактируем конфиг в ubilling: / | ||
| - | |||
| - | < | ||
| - | ;Хост БД | ||
| - | server = " | ||
| - | ;порт MySQL | ||
| - | port = " | ||
| - | ;логин пользователя MySQL | ||
| - | username = " | ||
| - | ;его пароль | ||
| - | password = " | ||
| - | ;имя базы | ||
| - | db = " | ||
| - | character = " | ||
| - | prefix = " | ||
| - | |||
| - | **Редактирем конфиг в ubilling / | ||
| - | < | ||
| - | ; метод взаимодействия со stargazer | ||
| - | baseconf = sgconfxml | ||
| - | |||
| - | ; путь к sgconf | ||
| - | SGCONF=/ | ||
| - | |||
| - | ; путь к sgconf_xml | ||
| - | SGCONFXML=/ | ||
| - | |||
| - | ; хост на котором запущен stargazer | ||
| - | STG_HOST=localhost | ||
| - | |||
| - | ; порт конфигуратора | ||
| - | STG_PORT=5555 | ||
| - | |||
| - | ; порт XMLRPC | ||
| - | XMLRPC_PORT=8081 | ||
| - | |||
| - | ; логин администратора stargazer (по умолчанию admin) | ||
| - | STG_LOGIN=admin | ||
| - | |||
| - | ; пароль администратора stargazer (по умолчанию 1234567) | ||
| - | STG_PASSWD=123456 | ||
| - | |||
| - | ;Пути окружения | ||
| - | ;путь к sudo | ||
| - | SUDO=/ | ||
| - | |||
| - | ;путь к top в пакетном режиме | ||
| - | TOP = / | ||
| - | |||
| - | ;путь к cat | ||
| - | CAT=/ | ||
| - | |||
| - | ;путь к grep | ||
| - | GREP=/ | ||
| - | |||
| - | ;путь к RC скрипту isc-dhcpd | ||
| - | RC_DHCPD=/ | ||
| - | |||
| - | STGPID=/ | ||
| - | |||
| - | ;путь к uptime | ||
| - | UPTIME=/ | ||
| - | |||
| - | ;путь к ping | ||
| - | PING=/ | ||
| - | |||
| - | ;путь к PHPSysInfo | ||
| - | PHPSYSINFO=phpsysinfo/ | ||
| - | |||
| - | STGNASHUP=1 | ||
| - | |||
| - | ;язык по умолчанию | ||
| - | LANG = ru | ||
| - | |||
| - | ; | ||
| - | TASKBAR_ICON_SIZE = 64 | ||
| - | |||
| - | ; опции регистрации новых пользователей | ||
| - | ; регистрировать новых пользователей со случайным MAC | ||
| - | REGRANDOM_MAC=1 | ||
| - | |||
| - | ; регистрировать новых пользователей с флагом " | ||
| - | REGALWONLINE=1 | ||
| - | |||
| - | ; регистрировать новых пользователей с отключенной детальной статистикой | ||
| - | REGDISABLEDSTAT=1 | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | **Не забываем указать путь на будующий " | ||
| - | < | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Создаём симлинки на каталог и файл - без них ни чего не заработает =)** | ||
| - | < | ||
| - | ln -fs / | ||
| - | ln -fs / | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | **Копируем стандартные скрипты из Ubilling в stargazer и выставляем на них права.** | ||
| - | < | ||
| - | cp -f / | ||
| - | chmod a+x / | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Редактируем / | ||
| - | < | ||
| - | host = localhost | ||
| - | username = root | ||
| - | password = ваш_проль | ||
| - | database = stg | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | **Запускаем stargazer** | ||
| - | < | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ====== Создание зоны .isp, редактирование хостов и DHCP ====== | ||
| - | |||
| - | ** Редактируем файл / | ||
| - | < | ||
| - | include "/ | ||
| - | include "/ | ||
| - | include "/ | ||
| - | |||
| - | zone " | ||
| - | type master; | ||
| - | file "/ | ||
| - | }; | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | **Создаём файл и редактируем его** | ||
| - | < | ||
| - | cd /etc/bind/ | ||
| - | touch db.isp | ||
| - | nano db.isp | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Содержимое / | ||
| - | < | ||
| - | $TTL 3h | ||
| - | @ IN SOA billing.isp. root.billing.isp. 1 1d 12h 1w 3h | ||
| - | |||
| - | isp. IN NS billing.isp. | ||
| - | |||
| - | billing A 172.16.0.1 # | ||
| - | stat A 172.16.0.1 # | ||
| - | nas1 A 172.16.0.1 # | ||
| - | |||
| - | </ | ||
| - | |||
| - | ** Редактируем / | ||
| - | < | ||
| - | acl isp { | ||
| - | 172.16.0.0/ | ||
| - | }; | ||
| - | options { | ||
| - | directory "/ | ||
| - | |||
| - | auth-nxdomain no; # conform to RFC1035 | ||
| - | listen-on-v6 { any; }; | ||
| - | allow-query {" | ||
| - | }; | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | **Настройка хостов в Apache2 / | ||
| - | < | ||
| - | < | ||
| - | ServerName billing.isp | ||
| - | DocumentRoot "/ | ||
| - | AddDefaultCharset utf-8 | ||
| - | </ | ||
| - | |||
| - | |||
| - | < | ||
| - | ServerName stat.isp | ||
| - | DocumentRoot "/ | ||
| - | AddDefaultCharset utf-8 | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | ServerName nas1.isp | ||
| - | DocumentRoot "/ | ||
| - | AddDefaultCharset utf-8 | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | **Настройка DHCP | ||
| - | Чтобы dhcp заработал нужно отредактировать / | ||
| - | < | ||
| - | INTERFACES=" | ||
| - | </ | ||
| - | Это интерфейс на котором у нас в дальнейшем будут раздаваться IP адреса для абонентов. | ||
| - | |||
| - | |||
| - | **Редактируем / | ||
| - | < | ||
| - | option domain-name " | ||
| - | option domain-name-servers 172.16.0.1; | ||
| - | default-lease-time 3600; | ||
| - | max-lease-time 43200; | ||
| - | authoritative; | ||
| - | ddns-update-style none; | ||
| - | log-facility local7; | ||
| - | one-lease-per-client true; | ||
| - | deny duplicates; | ||
| - | shared-network ourisp { | ||
| - | subnet 172.16.0.0 netmask 255.255.192.0 { | ||
| - | default-lease-time 3600; | ||
| - | option domain-name " | ||
| - | option subnet-mask 255.255.192.0; | ||
| - | option routers 172.16.0.1; | ||
| - | include "/ | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Для того чтобы логировать не известные МАК' | ||
| - | < | ||
| - | !dhcpd | ||
| - | | ||
| - | </ | ||
| - | |||
| - | |||
| - | ** Делаем шаманское движение, | ||
| - | |||
| - | Редактируем nano / | ||
| - | Добавляем туда следующее: | ||
| - | < | ||
| - | / | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | |||
| - | **После чего перезапускаем службы: | ||
| - | < | ||
| - | / | ||
| - | / | ||
| - | / | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ======= Переходим к web интерфейсу - Настройка ======= | ||
| - | |||
| - | ** | ||
| - | http:// | ||
| - | Login: admin Password: demo (Желательно сменить пароль)** | ||
| - | |||
| - | |||
| - | **1. Добавляем классы трафика.** | ||
| - | < | ||
| - | Справочники ---> Классы трафика: | ||
| - | |||
| - | №.0 Название класса: | ||
| - | №.1 Название класса: | ||
| - | </ | ||
| - | |||
| - | |||
| - | **2. Добавляем сети.** | ||
| - | < | ||
| - | Справочники ---> Сети | ||
| - | |||
| - | Начальная ІР: 172.16.0.11 Последний ІР: 172.16.63.255 | ||
| - | Тип сети: dhcpstatic | ||
| - | Network/ | ||
| - | |||
| - | Услуги. | ||
| - | Название услуги: | ||
| - | </ | ||
| - | |||
| - | |||
| - | **3. Создаём правило раздачи DHCP** | ||
| - | < | ||
| - | Справочники ---> DHCP | ||
| - | |||
| - | Сеть: 172.16.0.0/ | ||
| - | Имя конфига DHCP: ethernet.conf | ||
| - | </ | ||
| - | < | ||
| - | option domain-name " | ||
| - | option domain-name-servers 172.16.0.1; | ||
| - | default-lease-time 3600; | ||
| - | max-lease-time 43200; | ||
| - | authoritative; | ||
| - | ddns-update-style none; | ||
| - | log-facility local7; | ||
| - | one-lease-per-client true; | ||
| - | deny duplicates; | ||
| - | |||
| - | shared-network ourisp { | ||
| - | {SUBNETS} | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | **Создаём безлимитный тариф.** | ||
| - | < | ||
| - | Справочники ---> Тарифы | ||
| - | Создать новый тариф | ||
| - | |||
| - | Название тарифа: | ||
| - | Абонплата: | ||
| - | Предоплаченный трафик: | ||
| - | Подсчет трафика: | ||
| - | Стоимость заморозки: | ||
| - | Цена не зависит от времени: | ||
| - | Без порога: | ||
| - | </ | ||
| - | |||
| - | |||
| - | **5. Делаем ограничение по скорости для нашего тарифа.** | ||
| - | < | ||
| - | Справочники ---> Скорость тарифов | ||
| - | |||
| - | Делаем скоростные ограничения 1мб/c | ||
| - | Скорость загрузки: | ||
| - | Скорость отгрузки: | ||
| - | </ | ||
| - | |||
| - | |||
| - | **Добавляем наш будущий сервер доступа " | ||
| - | < | ||
| - | Справочники ---> Сервера доступа (NAS) | ||
| - | |||
| - | Сеть: 172.16.0.0/ | ||
| - | Тип сервера доступа: | ||
| - | IP: 172.16.0.1 | ||
| - | Имя сервера доступа: | ||
| - | Ссылка на Bandwidthd: http:// | ||
| - | </ | ||
| - | |||
| - | ======= Скрипты автозапуска ======= | ||
| - | |||
| - | ** Создаём файл в / | ||
| - | < | ||
| - | touch / | ||
| - | chmod a+x / | ||
| - | nano / | ||
| - | </ | ||
| - | |||
| - | ** Содержимое / | ||
| - | < | ||
| - | |||
| - | #! /bin/sh | ||
| - | # / | ||
| - | |||
| - | ######################################################################## | ||
| - | ######################## | ||
| - | |||
| - | HTB="/ | ||
| - | IPT="/ | ||
| - | IPS="/ | ||
| - | WAN_IP=" | ||
| - | IF_WORLD=" | ||
| - | SQL="/ | ||
| - | WEB="/ | ||
| - | DHCP="/ | ||
| - | BAND="/ | ||
| - | STAR="/ | ||
| - | SOFTD="/ | ||
| - | #Softflowd для разных подсетей | ||
| - | SOFT="/ | ||
| - | |||
| - | ######################################################################## | ||
| - | # Что будет происходить и запускаться при старте: | ||
| - | ######################################################################## | ||
| - | case " | ||
| - | | ||
| - | |||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | echo "########################### | ||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | |||
| - | # | ||
| - | $SQL restart | ||
| - | $WEB restart | ||
| - | $DHCP restart | ||
| - | |||
| - | ###################################################################################### | ||
| - | |||
| - | # | ||
| - | echo 1 > / | ||
| - | |||
| - | # Создаём списки для подсети: | ||
| - | $IPS -N FFIN ipmap --network 172.16.0.0/ | ||
| - | $IPS -N FSNAT ipmap --network 172.16.0.0/ | ||
| - | $IPS -N FSNATDROP ipmap --network 172.16.0.0/ | ||
| - | |||
| - | |||
| - | ##################################### | ||
| - | # # | ||
| - | # | ||
| - | # # | ||
| - | ##################################### | ||
| - | |||
| - | # Создание правил доступа к социальным сетям (разрешённые IP адреса) | ||
| - | $IPS -N WHITE iptree | ||
| - | $IPS -A WHITE 172.16.0.30 | ||
| - | $IPS -A WHITE 172.16.0.38 | ||
| - | $IPS -A WHITE 172.16.0.39 | ||
| - | $IPS -A WHITE 172.16.0.41 | ||
| - | $IPS -A WHITE 172.16.0.42 | ||
| - | $IPS -A WHITE 172.16.0.43 | ||
| - | $IPS -A WHITE 172.16.0.44 | ||
| - | $IPS -A WHITE 172.16.0.45 | ||
| - | $IPS -A WHITE 172.16.0.46 | ||
| - | $IPS -A WHITE 172.16.0.51 | ||
| - | $IPS -A WHITE 172.16.0.64 | ||
| - | |||
| - | # | ||
| - | $IPS -N SOCIAL iptree | ||
| - | $IPS -A SOCIAL 217.20.152.240 | ||
| - | $IPS -A SOCIAL 87.240.131.99 | ||
| - | $IPS -A SOCIAL 87.240.143.242 | ||
| - | $IPS -A SOCIAL 87.240.188.249 | ||
| - | $IPS -A SOCIAL 93.186.224.240 | ||
| - | $IPS -A SOCIAL 93.186.224.243 | ||
| - | |||
| - | # Разрешаем Белому списку посейщать социальные сети | ||
| - | $IPT -t filter -A FORWARD -m set --set WHITE src -m set --set SOCIAL dst -j ACCEPT | ||
| - | |||
| - | # Запрещаем всем не вошедшим в белый список посейщать социальные сети | ||
| - | $IPT -t filter -A FORWARD -m set --set SOCIAL dst -j DROP | ||
| - | |||
| - | |||
| - | |||
| - | # Добавляем наши адреса в NAT таблицу | ||
| - | #(172) | ||
| - | $IPT -t nat -A POSTROUTING -m set --set FSNAT src -o $IF_WORLD -j SNAT --to-source $WAN_IP | ||
| - | $IPT -t filter -I FORWARD -m set --set FFIN src,dst -j ACCEPT | ||
| - | $IPT -t filter -I FORWARD -m set --set FFIN dst,src -j ACCEPT | ||
| - | $IPT -t filter -I FORWARD -m set --set FSNATDROP src,dst -j DROP | ||
| - | $IPT -t filter -I FORWARD -m set --set FSNATDROP dst,src -j DROP | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ############################################################################################ | ||
| - | |||
| - | # Запускаем Bandwindthd | ||
| - | $BAND start | ||
| - | |||
| - | # Запускаем HTB (Шейпер) | ||
| - | $HTB start | ||
| - | |||
| - | # Запускаем прослушку Softflowd для (172) | ||
| - | $SOFT | ||
| - | |||
| - | |||
| - | # Запускаем Stargazer | ||
| - | $STAR | ||
| - | |||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | echo "#################################### | ||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | ;; | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ######################################################################################## | ||
| - | ######################################################################################## | ||
| - | # Что будет происходить при остановке скрипта: | ||
| - | ######################################################################################## | ||
| - | |||
| - | stop) | ||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | echo "############################# | ||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | |||
| - | |||
| - | # | ||
| - | killall stargazer | ||
| - | |||
| - | # | ||
| - | tc qdisc del dev eth1 root #(172) | ||
| - | |||
| - | # | ||
| - | $SOFTD stop | ||
| - | |||
| - | # | ||
| - | $BAND stop | ||
| - | |||
| - | # | ||
| - | $HTB stop | ||
| - | |||
| - | |||
| - | |||
| - | # Чистим правила в таблицах Iptables и удаляем списки IPSET | ||
| - | |||
| - | #(172) | ||
| - | $IPT -F | ||
| - | $IPT -F -t nat | ||
| - | $IPS -F FFIN | ||
| - | $IPS -X FFIN | ||
| - | $IPS -F FSNAT | ||
| - | $IPS -X FSNAT | ||
| - | $IPS -F FSNATDROP | ||
| - | $IPS -X FSNATDROP | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | # Удаляем конфигурацию доступа к социальным сетям | ||
| - | $IPS -X SOCIAL | ||
| - | $IPS -X WHITE | ||
| - | |||
| - | # | ||
| - | rm -rf / | ||
| - | |||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | echo "#################################### | ||
| - | echo "###################################################################################" | ||
| - | echo "###################################################################################" | ||
| - | |||
| - | ;; | ||
| - | *) | ||
| - | echo " | ||
| - | exit 1 | ||
| - | ;; | ||
| - | esac | ||
| - | |||
| - | exit 0 | ||
| - | |||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | < | ||
| - | |||
| - | |||
| - | |||
| - | **Теперь делаем рестарт и после него проверяем как всё запустилось** | ||
| - | < | ||
| - | shutdown -r now | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ======= Скрипты OnConnect - OnDisconnect + Htb + IPSET ======= | ||
| - | |||
| - | ** Скрипт OnConnect из стандартного набора ubilling совсем капельку отредактирован мной (путь к логам отредактирован, | ||
| - | < | ||
| - | |||
| - | #!/bin/bash | ||
| - | #OnConnect | ||
| - | IFUP=" | ||
| - | IFDOWN=" | ||
| - | |||
| - | |||
| - | ########################### | ||
| - | LOGIN=$1 | ||
| - | IP=$2 | ||
| - | CASH=$3 | ||
| - | ID=$4 | ||
| - | SPEED=`/ | ||
| - | UPSPEED=`/ | ||
| - | MAC=`/ | ||
| - | SCOUNT=" | ||
| - | |||
| - | IPT="/ | ||
| - | IPS="/ | ||
| - | tc="/ | ||
| - | arpcmd="/ | ||
| - | cur_date=`date \+\%Y.\%m.\%d` | ||
| - | cur_time=`date \+\%H: | ||
| - | |||
| - | # DELETE RULEZ | ||
| - | ###################################################################### | ||
| - | $IPT -t nat -D PREROUTING --src $IP --dst 0.0.0.0/0 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.1 | ||
| - | $IPT -t filter -D INPUT -s $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D INPUT -s $IP -j ACCEPT | ||
| - | done | ||
| - | |||
| - | $IPT -t filter -D FORWARD -s $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D FORWARD -s $IP -j ACCEPT | ||
| - | done | ||
| - | |||
| - | $IPT -t filter -D FORWARD -d $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D FORWARD -d $IP -j ACCEPT | ||
| - | done | ||
| - | |||
| - | $IPT -t filter -D OUTPUT -d $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D OUTPUT -d $IP -j ACCEPT | ||
| - | done | ||
| - | ####################################################################### | ||
| - | |||
| - | # fix user mac to ip | ||
| - | $arpcmd -d $IP $MAC | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $arpcmd -d $IP $MAC | ||
| - | done | ||
| - | $arpcmd -s $IP $MAC | ||
| - | |||
| - | ############################ | ||
| - | |||
| - | declare -i mark1=$ID+101 | ||
| - | declare -i mark2=$ID+4101 | ||
| - | |||
| - | $IPT -t mangle -A FORWARD -d $IP -j MARK --set-mark $mark1 | ||
| - | $IPT -t mangle -A FORWARD -s $IP -j MARK --set-mark $mark2 | ||
| - | |||
| - | |||
| - | ############################################ | ||
| - | ########## 1subnet | ||
| - | #Download | ||
| - | $tc class add dev $IFDOWN parent 1:1 classid 1:$mark1 htb rate $SPEED$SCOUNT | ||
| - | $tc filter add dev $IFDOWN parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1 | ||
| - | |||
| - | #Upload | ||
| - | $tc class add dev $IFUP parent 1:1 classid 1:$mark2 htb rate $UPSPEED$SCOUNT | ||
| - | $tc filter add dev $IFUP parent 1: protocol ip prio 3 handle $mark2 fw classid 1:$mark2 | ||
| - | ############################################# | ||
| - | |||
| - | |||
| - | |||
| - | ## Интернет для (172) | ||
| - | $IPS -D FSNATDROP $IP | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPS -D FSNATDROP $IP | ||
| - | done | ||
| - | $IPS -A FFIN $IP | ||
| - | $IPS -A FSNAT $IP | ||
| - | |||
| - | |||
| - | # | ||
| - | ################################################ | ||
| - | |||
| - | # DAY/NIGHT switcher | ||
| - | /bin/echo $SPEED: | ||
| - | |||
| - | |||
| - | # ADD TO LOG | ||
| - | echo " | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ** Скрипт OnDisconnect из стандартного набора ubilling совсем капельку отредактирован мной (путь к логам отредактирован, | ||
| - | < | ||
| - | |||
| - | |||
| - | #!/bin/bash | ||
| - | # OnDisconnect | ||
| - | IFUP=" | ||
| - | IFDOWN=" | ||
| - | |||
| - | LOGIN=$1 | ||
| - | IP=$2 | ||
| - | CASH=$3 | ||
| - | ID=$4 | ||
| - | SPEED=`/ | ||
| - | UPSPEED=`/ | ||
| - | SCOUNT=" | ||
| - | |||
| - | IPT="/ | ||
| - | IPS="/ | ||
| - | tc="/ | ||
| - | |||
| - | |||
| - | # TIME FORMAT | ||
| - | cur_date=`date \+\%Y.\%m.\%d` | ||
| - | cur_time=`date \+\%H: | ||
| - | |||
| - | # DELETE RULEZ IPT | ||
| - | ###################################################################### | ||
| - | $IPT -t filter -D INPUT -s $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D INPUT -s $IP -j ACCEPT | ||
| - | done | ||
| - | |||
| - | $IPT -t filter -D FORWARD -s $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D FORWARD -s $IP -j ACCEPT | ||
| - | done | ||
| - | |||
| - | $IPT -t filter -D FORWARD -d $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D FORWARD -d $IP -j ACCEPT | ||
| - | done | ||
| - | |||
| - | $IPT -t filter -D OUTPUT -d $IP -j ACCEPT | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPT -t filter -D OUTPUT -d $IP -j ACCEPT | ||
| - | done | ||
| - | |||
| - | ######################### | ||
| - | |||
| - | declare -i mark1=$ID+101 | ||
| - | declare -i mark2=$ID+4101 | ||
| - | |||
| - | |||
| - | if [ -n " | ||
| - | then | ||
| - | $IPT -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark1 | ||
| - | while [ $? = 0 ] | ||
| - | do | ||
| - | $IPT -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark1 | ||
| - | done | ||
| - | fi | ||
| - | |||
| - | if [ -n " | ||
| - | then | ||
| - | $IPT -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark2 | ||
| - | while [ $? = 0 ] | ||
| - | do | ||
| - | $IPT -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark2 | ||
| - | done | ||
| - | fi | ||
| - | |||
| - | ############################################################################# | ||
| - | |||
| - | #Download | ||
| - | $tc filter del dev $IFDOWN parent 1: protocol ip prio 3 handle $mark1 fw classid | ||
| - | $tc class del dev $IFDOWN parent 1:1 classid 1:$mark1 htb rate $SPEED$SCOUNT | ||
| - | |||
| - | #Upload | ||
| - | $tc filter del dev $IFUP parent 1: protocol ip prio 3 handle $mark2 fw classid 1 : | ||
| - | $tc class del dev $IFUP parent 1:1 classid 1:$mark2 htb rate $UPSPEED$SCOUNT | ||
| - | |||
| - | ############################################################################ | ||
| - | |||
| - | |||
| - | ## Отключить интернет (172) | ||
| - | $IPS -D FFIN $IP | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPS -D FFIN $IP | ||
| - | done | ||
| - | $IPS -D FSNAT $IP | ||
| - | while [ $? -eq 0 ] | ||
| - | do | ||
| - | $IPS -D FSNAT $IP | ||
| - | done | ||
| - | $IPS -A FSNATDROP $IP | ||
| - | |||
| - | |||
| - | ############################################################################ | ||
| - | |||
| - | |||
| - | $IPT -t nat -A PREROUTING --src $IP --dst 0.0.0.0/0 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.1 | ||
| - | |||
| - | |||
| - | |||
| - | # DAY/NIGHT switcher | ||
| - | /bin/rm / | ||
| - | |||
| - | |||
| - | echo " | ||
| - | |||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ======= Пробуем стартовать ======= | ||
| - | Для начала остановим систему через скрипт bil: | ||
| - | < | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | Ну а теперь запустим эту систему: | ||
| - | < | ||
| - | / | ||
| - | </ | ||
| - | |||
| - | В теории всё должно работать. | ||
| - | |||
| - | |||
| - | ======= Приколюхи от Ubilling: ======= | ||
| - | |||
| - | |||
| - | ** колонка " | ||
| - | |||
| - | 1. Лезем в конфиг / | ||
| - | < | ||
| - | DN_ONLINE_DETECT=1 | ||
| - | </ | ||
| - | |||
| - | 2. Убеждаемся что в скриптах OnConnect/ | ||
| - | OnConnect | ||
| - | < | ||
| - | /bin/echo $SPEED: | ||
| - | </ | ||
| - | |||
| - | OnDisconnect | ||
| - | < | ||
| - | /bin/rm / | ||
| - | </ | ||
| - | |||
| - | |||
| - | |||
| - | 3. Делаем симлинк на папку: | ||
| - | < | ||
| - | ln -fs / | ||
| - | </ | ||
| - | |||
| - | 4. Радуемся звёздочкам =) | ||
| - | |||
| - | ======= Мой alter.ini ======= | ||
| - | < | ||
| - | |||
| - | ;Опции поиска новых MAC адресов | ||
| - | ;Если у вас в сети используються только статические пулы хостов DHCP переменная NMLEASES должна выглядеть как / | ||
| - | NMLEASES = / | ||
| - | |||
| - | ; | ||
| - | NMLEASEMARK=" | ||
| - | |||
| - | ; | ||
| - | NMREP_INMACCHG=1 | ||
| - | |||
| - | Отображать новые MAC адреса в виде выпадающего списка | ||
| - | SIMPLENEWMACSELECTOR=1 | ||
| - | |||
| - | ; | ||
| - | PROFILE_PLUGINS=1 | ||
| - | |||
| - | ; | ||
| - | CITY_DISPLAY=1 | ||
| - | |||
| - | ; | ||
| - | ZERO_TOLERANCE=1 | ||
| - | |||
| - | ; | ||
| - | DOCSIS_SUPPORT=0 | ||
| - | |||
| - | ; | ||
| - | DOCSIS_MODEM_NETID=2 | ||
| - | |||
| - | ; Пути к исходным и скомпилированным конфигам модемов | ||
| - | docsis_cm_source=multinet/ | ||
| - | docsis_cm_bin=multinet/ | ||
| - | |||
| - | ; | ||
| - | AGENTS_ASSIGN=1 | ||
| - | |||
| - | ; Включать експорт оплат? (например в 1С) | ||
| - | EXPORT_ENABLED=1 | ||
| - | |||
| - | ; | ||
| - | ; | ||
| - | DEFAULT_ASSIGN_AGENT=1 | ||
| - | |||
| - | ;Время начала и конца суток | ||
| - | EXPORT_FROM_TIME=00: | ||
| - | EXPORT_TO_TIME=23: | ||
| - | |||
| - | ; | ||
| - | EXPORT_FORMAT=xml | ||
| - | |||
| - | ; Експортировать только положительные оплаты? | ||
| - | EXPORT_ONLY_POSITIVE=1 | ||
| - | |||
| - | ; | ||
| - | EXPORT_TEMPLATE=config/ | ||
| - | EXPORT_TEMPLATE_HEAD=config/ | ||
| - | EXPORT_TEMPLATE_END=config/ | ||
| - | |||
| - | ; | ||
| - | EXPORT_ENCODING=utf-8 | ||
| - | IMPORT_ENCODING=utf-8 | ||
| - | |||
| - | ; | ||
| - | TRAFFSIZE= Gb | ||
| - | |||
| - | ; | ||
| - | TARIFFCHGRESET=1 | ||
| - | |||
| - | ; | ||
| - | PASSWORDSHIDE=0 | ||
| - | |||
| - | ; | ||
| - | DN_ONLINE_DETECT=0 | ||
| - | |||
| - | ; | ||
| - | TRANSLATE_PAYMENTS_NOTES=0 | ||
| - | |||
| - | ; | ||
| - | HIGHLIGHT_IMPORTANT=1 | ||
| - | |||
| - | ; | ||
| - | NMCHANGE=0 | ||
| - | |||
| - | ; | ||
| - | ONLINE_LIGHTER=1 | ||
| - | |||
| - | ; | ||
| - | OPENPAYZ_SUPPORT=0 | ||
| - | |||
| - | ; | ||
| - | OPENPAYZ_MANUAL=1 | ||
| - | |||
| - | ;ID типа платежа под с которым будут вноситься оплаты в ручном режиме | ||
| - | OPENPAYZ_CASHTYPEID=1 | ||
| - | |||
| - | ; | ||
| - | HIGHLIGHT_TODAY_PAYMENTS=1 | ||
| - | |||
| - | ; | ||
| - | ONLINE_FILTERS_EXT=1 | ||
| - | |||
| - | ;При удалении пользователя не трогать его договор в целях обеспечения уникальности | ||
| - | STRICT_CONTRACTS_PROTECT=1 | ||
| - | |||
| - | ; | ||
| - | STRICT_CONTRACTS_UNIQUE=1 | ||
| - | |||
| - | ; | ||
| - | CATV_ENABLED=0 | ||
| - | |||
| - | ; | ||
| - | ONLINE_LAT=1 | ||
| - | |||
| - | ; | ||
| - | MASSSEND_ENABLED=1 | ||
| - | |||
| - | ; | ||
| - | MASSSEND_SAFE=1 | ||
| - | |||
| - | ; Максимально допустимый уровень кредита, | ||
| - | STRICT_CREDIT_LIMIT=DISABLED | ||
| - | |||
| - | ; Включено ли связывание пользователей (ака корпоративные пользователи)? | ||
| - | USER_LINKING_ENABLED=1 | ||
| - | |||
| - | ; Поле для связывания (IP, login… или еще какое-то) | ||
| - | USER_LINKING_FIELD=" | ||
| - | |||
| - | ;ID доп. поля профиля по которому определяется факт связанности | ||
| - | USER_LINKING_CFID=24 | ||
| - | |||
| - | ; Репликация тарифа родительского пользователя на дочерних | ||
| - | USER_LINKING_TARIFF=1 | ||
| - | |||
| - | ; Репликация денежных операций родительского пользователя на дочерних | ||
| - | USER_LINKING_CASH=1 | ||
| - | |||
| - | ; Репликация кредита родительского пользователя на дочерних | ||
| - | USER_LINKING_CREDIT=1 | ||
| - | |||
| - | ;Путь к логфайлу stargazer | ||
| - | STG_LOG_PATH=/ | ||
| - | |||
| - | ;Путь к arping | ||
| - | ARPING=/ | ||
| - | |||
| - | ; | ||
| - | ARPING_IFACE=-i vlan101 | ||
| - | |||
| - | ; | ||
| - | ARPDIAG_ENABLED=1 | ||
| - | |||
| - | ;Путь к логу arpwatch | ||
| - | ARPDIAG_LOG=/ | ||
| - | |||
| - | ;Опция отвечающая за то, какие таблички должны быть исключены при бекапе БД | ||
| - | NOBACKUPTABLESLIKE=logs_, | ||
| - | |||
| - | ;Может ли пользователь изменять размер иконок в панели задач? | ||
| - | TB_ICONCUSTOMSIZE=1 | ||
| - | |||
| - | ; | ||
| - | MACCHANGERANDOMDEFAULT=1 | ||
| - | |||
| - | ; Если значение установлено в 1 - будет вызван ресет пользователя при изменении любого кастомного поля профиля | ||
| - | RESETONCFCHANGE=1 | ||
| - | RESETONTAGCHANGE=1 | ||
| - | |||
| - | ; Показывать ли уведомление о новых тикетах в «Панели задач»? | ||
| - | TB_NEWTICKETNOTIFY=1 | ||
| - | |||
| - | Включен ли импорт банковских выписок? | ||
| - | BS_ENABLED=1 | ||
| - | |||
| - | ; | ||
| - | BS_INCHARSET=" | ||
| - | BS_OUTCHARSET=" | ||
| - | |||
| - | ;Опции импорта банковских выписок (черная магия, руками не трогать) | ||
| - | BS_OPTIONS=" | ||
| - | |||
| - | ;Тип оплат для денег разнесенных автоматом по выпискам | ||
| - | BS_CASHTYPE=1 | ||
| - | |||
| - | ;Режим высокой производительности модуля «Онлайн»: | ||
| - | ; | ||
| - | ;не вызывая своим видом возрастания нагрузки на сервер, | ||
| - | ONLINE_HP_MODE=1 | ||
| - | |||
| - | ; Запрет на редактирование логинов-паролей-айпишек при регистрации, | ||
| - | SAFE_REGMODE=1 | ||
| - | |||
| - | ; | ||
| - | TICKETS_PERPAGE=50 | ||
| - | |||
| - | ; | ||
| - | NDS_ENABLED=0 | ||
| - | |||
| - | ;ID тега обозначающего пользователя плательщика НДС | ||
| - | NDS_TAGID=9 | ||
| - | |||
| - | ; | ||
| - | NDS_TAX_PERCENT=20 | ||
| - | |||
| - | ; | ||
| - | FAST_CASH_LINK=0 | ||
| - | |||
| - | ; | ||
| - | MTSIGMON_ENABLED=0 | ||
| - | |||
| - | ; | ||
| - | SIGREQ_ENABLED=0 | ||
| - | |||
| - | ;Время в минутах по прошествию которого все свитчи будут перепинговываться. | ||
| - | SW_PINGTIMEOUT=2 | ||
| - | |||
| - | ; | ||
| - | TB_SWITCHMON=1 | ||
| - | |||
| - | ; | ||
| - | REMOTEAPI_ENABLED=1 | ||
| - | |||
| - | ; | ||
| - | RADIUST_ENABLED=0 | ||
| - | |||
| - | |||
| - | </ | ||
| - | |||
| - | ======= Источники и автор статьи: | ||
| - | |||
| - | |||
| - | **Основные источники информации которые помогли написать эту инструкцию: | ||
| - | |||
| - | local.com.ua | ||
| - | |||
| - | wiki.ubilling.net.ua | ||
| - | |||
| - | habrahabr.ru | ||
| - | |||
| - | |||
| - | **Автор инструкции: | ||