Перейти до

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


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

Добрый день  знатоки. Вопрос к использующим 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

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

 

 

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


/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

 

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

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
Відредаговано mac
Ссылка на сообщение
Поделиться на других сайтах

 

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

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

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

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

 

 

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

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

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

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

/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 мои локальные префиксы.

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
ну можете попробовать так , работает без проблем:

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

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), после чего соединение сбрасывается.

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

 

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

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

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 сеть на абонах ?извращенец вы батенька:)

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

 

 

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

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

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

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

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

 

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

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

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

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

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

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

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

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

 

 

/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

 

 

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

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

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

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

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

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

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

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

 

 

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

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

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

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

 

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

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

 

 

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

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

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

 

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

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

 

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

# rm /etc/stargazer/Get* && rm /etc/stargazer/On* && rm /etc/stargazer/fullArp.php && rm /etc/stargazer/config
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)

 

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

 

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

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

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

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

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

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

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

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

 

/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* отработает нормально?

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

 

/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? Или я темы попутал?

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

 

 

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

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

Ссылка на сообщение
Поделиться на других сайтах
А что относительно Mikrotik? Или я темы попутал?

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

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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

 

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

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

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

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

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

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

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

Вхід

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

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

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

  • Схожий контент

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