Jump to content
Калькуляторы

PBR на Микротике

Есть маршрутизатор с такой настройкой:

eth1 - интернет-подключение по умолчанию через PPPoE

eth2/vlan100 - статикой прописан белый IP aa.aa.aa.80/25

eth2/vlan30 - статикой прописан серый IP 10.1.144.3/24

eth3,eth4,wifi1 - объединены в bridge, локальная сеть 192.168.1.254/24

eth5 - резервное интернет-подключение, DHCP-клиент

 

Далее на нем настроены:

- дефолтный маршрут через PPPoE (в настройках PPPoE-подключения выбран пункт Add default route)

- маршрут на aa.aa.aa.0/22 через eth2/100

- маршрут на некоторые хосты через eth2/100

- маршрут на 10.1.0.0/16 через eth2/30

- маршрут на 10.102.0.0/16 через eth2/30

- в правилах NAT сделан dstnat на некоторые сервисы в локальной сети

 

Но тут есть некоторая нестыковка.

Допустим у меня есть публичный сервис http://aa.aa.aa.80:80, который через dstnat проброшен на 192.168.1.1:80.

При внешнем обращении на этот сервис с aa.aa.aa.0/22 все работает нормально.

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

Как мне настроить PBR таким образом, чтобы все что прошло через определенные dstnat сразу маркировалось какой-то меткой и в дальнейшем исходящие пакеты уходили через eth2/100?

 

Share this post


Link to post
Share on other sites

Что-то не пойму, как PBR работает в RouterOS.

 

Есть такое правило маршрутизации — должно роутить через eth2/100 все, что имеет метку pubsvc:

/ip route add distance=10 gateway=vlan100 routing-mark=pubsvc

Есть такое mangle-правило — оно должно ставить метку pubsvc на все icmp-пакеты, адресованные наружу (acl-bogon содержит списки всех приватных IP):

/ip firewall mangle add action=mark-routing chain=prerouting dst-address-list=!acl-bogon new-routing-mark=pubsvc passthrough=yes protocol=icmp routing-mark=main

Но делаю трассировку с использованием icmp — пакеты ходят через шлюз по умолчанию (pppoe-подключение).

 

8 минут назад, EugeneTV сказал:

У меня не failover, мне нужно часть сервисов вывести фиксированно через ISP2.

Все что касается маркировки и маршрутизации у меня сделано, но почему-то трафик не перенаправляется.

Share this post


Link to post
Share on other sites

пинг откуда делаете с микротика?

 

попробуйте в правиле убрать routing-mark=main

Share this post


Link to post
Share on other sites

Пинг делаю через Tools - Traceroute, выбрав протокол icmp.

routing-mark=main убирал, все равно не роутит (трасировка ходит через pppoe).

 

Судя по счетчикам, правило срабатывает.

Но эффекта не вижу, пакеты ходят через pppoe, а не через vlan100.

Если для трассировки вручную задать интерфейс vlan100, тогда трассировка вообще не проходит.

Share this post


Link to post
Share on other sites
2 часа назад, alibek сказал:

У меня не failover, мне нужно часть сервисов вывести фиксированно через ISP2

так там отдельно и написано как пришпилить входящее соединение к определенному интерфейсу

Share this post


Link to post
Share on other sites

Выполняю команду /tool traceroute protocol=icmp max-hops=4 count=1 8.8.8.8 — ходит через pppoe.

Выполняю команду /tool traceroute protocol=icmp routing-table=vlan100-route max-hops=4 count=1 8.8.8.8 — ходит через vlan100 (то есть таблица маршрутизации работает).

Делаю mangle-правило с действием new-routing-mark — судя по счетчику, правило срабатывает, однако трассировка ходит через pppoe (если не задавать вручную routing-table).

 

5 минут назад, EugeneTV сказал:

так там отдельно и написано как пришпилить входящее соединение к определенному интерфейсу

Мне ничего пришпиливать не надо. Тем более речь не о входящих соединениях, а об исходящем трафике.

Мне для начала нужно, чтобы icmp всегда ходил через определенный интерфейс с помощью PBR.

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

Share this post


Link to post
Share on other sites

PBR странно работает, или я чего не дочитал, в вашем случае должно помочь

/ip route rule add routing-mark=pubsvc action=lookup table=pubsvc

и двинуть это правило в самый верх

Share this post


Link to post
Share on other sites

Поставил, ничего не поменялось — трассировка все также идет через pppoe.

Share this post


Link to post
Share on other sites

если вы будете делать трассировку не с миктротика, то будет работать, если хотите с микротика добавьте правило для output

/ip firewall mangle add action=mark-routing chain=output dst-address-list=!acl-bogon new-routing-mark=pubsvc passthrough=yes protocol=icmp routing-mark=main

 

Share this post


Link to post
Share on other sites

Да, так работает.

Странно, я думал что цепочка prerouting действует на все пакеты, не только транзитные.

Share this post


Link to post
Share on other sites

Что-то у латышей все не как у людей.

Подскажите, что не так?

Хочу настроить RDP, чтобы он всегда работал через vlan100.

 

1. Делаю разрешающее правило:

/ip firewall filter add action=accept chain=input dst-port=65200-65535 in-interface=vlan100 protocol=tcp

Подключаюсь на tcp/65200, в логах вижу, что пакет приходит и правило отрабатывает.

 

2. Добавляю трансляцию:

/ip firewall nat add action=dst-nat chain=dstnat dst-port=65200 in-interface=vlan100 protocol=tcp src-address=aa.bb.cc.dd to-addresses=192.168.1.9 to-ports=3389

Подключаюсь по RDP на порт 65200, в логах вижу, что пакет транслируется и передается на 192.168.1.9.

 

3. Навешиваю метку:

/ip firewall mangle add action=mark-connection chain=forward in-interface=vlan100 new-connection-mark=vlan100-fwd out-interface=bridge-lan passthrough=no src-address=aa.bb.cc.dd
/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=vlan100-fwd new-routing-mark=vlan100-route passthrough=no

Судя по логам и счетчику, правило срабатывает и метка навешивается.

Однако RDP не работает и в IP - Firewall - Connections я не вижу соединения с навешенной меткой.

 

Что же ему надо?

Share this post


Link to post
Share on other sites
1 час назад, alibek сказал:

1. Делаю разрешающее правило:

в input не нужно, нужно разрешать forward

 

а в таблице маршрутизации есть маршрут с меткой vlan100-route?

 

добавьте в в фильтр логирующее правило на forward с src-address 192.168.1.9, в логах будет виден out interface? а так вроде все правильно, маркируем соединение, а потом навешиваем метку маршрута

 

попробуйте тот же финт с ip rule, добавить првавило

 

счетчики на правилах тикают?

Edited by .None

Share this post


Link to post
Share on other sites
3 часа назад, .None сказал:

в input не нужно, нужно разрешать forward

Я всякое пробовал, прежде чем спрашивать.

Если правило делать в цепочке forward, то оно вообще не срабатывает (счетчик не изменяется).

А вот в цепочке input попытки подключиться к внешнему опубликованному порту (tcp:65200) на счетчиках отражаются.

 

3 часа назад, .None сказал:

а в таблице маршрутизации есть маршрут с меткой vlan100-route?

Разумеется, прежде чем начать создание правил для транзитного трафика я обкатал PBR на локальном трафике (с самого микротика).

 

3 часа назад, .None сказал:

попробуйте тот же финт с ip rule, добавить првавило

В каком смысле? ip rule для метки pubsvc и действием lookup в pubsvc я создавал ранее.

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

 

3 часа назад, .None сказал:

счетчики на правилах тикают?

Да, счетчики растут, если в правилах включаю логгирование, то в логах вижу пакеты (с правильными in/out интерфейсами и IP-адресами).

С виду все правильно, но не работает, RDP не запускается.

Share this post


Link to post
Share on other sites

@alibek 

Вот три  рабочих правила (443 порт для SSTP), с направлением в сторону нужного провайдера

 

/ip firewall filter 
add action=accept chain=forward dst-port=443 in-interface=WAN protocol=tcp
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=443 in-interface=WAN protocol=tcp to-addresses=192.168.1.3 to-ports=443
/ip firewall mangle
add action=mark-routing chain=prerouting dst-address-list=!intra in-interface=bridge new-routing-mark=WAN-route passthrough=no protocol=tcp src-address=192.168.1.3 src-port=443

Разрешающее правило в цепочке forward (в стандартном конфиге в forward drop all есть исключение для dst-nat),

dst-nat на локальный адрес, у меня на внешке один и динамический адрес - не указываю,

и mark-routing пакетов наружу(!intra) в сторону нужного провайдера   со стороны локальной сети(bridge)  с данного IP/tcp/порта.

 

+ Если есть правило fasttrack, надо поставить там !dstnat, иначе часть пакетов будет не туда уходить, mark-routing c fasttrack-ом не работает.

 

 

Edited by McSea

Share this post


Link to post
Share on other sites
11 часов назад, alibek сказал:

В каком смысле? ip rule для метки pubsvc и действием lookup в pubsvc я создавал ранее.

а в 

/ip firewall mangle add action=mark-routing chain=prerouting connection-mark=vlan100-fwd new-routing-mark=vlan100-route passthrough=no

у вас new-routing-mark=vlan100-route

может там поставить new-routing-mark=pubsvc?

Share this post


Link to post
Share on other sites

А, в этом смысле.

Нет, я просто pubsvc переименовал в vlan100-route.

Share this post


Link to post
Share on other sites

не видно всей картины, нужно видеть и ip route и ip rule и ip firewall filter/nat/mangle, если все вроде настроено правильно дебажить log правилами и разбираться почему не так ходит

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
Sign in to follow this