Сделать запрос через определённый интерфейс

RIP, OSFP, BGP, MPLS/VPLS
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

Добрый день.
Есть микротик RB3011.
На сегодня подключено уже 4 провайдера.
Требуется, чтоб в том-же Netwatch, запрос вида /tool fetch url="blahblahblah" шёл через определённого провайдера, а не ломился на все подряд.

Балансировка каналов настроена, файловер настроен. Работает всё, кроме этого.
Пробовал через mangle отправлять на определённый маршрут, в результяте все, кто за этим микротиком - спокойно фильтруются, отрабатывают и идут на нужный маршрут, сам микротик - не хочет.
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4086
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Сделать запрос через определённый интерфейс

Сообщение Chupaka »

Добрый.

Через mangle, правильно. Только в chain=output надо метить, а не prerouting :)

Или просто в таблице маршрутизации main создать маршрут через нужный интерфейс для нужного адреса. Там явно у вас ходит только роутер, а клиенты - в созданных для балансировки таблицах.
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

mangle
второе спокойно отрабатывает для клиентов

Код: Выделить всё

/ip firewall mangle
add action=mark-routing chain=output dst-address-list=lv-traff log-prefix=lv new-routing-mark=to_lv passthrough=no   (стоит первым в цепочке)
add action=mark-routing chain=prerouting dst-address-list=lv-traff log-prefix=lv new-routing-mark=to_lv passthrough=no    (второе в цепочке)

дальше правилв балансировки

route rule

Код: Выделить всё

/ip route rule
add action=lookup-only-in-table routing-mark=ISP1 table=ISP1
add action=lookup-only-in-table routing-mark=ISP2 table=ISP2
add dst-address=214.14.163.20/32 interface=00.to-lv routing-mark=to_lv table=main
route

Код: Выделить всё

/ip route
add distance=1 gateway=00.to-lv routing-mark=to_lv
Не работает, хоть тресни.

интервейс указан из-за того, что поднят vpn, но это не важно, так как не ходит только с самого рутера. За ним всё в норме
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

upd

Странно, через минут 15 правила начали отрабатывать
Даже не знаю, что сработало :)
Будем наблюдать
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

upd 2

Странно как-то, работало около 5-ти минут. Потом опять по таймауту молчал, потом (через пару минут) заного заработало.

Ничего не понимаю :)
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4086
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Сделать запрос через определённый интерфейс

Сообщение Chupaka »

Правила в prerouting не играют роли, поскольку пакеты самого роутера туда не попадают: https://wiki.mikrotik.com/wiki/Manual:P ... ow#Diagram

Route rule для IP-адреса отрабатывать не будет, поскольку interface - это интерфейс, с которого пакет пришёл, а не куда он должен уйти.

Ping на ресурс, для которого делается fetch, вообще ходит?

Ну и уже надо смотреть /ip route print detail (например, для той таблицы, в которую попадают маркированные в output пакеты; не забыть, что в main должен быть активный маршрут для данного адреса (любой) - без этого будет просто dst-unreachable).
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

Код: Выделить всё

May/02/2018 20:17:31 firewall,info lv output: in:(unknown 0) out:00.pppoe-ISP01, proto TCP (ACK), 123.123.123.123:59580->214.14.163.20:443, NAT (123.123.123.123:59580->10.8.0.6:59580)->214.14.163.20:443, len 52
May/02/2018 20:17:31 firewall,info lv output: in:(unknown 0) out:00.pppoe-ISP01, proto TCP (ACK), 123.123.123.123:59580->214.14.163.20:443, NAT (123.123.123.123:59580->10.8.0.6:59580)->214.14.163.20:443, len 52
May/02/2018 20:17:31 firewall,info lv output: in:(unknown 0) out:00.pppoe-ISP01, proto TCP (ACK,PSH), 123.123.123.123:59580->214.14.163.20:443, NAT (123.123.123.123:59580->10.8.0.6:59580)->214.14.163.20:443, len 178
10.8.0.6 - нужный ip. Висит на нужном интерфейсе.

Судя по логу, идёт запрос на основной интерфейс, потом нат, потом на нужный.

В принципе меня такая схема устраивает, хотя у неё есть посредник.

Понаблюдаю день, может не будет сбрасываться. Хотя логика в таком варианте тоже присутствует.
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4086
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Сделать запрос через определённый интерфейс

Сообщение Chupaka »

Ну, по идее, от трансляции адресов можно избавиться, указав в fetch параметр src-address=10.8.0.6
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

Код: Выделить всё

/tool fetch src-address=10.8.0.6 url="https://xxxxxxxx/yyyyyy!" 
failure: closing connection: <bind() failed: Address family not supported by protocol> 2000:47g:4a9:f337::15:443 (4)
А так он пытается через ipv6 законнектится.
Что совсем запутывает мозг, так как я принудительно тот хост прописывал через ipv6 и оно не бегало.

Ладно, пока оставлю как есть, буду думать об этом завтра :)
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

upd

/tool fetch address=хост

В таком случае он забирает нужный мне ip

решил проблему немного по другому. Жёстко прописал ip адрес в dns записях - начало отрабатывать нормально.

Осталось написать скрипт, который будет проверять изменения ip адреса нужного мне хоста и заменять его в статических dns записях
Дома: CCR2004 (7-ISP(GPON)белый IP)
Аватара пользователя
Chupaka
Сообщения: 4086
Зарегистрирован: 29 фев 2016, 15:26
Откуда: Минск

Re: Сделать запрос через определённый интерфейс

Сообщение Chupaka »

/tool fetch address=[:resolve "host"] не поможет?
Аватара пользователя
Sir_Prikol
Сообщения: 562
Зарегистрирован: 14 апр 2018, 15:21
Откуда: СССР

Re: Сделать запрос через определённый интерфейс

Сообщение Sir_Prikol »

Это помогает, но он резолвит ipv6 по умолчанию, а надо ipv4. Вот поэтому сейчас пишу скрипт, который будет опрашивать хост на предмет ipv4 адреса, и ставить его в статическую запись dns микротика. К сожалению, хоть у хоста и есть ipv6 адрес, сами данные отдаются только по ipv4. Софт старый, и, временно, переделки не будет.

Спасибо за советы. Сейчас работает.

Есть глюки с маршрутизацией ipv6, но это тема дл отдельного поста.
Дома: CCR2004 (7-ISP(GPON)белый IP)