Не срабатывает маршрутизация при маркировке. Как исправить?

Тема в разделе "Маршрутизация", создана пользователем abwabw, 16 окт 2015.

  1. abwabw

    abwabw Новый участник

    Ситуация: имеем 2 провайдера и 3 независящих друг от друга офиса (см.рис во вложении). Идею настройки микротика взял здесь (http://geektimes.ru/post/186284/). Разница только в меньшем количестве провайдеров и алгоритме переключения. Реализована схема резервирования следующая:
    office1: ISP1-> ISP2
    office2: ISP1->нет выхода в интернет
    office3: ISP1->нет выхода в интернет
    Проблема: не работает маршрутизация маркированных соединений, а именно при настройках маршрутизации как описано во вложении, нет доступа в интернет ни с одной из локальных сетей, а так же не работает проброс портов снаружи внутрь локальных сетей.
    Вопрос: что допилить в настройках, чтобы всё нормально работало?

    З.Ы. При 3-х провайдерах всё нормально работает, здесь же в сокращённом варианте не работает.
     

    Вложения:

    • RB2011_How.pdf
      Размер файла:
      71,9 КБ
      Просмотров:
      28
  2. vasilevkirill

    vasilevkirill Участник

    Приятно видеть что ссылаются на мою статью =)
    что то вы вообще всё напутали
    Код:
    add action=mark-connection chain=input dst-address=206.188.193.174 dst-port=8081 in-interface=ether1 new-connection-mark="ISP 1->Input" passthrough=no protocol=tcp
    измените на
    Код:
    add action=mark-connection chain=input dst-address=206.188.193.174  in-interface=ether1 new-connection-mark="ISP 1->Input" 
    а строку
    Код:
    add action=mark-routing chain=output connection-mark="ISP 1->Input" new-routing-mark="ISP 1" passthrough=no src-address-list=LocalNet
    на
    Код:
    add action=mark-routing chain=output connection-mark="ISP 1->Input" new-routing-mark="ISP 1" 
    Не надо пытаться вывернуть dst NAT обратно, contract всё сам сделает
     
  3. Alex332

    Alex332 Новый участник

    Я бы еще не использовал что-либо отличное от букв-цифр в названиях чего-либо в Микротиках.
    В нескольких версиях RoS были всякие ошибки с этим связанные. Причем, такие ошибки - что поседеешь, пока найдешь. =)
     
  4. vasilevkirill

    vasilevkirill Участник

    Давно уже исправили, один нюанс остался это пробел, приходится брать в кавычки, но кто работал с DOS тому не привыкать =)
     
  5. Alex332

    Alex332 Новый участник

    Ну, сегодня исправили, завтра опять накосячили... Лучше уж исключить в принципе, как по мне.
     
  6. vasilevkirill

    vasilevkirill Участник

    Не всегда можно донести смысловую нагрузку словами, ведь хочется чтобы было понятно и красиво. "Носки под кроватью, порядок в маршрутизаторе" =)
     
  7. Илья Князев

    Илья Князев Администратор Команда форума

    Noski_pod_krovatyu_poryadok_v_marshrutizatore )))
     
  8. abwabw

    abwabw Новый участник

    После внесённых изменений проброс портов и выход из локальных сетей в инет не заработал.
    Методом тыка установил, что если добавить:
    Код:
    /ip route
    add distance=1 gateway=206.188.193.173
    
    т.е. всё, без всяких условий, заворачивается на шлюз ISP1. После этого появляется интернет из локальных сетей. Но проброс портов снаружи во внутрь не работает. И только если указанные вами строки оставить в моём варианте, то начинает работать проброс, но только с ISP1 (это и понятно, т.к. ip route настроено железно на ISP1). В итоге резервирование не срабатывает. Т.е. если вырубить ISP1, локальная сеть office1 в инет не выходит, переключение срабатывает, но неправильный ip route всё заворачивает на неработающий шлюз.
    Исходя из этого я и решил, что в ip route не срабатывает маршрутизация по маркерам "ISP1" и 'ISP2"
     
  9. Илья Князев

    Илья Князев Администратор Команда форума

    Выложите
    /ip firewall mangle export
    /ip route export
    Посмотрю.
     
  10. abwabw

    abwabw Новый участник

    Код:
    /ip firewall mangle
    add action=mark-routing chain=output connection-mark="ISP 1->Input" \
    new-routing-mark="ISP 1" passthrough=no src-address-list=LocalNet
    add action=mark-routing chain=prerouting connection-mark="ISP 1->Input" \
    new-routing-mark="ISP 1" passthrough=no src-address-list=LocalNet
    add action=mark-connection chain=prerouting dst-address=206.188.193.174 dst-port=8082 \
    in-interface=ether1 new-connection-mark="ISP 1->Input" passthrough=no protocol=tcp
    add action=mark-connection chain=input dst-address=206.188.193.174 dst-port=8081 \
    in-interface=ether1 new-connection-mark="ISP 1->Input" passthrough=no protocol=tcp
    add action=mark-routing chain=output connection-mark="ISP 2->Input" \
    new-routing-mark="ISP 2" passthrough=no src-address-list=LocalNet
    add action=mark-routing chain=prerouting connection-mark="ISP 2->Input" \
    new-routing-mark="ISP 2" passthrough=no src-address-list=LocalNet
    add action=mark-connection chain=input dst-address=2.20.254.82 dst-port=8081 \
    in-interface=ether2 new-connection-mark="ISP 2->Input" passthrough=no protocol=tcp
    add action=mark-connection chain=prerouting dst-address=2.20.254.82 dst-port=8082 \
    in-interface=ether2 new-connection-mark="ISP 2->Input" passthrough=no protocol=tcp
    add action=mark-routing chain=prerouting dst-address-list=!LocalNet \
    new-routing-mark="office 1" passthrough=no src-address=192.168.60.0/24
    add action=mark-routing chain=prerouting dst-address-list=!LocalNet \
    new-routing-mark="office 2" passthrough=no src-address=192.168.70.0/24
    add action=mark-routing chain=prerouting dst-address-list=!LocalNet \
    new-routing-mark="office 3" passthrough=no src-address=192.168.71.0/24
    
    Код:
    /ip route
    add distance=1 gateway=206.188.193.173 routing-mark="ISP 1"
    add distance=1 gateway=2.20.254.81 routing-mark="ISP 2"
    add distance=1 gateway=206.188.193.173
    add check-gateway=ping distance=1 comment=PPTP dst-address=192.168.0.0/24 gateway=192.168.5.3 pref-src=192.168.5.4
    add check-gateway=arp distance=10 gateway=206.188.193.173 routing-mark="office 1"
    add check-gateway=arp distance=10 gateway=206.188.193.173 routing-mark="office 2"
    add check-gateway=arp distance=10 gateway=206.188.193.173 routing-mark="office 3"
    add check-gateway=arp distance=11 gateway=2.20.254.81 routing-mark="office 1"
    add distance=1 dst-address=8.8.8.8/32 gateway=206.188.193.173
    add distance=1 dst-address=194.67.160.3/32 gateway=206.188.193.173
    add distance=1 dst-address=194.67.161.1/32 gateway=206.188.193.173
    add distance=1 dst-address=80.244.224.250/32 gateway=2.20.254.81
    add distance=1 dst-address=82.114.102.200/32 gateway=2.20.254.81
    
     
  11. Илья Князев

    Илья Князев Администратор Команда форума

    add action=mark-connection chain=input dst-address=206.188.193.174 dst-port=8081 \
    add action=mark-connection chain=input dst-address=2.20.254.82 dst-port=8081 \
    неправильно.
    Для начала делаем так
    1. Маркируем коннекшины в цепочках prerouting и output
    2. Маркируем маршруты в этих же цепочках.

    Маркировать в input бесполезно. Эта цепочка идет уже за принятием решения об маршрутизации. И как следствие у вас в коннекшн трекер прилетает не то, что вы ожидаете. Так как первый пакет соединения УЖЕ прошел маршрутизацию без маркировки.
     
  12. abwabw

    abwabw Новый участник

    По поводу неправильности использования INPUT я согласен, просто в первоисточнике (http://geektimes.ru/post/186284/) вся маркировка и маршрутизация организована именно на INPUT и OUTPUT. В ходе повтора этого алгоритма у себя на фактическом микротике с фактическими локальными сетями у меня ничего не заработало и только "покурив" теорию (в частности и эту (а конкретно см.З.Ы.)) я понял , что INPUT и OUTPUT работают ТОЛЬКО для самого шлюза-микротика и ни как не влияют на проходящий (FORWARD) трафик в локальные сети. Поэтому пришлось "докуривать" те же самые правила в PREROUTING. Только после этого кое-как всё заработало. Поэтому цепочки с INPUT и OUTPUT остались как атавизмы от оригинальной реализации. Исходя из З.Ы. надо убирать не только INPUT цепочки, но и OUTPUT, вот только чем последние заменить?
    З.Ы.А если на самом шлюзе запускаются браузер, почта и пр. То это уже Входящий и Исходящий трафик для шлюза. Не транзитный. INPUT и OUTPUT.Т.к. конечная точка всех пакетов - это сам шлюз, а не компы за шлюзом.Это левая и правая диаграмма, только без центрального блока FORWARD.В Микротике правая практически никогда не задействована. Так что про INPUT-OUTPUT забудьте.Только для блокировки входящих пакетов.
     
  13. Илья Князев

    Илья Князев Администратор Команда форума

    Вы не правы. От слова "вообще".
    Input все равно проходит через prerouting.
    А вот Output через него не идет. И его надо маркировать с целями:
    1. Чтобы пакеты которые пришли на роутер, ушли через тот же интерфейс (например ваш роутер "пинганули" из Интернет).
    2. Чтобы пакеты создаваемые роутером уходили через нужный интерфейс. (Например VPN с роутера).
     
  14. TommyTong

    TommyTong Новый участник

    Добрый день!
    Вброшу вопрос по этой же теме, почти с теми же условиями...
    Вот есть "сколькоугоднооператоров", mangle настроен, т.е. ПРОХодящий трафик маркируется и уходит как надо, входящий уходит через порт на который пришел. А если пакет генерируется на маршрутизаторе и отправляется, то он уходит через маршрут main (где main маршрут без routing mark).
    Каким образом верно создать правило в mangle, что бы генерируемый трафик ушел через нужный маршрут? четпоплылприуныл. Выгуглил пару вариантов, но они не заработали, т.е. при отключение маршрута main пинги с роутера не идут, но если в консоле к ping добавить routing-table то проходят.
     
  15. Илья Князев

    Илья Князев Администратор Команда форума

    Маркировать output.
    Т.е. сначала отмаркировали output который не имеет connection-mark, потом все остальные.
     
  16. TommyTong

    TommyTong Новый участник

    убил конфигу, настраиваю самое важное(базовую настройка само-собой сделана):
    Маршрут
    ip route add distance=1 gateway=192.168.0.1 routing-mark=test
    ip route add distance=1 gateway=192.168.0.1
    Пингую 8.8.8.8 - все ок
    Создаю правило mangle
    ip firewall mangle add action=mark-routing chain=output dst-address=8.8.8.8 new-routing-mark=test passthrough=no
    Отключаю маршрут без маркировке и получаю no route to host.
    Уже прохождение трафика перекопал на микротике... всё равно не доезжаю до подвоха
    При этом такое правило пинг с ПК пропускает при отключенном маршруте "main":
    ip firewall mangle add action=mark-routing chain=prerouting dst-address=!192.168.88.0/24 new-routing-mark=test passthrough=no src-address=192.168.88.0/24
     
  17. Илья Князев

    Илья Князев Администратор Команда форума

    Покажите полностью все input и output в mangle
     
  18. TommyTong

    TommyTong Новый участник

    Это всё, т.к. сел разбираться с mangl'ом и взял чистую конфигурацию:
    Код:
    /ip firewall mangle
    add action=mark-routing chain=output dst-address=8.8.8.8 new-routing-mark=test passthrough=no \
        protocol=icmp
    add action=mark-routing chain=prerouting dst-address=!192.168.88.0/24 new-routing-mark=test \
        passthrough=no src-address=192.168.88.0/24 
    и
    Код:
    /ip route
    add distance=1 gateway=192.168.0.1 routing-mark=test
    add distance=1 gateway=192.168.0.1
     
    Последнее редактирование модератором: 11 фев 2016
  19. Илья Князев

    Илья Князев Администратор Команда форума

  20. TommyTong

    TommyTong Новый участник

    Код:
    /ip firewall nat
    add action=masquerade chain=srcnat out-interface=ether1-g