Ответы пользователя по тегу Сетевая маршрутизация
  • Использование второго ISP для проброса за нат Микротик?

    @Grustnui
    Уважаемый q-q. Нехорошо так говорить, но, пожалуйста подучите мат часть. И экспериментируйте не на своём офисе, а на тестовой среде:)

    Я конечно могу ошибаться, но, по сути, вы сделали round robin между 2мя шлюзами. Причем очень неудачным образом. У вас пакеты в случайном порядке будут бегать через разные шлюзы без учета установленных соединений. Что получилось дальше: изначально, к примеру, соединение с google.com прилетело с ip 10.10.10.10, а следующий пакет с ушел с ip 20.20.20.20, от чего гугл слегка прифигел. Отсюда и лаги интернета. Верните как было :)

    По теме как решить Ваш вопрос.
    Чтобы мы лучше понимали друг друга.
    1) Пусть IP от основного провайдера, который используется для SSTP 10.10.10.10
    2) Для проброса портов мы хотим использовать второй провайдер: 20.20.20.20
    3) ip адрес железяки в локалке к которой хотим пробрасывать порты: 1.1.1.2

    Первая часть - очевидная пробрасываем все что приходит например на локальный ip:

    /ip firewall nat
    add action=dst-nat chain=dstnat dst-address=20.20.20.20 dst-port=80 protocol=\
    tcp to-addresses=1.1.1.2 to-ports=80
    add action=dst-nat chain=dstnat dst-address=20.20.20.20 dst-port=443 protocol=\
    tcp to-addresses=1.1.1.2 to-ports=443

    Но внезапно не работает :) Почему, да потому, что у вас получается так, что клиент посылает запрос на ip 20.20.20.20, а ответ приходит с ip 10.10.10.10 и клиент его просто отбрасывает, ибо у 10.10.10.10 он ничего не спрашивал. Другими словами наша задача сделать так, чтобы ответы от сервера тоже уходили с ip 20.20.20.20, но тут мы сталкиваемся со следующей проблемой, роутер по умолчанию не смотрит на адрес источника, когда принимает решение о маршрутизации пакета он смотрит только на адрес назначения!. Для решения этой проблемы придумана такая штука как Policy Based Routing. В микротике его можно реализовать кучей способов. Наиболее гибгий с использованием Mangle. Наиболее простой с использованием routing rules.

    Для начала нам надо создать 2ю таблицу маршрутизации, назовём её ""2nd ISP" а в ней маршрут по умолчанию где шлюз 20.20.20.20 является основным, делается это предельно просто:

    /ip route add distance=1 gateway=20.20.20.20 routing-mark="2nd ISP"

    Теперь нам надо объяснить микротику, что трафик от условного веб сервера нам нужно пустить именно по этой таблице маршрутизации. Делается это с помощью routing rules.

    /ip route rule add dst-address=0.0.0.0/0 src-address=1.1.1.2/32 table="2nd ISP"

    Теперь оно должно прекрасно работать снаружи. Отдельно обращаю Ваше внимание, что я не знаю всей вашей топологии и использование влоб тех скриптов, что я написал может привести к тому что у вас что-то отвалится. Например что 1.1.1.2 не будет доступен из второго офиса. Также советую обратить внимание на статью https://habr.com/post/313342/ там немного другой случай, но теоретическая база одна :)

    P.S. Если будут вопросы, готов ответить на них в Telegram
    Ответ написан
    1 комментарий