Jump to content
Local
mac

Редирект должников на Mikrotik

Recommended Posts

Добрый день  знатоки. Вопрос к использующим Mikrotik в качестве NAS.

Мучаюсь уже не первый день, но воз и ныне там.

 

Имеется LAN на NAS Mikrotik и Ubilling FreeBSD подключенным в локалку.

На сервере биллинга, кроме собственно биллинга, поднят DHCP.

 

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

 

Пробовал несколько вариантов:

  1. Маркировка трафика должников в PREROUTING (адрес-лист DENY и dst-port 80) и последующий дефолтный роутинг промаркированных пакетов на IP сервера биллинга. Но tcpdump даже не показывает, что нужные пакеты поступают на вход.
  2. DSTNAT с заменой адреса назначения на IP сервера. Пакеты на сетевой интерфейс сервера поступают и уходят к должнику (tcpdump), ipfw их заворачивает на 127.0.0.1:80 (пробовал и без заворачивания), но кабинет пользователя у должника не отображается.
chain=dstnat action=dst-nat to-addresses=10.12.255.254 to-ports=80 protocol=tcp src-address=10.12.0.0/16 src-address-list=DENY dst-port=80
chain=forward action=accept src-address=10.12.0.0/16 dst-address=10.12.255.254
chain=forward action=add-src-to-address-list src-address=10.12.0.0/16 src-address-list=!ALLOW address-list=DENY address-list-timeout=30s in-interface=bridge1 out-interface=ether1-gateway

Что я не учел? Кто-то такую функцию делал у себя в сети? Как редирект работает у вас?

 

 

Share this post


Link to post
Share on other sites


/ip firewall filter
add chain=forward comment="acp> ip.drop / [dns]" dst-port=53 protocol=udp \
    src-address-list=ip.drop
add action=drop chain=forward comment="dr> ip.drop / !ip.allow" \
    dst-address-list=!ip.allow src-address-list=ip.drop
/ip firewall nat
add action=dst-nat chain=dstnat comment="dnat> ip.drop #10.12.255.254:80" dst-address-list=\
    !ip.allow dst-port=80,8080 protocol=tcp src-address-list=ip.drop \
    to-addresses=10.12.255.254 to-ports=80
add action=masquerade chain=srcnat comment="mas> ip.drop" src-address-list=ip.drop
/ip firewall address-list
add address=10.12.255.254 disabled=no list=ip.allow

 

Edited by SavPasha

Share this post


Link to post
Share on other sites

SavPasha, спасибо! попробую еще так.

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

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

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

Правила такие (я не добавлял в этот список остальные правила указанные в wiki ubilling)

/ip route
add disabled=no distance=1 gateway=10.12.255.254 routing-mark=http
/ip firewall nat
chain=dstnat action=accept protocol=tcp src-address=10.12.0.0/16 src-address-list=DENY in-interface=bridge1 dst-port=80
после правил разрешающих хождение абонентов из списка ALLOW
/ip firewall filter
chain=forward action=add-src-to-address-list src-address=10.12.0.0/16 src-address-list=!ALLOW address-list=DENY \
address-list-timeout=30s in-interface=bridge1 out-interface=ether1-gateway
chain=forward action=accept src-address=10.12.0.0/16 src-address-list=DENY
/ip firewall mangle
chain=prerouting action=mark-routing new-routing-mark=http passthrough=no protocol=tcp \
src-address=10.12.0.0/16 src-address-list=DENY dst-port=80
Edited by mac

Share this post


Link to post
Share on other sites

 

SavPasha, спасибо! попробую еще так.

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

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

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

Правила такие (я не добавлял в этот список остальные правила указанные в wiki ubilling)

/ip route
add disabled=no distance=1 gateway=10.12.255.254 routing-mark=http
/ip firewall nat
chain=dstnat action=accept protocol=tcp src-address=10.12.0.0/16 src-address-list=DENY in-interface=bridge1 dst-port=80
после правил разрешающих хождение абонентов из списка ALLOW
/ip firewall filter
chain=forward action=add-src-to-address-list src-address=10.12.0.0/16 src-address-list=!ALLOW address-list=DENY \
address-list-timeout=30s in-interface=bridge1 out-interface=ether1-gateway
chain=forward action=accept src-address=10.12.0.0/16 src-address-list=DENY
/ip firewall mangle
chain=prerouting action=mark-routing new-routing-mark=http passthrough=no protocol=tcp \
src-address=10.12.0.0/16 src-address-list=DENY dst-port=80

Скорее всего браузер кэширует вашу страницу заглушку.

Чтобы убедиться, попробуйте сбросить кэш браузера, или пробуйте другим браузером на сайты с которого был редирект.

Share this post


Link to post
Share on other sites

 

 

Скорее всего браузер кэширует вашу страницу заглушку.

Тоже так сначала подумал. ОС Xubuntu, в Firefox кэш очистил. Глюк в том, что сайты не пинговались тоже. Traceroute на сайт не проходил даже до шлюза (mikrotik).

Share this post


Link to post
Share on other sites

ну можете попробовать так , работает без проблем:

/ip firewall filter
add chain=forward src-address-list=ALLOW
add chain=forward dst-address-list=ALLOW
add action=add-src-to-address-list address-list=DISCON address-list-timeout=\
    30s chain=forward in-interface=bridge1 src-address-list=!ALLOW
add chain=forward dst-address-list=LAN src-address-list=DISCON
add chain=forward dst-address-list=DISCON src-address-list=LAN
add action=drop chain=forward comment="DROP FORWARD"
/ip firewall nat
add action=src-nat chain=srcnat comment=NAT dst-address-list=!LAN \
    out-interface=server2 src-address-list=ALLOW to-addresses=xx.x.x.x
add action=dst-nat chain=dstnat comment=NAT dst-port=80 protocol=tcp \
    src-address-list=DISCON to-addresses=10.10.10.10 to-ports=84

в списке LAN мои локальные префиксы.

Share this post


Link to post
Share on other sites
ну можете попробовать так , работает без проблем:

Спасибо за ответ. Попробовал. Может какие-то не те свои параметры прописал в правила микротика, но проблема в следующем:

2787    101.379988000    10.12.0.254    81.19.70.3    TCP    74    [TCP Retransmission] 50492 > http [SYN] Seq=0 Win=29200 Len=0
2788    101.380372000    10.12.255.254    10.12.0.254    TCP    74    [TCP Previous segment not captured] http > 50492 [SYN, ACK] Seq=1212807420 Ack=1 Win=65535 Len=0
2789    101.380446000    10.12.0.254    10.12.255.254    TCP    54    50492 > http [RST] Seq=1 Win=0 Len=0

ИМХО, я думаю что запрос от юзера (10.12.0.254) на установку соединения идет на сайт 81.19.70.3, но подтверждение приходит от сервера биллинга (10.12.255.254), после чего соединение сбрасывается.

Edited by mac

Share this post


Link to post
Share on other sites

 

ну можете попробовать так , работает без проблем:

Спасибо за ответ. Попробовал. Может какие-то не те свои параметры прописал в правила микротика, но проблема в следующем:

2787    101.379988000    10.12.0.254    81.19.70.3    TCP    74    [TCP Retransmission] 50492 > http [SYN] Seq=0 Win=29200 Len=0
2788    101.380372000    10.12.255.254    10.12.0.254    TCP    74    [TCP Previous segment not captured] http > 50492 [SYN, ACK] Seq=1212807420 Ack=1 Win=65535 Len=0
2789    101.380446000    10.12.0.254    10.12.255.254    TCP    54    50492 > http [RST] Seq=1 Win=0 Len=0

ИМХО, я думаю что запрос от юзера (10.12.0.254) на установку соединения идет на сайт 81.19.70.3, но подтверждение приходит от сервера биллинга (10.12.255.254), после чего соединение сбрасывается.

 

а с моршрутизацыей у вас все в порядке ? может сервак не знает где у вас 10,12,0,0/24 я так понимаю перенаправленные абоны уже на него без ната идут, воответственно ваш сервер должен знать куда ответить на 10,12,0,0/24 и у вас что реально /16 сеть на абонах ?извращенец вы батенька:)

Edited by DemonidZe

Share this post


Link to post
Share on other sites

 

 

у вас что реально /16 сеть на абонах ?извращенец вы батенька

А если вдруг пользователей станет 256, тогда альяс городить для новой сети или маску расширять? Ну можно конечно /22 взять, но тогда есть риск где-то перепутать /24 и /22. А с /16 - не спутаешь )

Вообще это пока стенд на столе и под столом)

По проблеме. Сервер подключен к бриджу микротика (LAN), туда же включен и комп пользователя. Все находятся в одной 10.12.0.0/16. Все хосты знают маршрут в свою сеть и шлюз. Я так понимаю, если бы сервер был шлюзом, то указанной в моем предыдущем посте проблемы бы не было. Я так сразу и пытался сделать, но не получилось и начал ковырять роутинг маркированных, но есть какой-то глюк. Он устраняется - нужно выкл-вкл сетевой интерфейс и переполучить ip (ну или перегрузить комп). Как работает совет от SavPasha пока не разобирался.

Share this post


Link to post
Share on other sites

 

у вас что реально /16 сеть на абонах ?извращенец вы батенька

А если вдруг пользователей станет 256, тогда альяс городить для новой сети или маску расширять? Ну можно конечно /22 взять, но тогда есть риск где-то перепутать /24 и /22. А с /16 - не спутаешь )

Вообще это пока стенд на столе и под столом)

По проблеме. Сервер подключен к бриджу микротика (LAN), туда же включен и комп пользователя. Все находятся в одной 10.12.0.0/16. Все хосты знают маршрут в свою сеть и шлюз. Я так понимаю, если бы сервер был шлюзом, то указанной в моем предыдущем посте проблемы бы не было. Я так сразу и пытался сделать, но не получилось и начал ковырять роутинг маркированных, но есть какой-то глюк. Он устраняется - нужно выкл-вкл сетевой интерфейс и переполучить ip (ну или перегрузить комп). Как работает совет от SavPasha пока не разобира

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

Share this post


Link to post
Share on other sites

Микротик - шлюз.

фаер микротика:

 

 

/ip firewall filter
add action=drop chain=input comment="Drop Invalid connections" \
    connection-state=invalid
add chain=input comment="Allow Established connections" connection-state=\
    established
add chain=input comment="Allow Related connections" connection-state=related \
    in-interface=ether1-gateway
add chain=input dst-port=80 in-interface=bridge1 protocol=tcp src-address=\
    10.12.0.0/16
add chain=forward src-address-list=ALLOW
add chain=forward dst-address-list=ALLOW
add action=add-src-to-address-list address-list=DISCON address-list-timeout=\
    30s chain=forward in-interface=bridge1 src-address-list=!ALLOW
add chain=forward dst-address-list=NAT src-address-list=DISCON
add chain=forward dst-address-list=DISCON src-address-list=NAT
add action=drop chain=forward
add action=drop chain=input comment="drop ftp brute forcers ftp_blacklist" \
    dst-port=21 protocol=tcp src-address-list=ftp_blacklist
add chain=output content="530 Login incorrect" dst-limit=\
    1/1m,9,dst-address/1m protocol=tcp
add action=add-dst-to-address-list address-list=ftp_blacklist \
    address-list-timeout=1h chain=output content="530 Login incorrect" \
    protocol=tcp
add action=drop chain=input comment="drop ssh brute forcers" dst-port=22 \
    protocol=tcp src-address-list=ssh_blacklist
add action=add-src-to-address-list address-list=ssh_blacklist \
    address-list-timeout=1h chain=input connection-state=new dst-port=22 \
    protocol=tcp src-address-list=ssh_stage3
add action=add-src-to-address-list address-list=ssh_stage3 \
    address-list-timeout=1m chain=input connection-state=new dst-port=22 \
    protocol=tcp src-address-list=ssh_stage2
add action=add-src-to-address-list address-list=ssh_stage2 \
    address-list-timeout=1m chain=input connection-state=new dst-port=22 \
    protocol=tcp src-address-list=ssh_stage1
add action=add-src-to-address-list address-list=ssh_stage1 \
    address-list-timeout=1m chain=input connection-state=new dst-port=22 \
    protocol=tcp

/ip firewall nat
add action=src-nat chain=srcnat comment=way3 dst-address-list=!NAT \
    out-interface=ether1-gateway src-address-list=ALLOW to-addresses=\
    192.168.0.220
add action=dst-nat chain=dstnat comment=way3 dst-port=80 protocol=tcp \
    src-address-list=DISCON to-addresses=10.12.255.254 to-ports=80
add action=netmap chain=dstnat dst-port=64080 in-interface=ether1-gateway \
    protocol=tcp to-addresses=10.12.255.254 to-ports=81
add action=netmap chain=dstnat dst-port=64022 in-interface=ether1-gateway \
    protocol=tcp to-addresses=10.12.255.254 to-ports=22

/ip firewall address-list
add address=10.12.255.254 disabled=no list=ALLOW
add address=10.12.0.0/16 disabled=no list=NAT

 

 

фаер сервера биллинга (FreeBSD 9.3 x64, таблица 101 - защита от брутфорс, табл 2 - сеть абонентов). пробовал и без 404 правила.

uhw работает таким образом, что, в качестве дефолтного шлюза, dhcp сервера выдает свой ip

виртуалхост биллинга на 81 порту

 

 

root@bill:/# ipfw show
00030    0      0 deny log logamount 100 ip from table(101) to me via re0 in
00031    0      0 deny log logamount 100 ip from me to table(101) via re0 out
00404  556  27800 fwd 127.0.0.1,80 ip from table(2) to me dst-port 80
00502    0      0 fwd 127.0.0.1,80 ip from 172.30.0.0/16 to not me dst-port 80
65534 1226 454714 allow ip from any to any
65535    0      0 deny ip from any to any

 

 

Edited by mac

Share this post


Link to post
Share on other sites

Вобщем, мой вариант с маркировкой пакетов должников и последующей маршрутизацией оказался работающим без проблем на компе с windows 7 :blink: .

Может и другие варианты заработали бы, но пока не стал пробовать.
Попутно всплыл другой вопрос. Как уговорить биллинг заполнять таблицу должников? :)

Поскольку local NAS на сервере нет, соответственно table 47 не заполняется адресами должников

и редиректятся в кабинет пользователя все, кто не в таблице ALLOW, а значит и те, кто, назначил себе левый статический адрес.

Естественно в браузере у таких будет ошибка, если абонента с таким ip адресом нет.
 

Share this post


Link to post
Share on other sites

...Как уговорить биллинг заполнять таблицу должников? ...

 

 

Я модифицировал себе, для включения абонента на двух серверах, для этого правил файлик 

/etc/stargazer/system/executer/mikrotik.drv

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

А то меня такие-же грабли скоро будут ждать :-)

 

PS: А кто знает, можно ли передать CF старгазеру. Ну что бы передать допустим особый адреслист для микротика?

Edited by SoulRoot

Share this post


Link to post
Share on other sites

 

 

PS: А кто знает, можно ли передать CF старгазеру. Ну что бы передать допустим особый адреслист для микротика?

/etc/stargazer/getCF [login] [cfID]

Share this post


Link to post
Share on other sites

 

PS: А кто знает, можно ли передать CF старгазеру. Ну что бы передать допустим особый адреслист для микротика?

/etc/stargazer/getCF [login] [cfID]

 

судя по этому, оно затёрлося где-то здеся:

# rm /etc/stargazer/Get* && rm /etc/stargazer/On* && rm /etc/stargazer/fullArp.php && rm /etc/stargazer/config

Share this post


Link to post
Share on other sites

Значит в дефолтных пресетах должно быть.

Share this post


Link to post
Share on other sites

 

...Как уговорить биллинг заполнять таблицу должников? ..

 

Я модифицировал себе, для включения абонента на двух серверах, для этого правил файлик 

/etc/stargazer/system/executer/mikrotik.drv

Я думал править вот эти php скрипты:

/etc/stargazer/OnConnect
/etc/stargazer/OnDisconnect

посмотрел код и дошло :wacko: :

при адаптации под микротик table 47 заполняется только скриптом debtors.php  !? я правильно понял? локальный НАС таблицой 47 уже не управляет?

Edited by mac

Share this post


Link to post
Share on other sites

Как напишу свой вариант, выложу. Пока что не до этого...

Share this post


Link to post
Share on other sites

сделал исправления в скриптах:

 

/etc/stargazer/OnDisconnect

добавить строчку в блок // User's IP чтобы выглядел так:

        // User's IP:
        if ( isset($argv[2]) ) {
            define('IP', $argv[2]);
            shell_exec("/sbin/ipfw -q table 47 add ".$argv[2]);
        } else define('IP', NULL);

/etc/stargazer/OnСonnect

добавить строчку в блок // User's IP чтобы выглядел так:

        // User's IP:
        if ( isset($argv[2]) ) {
            define('IP', $argv[2]);
            shell_exec("/sbin/ipfw -q table 47 delete ".$argv[2]);
        } else define('IP', NULL);

Изменил баланс пользователя в минус - добавлятся в табл 47, изменил в 0 - удаляется из таблицы. Работает!

Но есть вопрос: если при работе с табл 47 произойдет ошибка, вся остальная часть скрипта On* отработает нормально?

Edited by mac

Share this post


Link to post
Share on other sites
сделал исправления в скриптах:

 

/etc/stargazer/OnDisconnect

добавить строчку в блок // User's IP чтобы выглядел так:

 

        // User's IP:

        if ( isset($argv[2]) ) {

            define('IP', $argv[2]);

            shell_exec("/sbin/ipfw -q table 47 add ".$argv[2]);

        } else define('IP', NULL);

/etc/stargazer/OnСonnect

добавить строчку в блок // User's IP чтобы выглядел так:

 

        // User's IP:

        if ( isset($argv[2]) ) {

            define('IP', $argv[2]);

            shell_exec("/sbin/ipfw -q table 47 delete ".$argv[2]);

        } else define('IP', NULL);

Изменил баланс пользователя в минус - добавлятся в табл 47, изменил в 0 - удаляется из таблицы. Работает!

Но есть вопрос: если при работе с табл 47 произойдет ошибка, вся остальная часть скрипта On* отработает нормально?

А что относительно Mikrotik? Или я темы попутал?

Share this post


Link to post
Share on other sites

 

 

посмотрел код и дошло :wacko: : при адаптации под микротик table 47 заполняется только скриптом debtors.php !? я правильно понял? локальный НАС таблицой 47 уже не управляет?

фух! управляет через /etc/stargazer/system/executer/rscriptd.drv

Share this post


Link to post
Share on other sites

 

 

А что относительно Mikrotik? Или я темы попутал?

А что микротик? В микротике все работает

Share this post


Link to post
Share on other sites
А что относительно Mikrotik? Или я темы попутал?

А что микротик? В микротике все работает

Ну так таб. 47 вроде бы локальный нас, а редирект надо же на микротике сделать. Или я не понял как оно у вас настроено...

Share this post


Link to post
Share on other sites

Так в теме три варианта редиректов. Просто микротик перенаправляет все адреса, кроме разрешенных.

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

Если табл 47 заполнена правильно, то ipfw будет редиректить в кабинет пользователя только табл 47, а не всех подряд.

Возможно вам это вообще не нужно если у вас IP source guard + dhcp snooping binding на абонентских портах, статич адреса свич не пропустит, значит вам табл 47 не нужна.

Edited by mac

Share this post


Link to post
Share on other sites

Ну я настроил таким образом(осталось обучить этому Ubilling):

На микротике есть некий адресслист, назовём его Упс, и адреслист, к примеру, Окей.

 

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

Если они хотят получить не в Окей что-то по 80 порту, то они идут куда мне надо в зоне Окей.

Ну как-то так на пальцах.

 

В итоге сам микротик делает заворот трафика куда надо.

 

Позже ещё обучу его заворачивать 443...

Share this post


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.

  • Similar Content

    • By Иван Авилов
      Ремонт точек доступа, роутеров , камер , свитчей  Ubiquiti (UBNT), MikroTik , Dahua , Hikvision и другого сетевого оборудования с гарантией.
      Если ваша точка доступа или роутер:
      - не включается;
      - не видна в сети, не пингуется, на точку доступа невозможно зайти;
      - не раздает интернет по Wi-Fi;
      - постоянно обрывает соединение;
      - на роутере или точке стала низкой скорость,
      то, скорее всего, вам необходима помощь квалифицированного специалиста по ремонту.
      Сервисный центр LanService выполняет следующие виды ремонтов оборудования MikroTik и Ubiquiti:
      - перепрошивку точек доступа, восстановление прошивки;
      - замену мелких деталей;
      - ремонт цепей питания;
      - устранение короткого замыкания;
      - замену процессора, LAN-порта, радиомодуля, флеш-памяти и т. д.
      Ремонтируем также точки доступа и роутеры, переставшие работать после грозы.
      Диагностика бесплатно!
      После диагностики оборудования озвучиваются ориентировочные сроки и стоимость ремонта.
      Работаем по всей Украине через Новую Почту.
      Сроки ремонта оборудования Ubiquiti (UBNT), MikroTik:
      - при наличии запчастей - от 2 до 10 дней;
      - при отсутствии запчастей - от 2 до 4 недель.
      Стоимость от 100 грн.
      После ремонта оборудование обязательно тестируется. На выполненные работы - гарантия 1 мес!
      Звоните:
      066-440-73-23
      096-731-98-45
    • By MikroTik-Config
      Профессиональная настройка оборудования Mikrotik: маршрутизаторы(роутеры), точки доступа WiFi, коммутаторы(свитчи):

      - Настройка интернета;
      - Балансировка нагрузки, несколько провайдеров, автопереключение;
      - Настройка маршрутизации;
      - Настройка удаленного доступа VPN: pptp, l2tp, ipsec;
      - Настройка строго FireWall(корпоративный уровень);
      - Создание единой WiFi сети с использованием технологии "бесшовного роуминга" Capsman;
      - Подключение Radius сервера для авторизации VPN, WiFi посредством Active Directory;
      - Подключение к системе мониторинга(БЕСПЛАТНАЯ ОПЦИЯ)

      и многое другое. 

      Работаю без выходных.

      БЕЗ привязки к региону! Работаем по всей Украине: Винница, Луцк, Днепр, Донецк, Житомир, Ужгород, Запорожье, Ивано-Франковск, Киев, Кропивницкий(Кировоград), Луганск, Львов, Николаев, Одесса, Полтава, Ровно, Суммы, Тернополь, Харьков, Херсон, Хмельницкий, Черкассы, Чернигов, Черновцы.
    • By Oleg2018
      При тестовой проверке в дебаг режиме вываливается pap: WARNING: Authentication will fail unless a "known good" password is available и в результате запрос игнорирует. Понимаю что не воспринимает пароль. Все делал строго по инструкции. Кто сталкивался и как решал?
    • By Oleg2018
      Связка ubilling + nas (cisco ASR 1002) + кучаген работает, клиентская машина ип получает, пинги на 8.8.8.8 идут а вот интернета нет. На запрос nslookup  получаю ответ dns request timed out Can`t find server name for address 8.8.8.8/ю Помогите разобраться 
    • By Vingpon
      Продам Mikrotik CCR1036-8G-2S+ новый брался для резерва не использовался цена 20 000 грн.



×