Mikrotik Схема 3 (альтернативный IPoE)

по сравнению с
Текущая Кучаев Денис
на июл 29, 2014 22:16.

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (29)

просмотр истории страницы
Интеграция заключается в следующих шагах:
# Настройка сервисов / политик / профилей / access list на оборудовании
# Настройка скрипта event_inc.sh на Ideco ACP для пересылки нужных команд
# Создание и настройка RADIUS-атрибутов в тарифах для пользователей
Будем настраивать на примере 2 тарифов со скоростями 4Мбит/с и 8Мбит/с.

10.0.0.1 - биллинг
10.0.0.2 - микротик

h1. Шаги настройки

Шаг 1 - Вывод абонента в интернет, NAT, маскарадинг, редирект, отрицательный баланс
Шаг 2 - Подготовка сервисов, шейперы, ограничение скорости
Шаг 3 - Подготовка и проверка управляющих команд, скрипт отправки команд
Шаг 4 - Отправка Netflow в биллинг
Шаг 5 - Создание НАСа в биллинге
Шаг 6 - Создание Тарифа "Тариф Восьмерка" и Услуги "Трафик 8Мбит"
Шаг 7 - Создание абонента и учетной записи
Шаг 8 - Тестирование и отладка

h1. Шаг 1 - Вывод абонента в интернет, NAT, маскарадинг, редирект, отрицательный баланс

h4. 1.1 Маскарадинг или NAT абонентов для серой адресации

{code}
telnet 10.0.0.2
login: admin
password: admin

# Добавим адрес листы с серыми подсетями, что-бы не натить абонентов с белыми адресами
/ip firewall address-list
add address=10.0.0.0/8 list=local_net
add address=172.16.0.0/12 list=local_net
add address=192.168.0.0/16 list=local_net

/ip firewall nat
# Маскарад абонентов из серых сетей
add action=masquerade chain=srcnat src-address-list=local_net dst-address-list=!local_net
{code}

h4. 1.2 Редирект заблокированных и несуществующих абонентов на специальную страницу.

Это крайне важно для современного провайдера, в целях повышения лояльности абонентов и снижения нагрузки на техническую поддержку.
Если абонента нет в списке accept_list редиректим его на blocked страницу личного кабинета(где можно сделать кнопку "Диагностика соединения").

{code}
/ip firewall nat
# Всех кого нет в адрес листе(только 80 порт) accept_list редиректим на страницу биллинга blocked после которой на маршрутизатор будут
# отправлены события и абонент будет добавлен соответствующие листы(если он есть в базе).
# В кабинете пользователя blocked страница расположена на порту 440 по адресу http://10.0.0.1:440
add action=dst-nat chain=dstnat comment="blocked_redirect" protocol=tcp src-address-list=!accept_list dst-port=80 to-addresses=10.0.0.1 to-ports=440
{code}

h4. 1.3 Редирект абонентов с отрицательным балансом на специальную страницу.

Если абонент в списке negbal_list - то редиректим его на negbal страницу личного кабинета

{code}
/ip firewall nat
# Для всех заблокированных пользователей разрешаем dns запросы(нужно для редиректа при отрицательном балансе)
add action=accept chain=dstnat comment=dnat_negbal_dns_accept port=53 protocol=udp src-address-list=negbal_list

# Редиректим весь трафик(кроме банков и т.п.) на 80 порт на страницу биллинга, где находится сообщение об отрицательном балансе
# В кабинете пользователя negbal страница расположена на порту 442 по адресу http://10.0.0.1:442
add action=dst-nat chain=dstnat comment=dnat_negbal_redirect protocol=tcp src-address-list=negbal_list dst-address-list=!trusted_list src-port=80 to-addresses=10.0.0.1 to-ports=442
{code}

h4. 1.4 Блокировка абонентов с отрицательным балансом, заблокированных и несуществующих абонентов
{code}
/ip firewall filter
# Для того, что-бы разорвать существующие tcp/udp и прочии сессии абонента необходимо добавить правила в forward
add chain=forward comment=fw_redirect_dns_accept protocol=udp port=53 action=accept
add chain=forward comment=fw_redirect_http_accept protocol=tcp port=80 action=accept dst-address=10.0.0.1
# Разрешаем доступ до банков и платежных систем и доверенным сетям
add chain=forward comment=fw_trusted_accept src-address-list=accept_list action=accept
add chain=forward comment=fw_negbal_drop action=drop src-address-list=negbal_list
add chain=forward comment=fw_blocked_drop action=drop src-address-list=!accept_list
{code}

h4. 1.5 Разрешить доступ до банков, платежных систем, доверенных сетей и хостов при отрицательном балансе.

Рекомендуется настроить автоматическую синхронизацию с биллингом.
{code}
/ip firewall
address-list add list=trusted_list address=217.12.98.163 comment=click.alfabank.ru
address-list add list=trusted_list address=91.232.231.67 comment=qiwi.ru
address-list add list=trusted_list address=194.54.14.131 comment=online.sberbank.ru
address-list add list=trusted_list address=10.0.254.0/24 comment=local_routers
{code}

h1. Шаг 2 - Подготовка сервисов, шейперы, ограничение скорости

В данной схеме используется простейший шейпер, который не требует предварительного создания очередей на микротике.
Шейперы создаются и применяются к пользователям динамически, при наступлении события rate_set.

h1. Шаг 3 - Подготовка и проверка управляющих команд, скрипт отправки команд


h4. 3.1 Подготовка команд для оборудования

т.к. ssh и telnet работают медленно и часто теряют команды, в биллинг была включена специальная утилита send_mikrotik_cmd, работающая через API микротика([http://wiki.mikrotik.com/wiki/Manual:API])
Вы можете использова и стандартные команды через ssh и telnet.

При IPoE схеме будут использованны следуещие события для управления абонентами на оборудовании:
* user_accept - Отправить команду на разрешение пользователю выхода в интернет - добавить абонента в адрес-лист accept_list.
* user_drop - Отправить команду на запрещение пользователю выхода в интернет - удаление пользователя из списка разрешенных accept_list(ВНИМАНИЕ\! Пользователю с отрицательным балансом не запрещаем интернет, а запрещаем только пользователям с полностью заблокированными учетными записями).
* user_redirect - Отправить команду на включение переадресации для абонента с отрицательным балансом - добавить абонента в адрес-лист negbal_list.
* user_redirect_cancel - Отправить команду на отмену переадресации при пополнении баланса - удалить из адрес-листа negbal_list.
* user_rate_set - Отправить команду на установку скорости - добавить абонента в адрес-лист service_$ceil_in.
* user_add - Отправляем команду создания виртуальной сессии для некоторых типов оборудования(обычно не используется)
* user_del - Отправить команду на полное удаление абонента с оборудования - удалить из всех адрес-листов(обычно не используется).

Мы должны подготовить и проверить соответствующие команды в терминале биллинга.

Разберем на примере отправки команды user_accept для пользователя с логином test1 и ip адресом 10.0.0.101
{code}
ssh root@10.0.0.1
password:servicemode

[root@Carbon ~]# chroot /app/asr_billing/ #Переходим в контейнер биллинга
[root@Carbon (asr_billing) /]# send_mikrotik_cmd 10.0.0.2 admin пароль /queue simple add name=10.0.0.100 target=10.0.0.100/32 parent=none priority=8/8 queue=default-small/default-small limit-at=0/0 max-limit=4096K/4096K burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s
[root@Carbon (asr_billing) /]# echo $?
0
#Код возврата 0 означает успешное выполнение команды
0 - успешное завершение
1 - connection closed by remote end(не удалось авторизоваться)
2 - не верное количество аргументов(меньше 4)
254 - не удалось отправить команду(не доступен сервер или не правильная команда)(<class 'socket.error'> [Errno 113] No route to host)
254 - специальный код, при котором отправка команды будет отложена.
{code}

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

h4. 3.2 Создание скрипта событий

Имя скрипта событий указывается в настройках наса в поле "имя скрипта событий" в веб интерфейсе биллинга.
После первого же события скрипт автоматически создастся из примера, или его можно создать руками командой cp /app/asr_billing//usr/local/share/nas_event_daemon/default.sh.tmplt /app/asr_billing/var/lib/event/mikrotik.sh
В новом файле mikrotik.sh необходимо прописать минимальный набор команд.
{code}
#Не забудьте в скрипте указать правильные логин и пароль от микротика
telnet_user="user"
telnet_password="password"

ceil_out=${ceil_out:-$ceil_in}

user_accept(){
send_mikrotik_cmd $nas_ip admin $coa_psw /ip firewall address-list add list=accept_list address=$ip comment=${ip}_accept
}
user_drop(){
send_mikrotik_cmd $nas_ip admin $coa_psw /ip firewall address-list remove numbers=${ip}_accept
}
user_redirect(){
send_mikrotik_cmd $nas_ip admin $coa_psw /ip firewall address-list add list=negbal_list address=$ip comment=${ip}_negbal
}
user_redirect_cancel(){
send_mikrotik_cmd $nas_ip admin $coa_psw /ip firewall address-list remove numbers=${ip}_negbal
}
user_rate_set(){
# Сначала удалим из старого сервиса, потом добавим в новый
send_mikrotik_cmd $nas_ip admin $coa_psw /queue simple remove numbers=${ip}
send_mikrotik_cmd $nas_ip admin $coa_psw /queue simple add name=${ip} target=${ip}/32 parent=none priority=8/8 queue=default-small/default-small limit-at=0/0 max-limit=${ceil_in}K/${ceil_out}K burst-limit=0/0 burst-threshold=0/0 burst-time=0s/0s
}
user_del(){
send_mikrotik_cmd $nas_ip admin $coa_psw /ip firewall address-list remove numbers=${ip}_negbal
send_mikrotik_cmd $nas_ip admin $coa_psw /ip firewall address-list remove numbers=${ip}_accept
send_mikrotik_cmd $nas_ip admin $coa_psw /queue simple remove numbers=${ip}
}
{code}
Примечание: Пример скрипта событий находится во вложении к этой странице


h1. Шаг 4 - Отправка Netflow в биллинг

Для учета трафика требуется включить отправку нетфлоу в бтллинг

{code}
/ip traffic-flow
set active-flow-timeout=3m cache-entries=32k enabled=yes inactive-flow-timeout=30s
/ip traffic-flow target
add address=10.0.0.1:9996 version=9
{code}


h1. Шаг 5 - Создание НАСа в биллинге

* Укажите ip адрес маршрутизатора
* Выберите тип наса "Mikrotik + IP"
* Укажите имя скрипта событий "mikrotik.sh"

!nas.png|border=1!

h1. Шаг 6 - Создание Тарифа "Тариф Восьмерка" и Услуги "Трафик 8Мбит"

Тариф - это набор базовых услуг при заключении договора, в него включены услуги трафика, телефонии и телевидения.
Создадим тариф только с одной включенной услугой - трафик. со скоростью 8Мбит

!tarif1.png|border=1!

!tarif2.png|border=1!

h1. Шаг 7 - Создание абонента и учетной записи

!abon1.png|border=1!

!abon2.png|border=1!

* Укажите тпи авторизации "по ip"
* Назначьте абоненту Пул Адресов, после этого будет предложено выдать адрес из пула
* Выберете NAS/BRAS "Mikrotik"
!abon3.png|border=1!

!abon4.png|border=1!

После создания абоента для него будет автоматически создана учетная запись и уйдут события добавления абонента на оборудование.

h1. Шаг 8 - Тестирование и отладка

Тестирование схемы включает в себя следующие действия:

* создание абонента
* подключение абонентов
* отключение абонентов при добровольной(из личного абинета абонента) и ручной(из интерфейса биллинга) блокировках
* отключение/переадресация абонентов при превышении лимита
* подключение абонентов при приходе оплаты
* редактирование пользователя, смена лимита или логина или ip
* изменение скорости при смене тарифа
* удаление абонента

События, уходящие из биллинга на оборудование можно смотреть в лог-файле командой
{code}
tail -f /app/asr_billing/var/log/nas_event_daemon/microtik.sh_10.0.0.2.log
{code}

\++++++++++++++++++++++\+

h2. Внимание\!

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

Примеры предоставлены исключительно для понимания принципов работы Ideco ACP Carbon Billing с сторонним оборудованием.

Также, оборудование нельзя считать запущенным в эксплуатацию, если не все пункты&nbsp;[плана внедрения|http://asrdoc.ideco.ru/pages/viewpage.action?pageId=29033016]&nbsp;завершены успешно.


h2. Настройка оборудования

Шейперы создаются и применяются к пользователям динамически, при наступлении события rate_set.

Таким образом на микротике необходимо лишь создать адрес-листы,&nbsp; balance_positive - лист для nat и разрешения выхода в Интернет адрес-листы:

balance_negative - лист для переадресации пользователей с отрицательным балансомЕсли нужны разные группы пользователей, то можно создать разные адрес листы, и использовать составные листы например
* balance_positive - лист для nat и разрешения выхода в Интернет
* balance_negative - лист для переадресации пользователей с отрицательным балансом.

Если нужны разные группы пользователей, то можно создать разные адрес листы, и использовать составные листы, например:

{code}
balance_positive${tariff_id}   или balance_positive${pull_id}   и тп.
balance_positive${tariff_id}
balance_positive${pull_id}
{code}


Внимание\! Для применения иных шейперов требуется все шейперы предварительно настроить вручную по [инструкции микротика|http://wiki.mikrotik.com/wiki/Russian/%D0%94%D0%B5%D0%BB%D0%B8%D0%BC_%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82_%D0%B8%D0%BB%D0%B8_QoS_%D0%BD%D0%B0_Mikrotik], а также исправить блок rate_set в event_inc.sh на требуемые для микротика команды.

Рекомендуется склеивать команды микротика в одну через знак ' ; '&nbsp; вместо нескольких последовательных ssh тк ssh долго подключается к микротику.


h2. Настройка АСР (event_inc.sh)
h2. Настройка Carbon Billing (event_inc.sh)

В этом скрипте команды на микротик пересылаются с помощью ssh, а не с помощью radius.
{
case "$EVENT" in
login|balance_negative|balance_positive|user_data_changed|user_data_changed_before) login | balance_negative | balance_positive | user_data_changed | user_data_changed_before )

ssh username@$nas_ip "/ip firewall address-list remove [find address=$ip]"
if [ "$over_limit" = "0" ]; then
ssh username@$nas_ip "/ip firewall address-list remove [find address=$ip]"
ssh username@$nas_ip "/ip firewall address-list add address=$ip list=balance_positive"
else
ssh username@$nas_ip "/ip firewall address-list remove [find address=$ip]"
ssh username@$nas_ip "/ip firewall address-list add address=$ip list=balance_negative"
fi

;;

"rate_set") rate_set )
if [ "$ceil_out" != "-1" ]; then
ssh username@$nas_ip /queue simple remove [find name=$id]
fi
;;

"logout") logout )
ssh username@$nas_ip "/ip firewall address-list remove [find address=$ip]"
ssh username@$nas_ip /queue simple remove [find name=$id]
;;
"period_closed") period_closed )
LOG INFO "event type: $EVENT $DATA"
;;

* )
: LOG INFO "event type: $EVENT $DATA"
;;
esac
h2. Настройка тарифов

Тарифы настраиваются стандартно, тк radius параметры при данной схеме не используются.
Тарифы настраиваются стандартно, т.к radius параметры при данной схеме не используются, а $ceil_in и $ceil_out передаются микротику по SSH каждый раз при возникновении события rate_set.

h2. Настройка пользователей

Так как микротик не использует Radius, то для пользователей, которые получают доступ в интернет через него необходимо вручную переопределить IP NAS сервера, автоматически этого не произойдет. &nbsp; !99.png|border=1!

h2. Добавление в список маршрутизаторов


h2. !Снимок-Настройка оборудования.png|border=1!