Страница 1 из 1

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

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

Балансировка каналов настроена, файловер настроен. Работает всё, кроме этого.
Пробовал через mangle отправлять на определённый маршрут, в результяте все, кто за этим микротиком - спокойно фильтруются, отрабатывают и идут на нужный маршрут, сам микротик - не хочет.

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

Добавлено: 02 май 2018, 18:47
Chupaka
Добрый.

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

Или просто в таблице маршрутизации main создать маршрут через нужный интерфейс для нужного адреса. Там явно у вас ходит только роутер, а клиенты - в созданных для балансировки таблицах.

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

Добавлено: 02 май 2018, 19:56
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, но это не важно, так как не ходит только с самого рутера. За ним всё в норме

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

Добавлено: 02 май 2018, 20:19
Sir_Prikol
upd

Странно, через минут 15 правила начали отрабатывать
Даже не знаю, что сработало :)
Будем наблюдать

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

Добавлено: 02 май 2018, 20:30
Sir_Prikol
upd 2

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

Ничего не понимаю :)

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

Добавлено: 02 май 2018, 20:59
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).

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

Добавлено: 02 май 2018, 21:24
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. Висит на нужном интерфейсе.

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

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

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

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

Добавлено: 02 май 2018, 21:38
Chupaka
Ну, по идее, от трансляции адресов можно избавиться, указав в fetch параметр src-address=10.8.0.6

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

Добавлено: 02 май 2018, 22:04
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 и оно не бегало.

Ладно, пока оставлю как есть, буду думать об этом завтра :)

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

Добавлено: 02 май 2018, 22:47
Sir_Prikol
upd

/tool fetch address=хост

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

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

Осталось написать скрипт, который будет проверять изменения ip адреса нужного мне хоста и заменять его в статических dns записях

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

Добавлено: 03 май 2018, 10:43
Chupaka
/tool fetch address=[:resolve "host"] не поможет?

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

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

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

Есть глюки с маршрутизацией ipv6, но это тема дл отдельного поста.