alibek Posted May 28, 2018 Posted May 28, 2018 Есть маршрутизатор с такой настройкой: 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? Вставить ник Quote
alibek Posted May 29, 2018 Author Posted May 29, 2018 Что-то не пойму, как 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 сказал: https://habr.com/post/313342/ У меня не failover, мне нужно часть сервисов вывести фиксированно через ISP2. Все что касается маркировки и маршрутизации у меня сделано, но почему-то трафик не перенаправляется. Вставить ник Quote
.None Posted May 29, 2018 Posted May 29, 2018 пинг откуда делаете с микротика? попробуйте в правиле убрать routing-mark=main Вставить ник Quote
alibek Posted May 29, 2018 Author Posted May 29, 2018 Пинг делаю через Tools - Traceroute, выбрав протокол icmp. routing-mark=main убирал, все равно не роутит (трасировка ходит через pppoe). Судя по счетчикам, правило срабатывает. Но эффекта не вижу, пакеты ходят через pppoe, а не через vlan100. Если для трассировки вручную задать интерфейс vlan100, тогда трассировка вообще не проходит. Вставить ник Quote
EugeneTV Posted May 29, 2018 Posted May 29, 2018 2 часа назад, alibek сказал: У меня не failover, мне нужно часть сервисов вывести фиксированно через ISP2 так там отдельно и написано как пришпилить входящее соединение к определенному интерфейсу Вставить ник Quote
alibek Posted May 29, 2018 Author Posted May 29, 2018 Выполняю команду /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. Если из ссылки убрать привязку к соединениям, то все действия я уже сделал, но они не работают. Вставить ник Quote
.None Posted May 29, 2018 Posted May 29, 2018 PBR странно работает, или я чего не дочитал, в вашем случае должно помочь /ip route rule add routing-mark=pubsvc action=lookup table=pubsvc и двинуть это правило в самый верх Вставить ник Quote
alibek Posted May 29, 2018 Author Posted May 29, 2018 Поставил, ничего не поменялось — трассировка все также идет через pppoe. Вставить ник Quote
.None Posted May 29, 2018 Posted May 29, 2018 если вы будете делать трассировку не с миктротика, то будет работать, если хотите с микротика добавьте правило для 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 Вставить ник Quote
alibek Posted May 29, 2018 Author Posted May 29, 2018 Да, так работает. Странно, я думал что цепочка prerouting действует на все пакеты, не только транзитные. Вставить ник Quote
alibek Posted May 29, 2018 Author Posted May 29, 2018 Что-то у латышей все не как у людей. Подскажите, что не так? Хочу настроить 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 я не вижу соединения с навешенной меткой. Что же ему надо? Вставить ник Quote
.None Posted May 29, 2018 Posted May 29, 2018 (edited) 1 час назад, alibek сказал: 1. Делаю разрешающее правило: в input не нужно, нужно разрешать forward а в таблице маршрутизации есть маршрут с меткой vlan100-route? добавьте в в фильтр логирующее правило на forward с src-address 192.168.1.9, в логах будет виден out interface? а так вроде все правильно, маркируем соединение, а потом навешиваем метку маршрута попробуйте тот же финт с ip rule, добавить првавило счетчики на правилах тикают? Edited May 29, 2018 by .None Вставить ник Quote
alibek Posted May 29, 2018 Author Posted May 29, 2018 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 не запускается. Вставить ник Quote
McSea Posted May 29, 2018 Posted May 29, 2018 (edited) @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 May 29, 2018 by McSea Вставить ник Quote
.None Posted May 30, 2018 Posted May 30, 2018 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? Вставить ник Quote
alibek Posted May 30, 2018 Author Posted May 30, 2018 А, в этом смысле. Нет, я просто pubsvc переименовал в vlan100-route. Вставить ник Quote
.None Posted May 30, 2018 Posted May 30, 2018 не видно всей картины, нужно видеть и ip route и ip rule и ip firewall filter/nat/mangle, если все вроде настроено правильно дебажить log правилами и разбираться почему не так ходит Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.