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

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

  1. Илья Князев

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

    Хм забавно. А когда no route to host получаете, это в каком направлении?
    Т.е. Torch на интерфейсе показывает уход/возврат пакетов?
    Вообще, по умолчанию Mikrtotik не найдя маршрут в именованной таблице, пытается его найти в main.
    Я подозреваю что пакеты возвращаются, но "улетают" назад.
     
  2. TommyTong

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

    Такая штука происходит, когда отключаю маршрут, т.е. остается
    Код:
    /ip route
    add distance=1 gateway=192.168.0.1 routing-mark=test
    При этом если
    Код:
    ping routing-table=test 8.8.8.8
    то всё хорошо
    Гоняю это на hap lite.
    в Torch с использованием одного маршрута ничего не попадает.
    Но само-собой ловятся пакеты которые идут с ПК на 8.8.8.8

    P.S. Может я что то упустил? Например должно быть не одно output правило?
     
    Последнее редактирование: 11 фев 2016
  3. Илья Князев

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

    В общем немного пораскинув мозгом я понял что происходит.
    Смотрите. Local Process Out создает трафик, который попадает сначала на
    принятие решения об маршрутизации (Routing Decision),
    И только потом он попадает в Output, где собственно маркируется маршрут, и выполняется Routing Adjustment для применения PBR
    Так как на первом этапе маршрута нет, сразу получаем отлуп.
    Красным отметил то, что интересно. Картинки с https://wiki.mikrotik.com/wiki/Manual:packet_Flow

    Вот здесь видно, что пакет из Local-Out сначала проходит решение об маршрутизации, после чего уходит в Output.
    route1.png
    И расшифруем что происходит в Output route2.png
     
    Последнее редактирование модератором: 6 фев 2019
  4. TommyTong

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

    Есть ли решение с использованием mangle? Или единственное правильное решение останется только с правильной расстановкой маршрутов main (по дистанции)?
    Большое спасибо! Схему сегодня уже смотрел, но не верно ее разложил и понял.
     
  5. Илья Князев

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

    Так а в чем проблема? Главное, чтобы на этапе Routing Decision был хотя бы один подходящий активный маршрут. А дальше его перекрываем.
     
  6. TommyTong

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

    [​IMG]
    Всё равно не догоняю как настроить...
     
  7. Илья Князев

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

    ip route add distance=1 gateway=192.168.0.1 routing-mark=test
    ip route add distance=1 gateway=192.168.0.100
    В Routing Decision будет принято решение об передачи пакета в Output с целью доставки его на шлюз 192.168.0.100
    В Routing Adjustment после соответствующей маркировки маршрута, пакет уйдет на шлюз 192.168.0.1
     
  8. TommyTong

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

    Теперь ясно.
    Для срабатывания mangle в output обязательно должен быть маршрут main(даже пусть и не верный), тогда всё начинает работать. Этакий подводный камень...
    Большое спасибо!
     
  9. Илья Князев

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

    Кстати можете попробовать в качестве типа неверного маршрута указать Black Hole или Prohibited. По идее тогда должно работать по принципу, что все маркированные пакеты уходят куда надо, а немаркированные дропаются.
    Подводный камень вызван тем, что роутеру нужно понять, что пакет идет НАРУЖУ. Т.е. ни на один из существующих адресов маршрутизатора (фактически что пакет идет не на локалхост). Ибо в Output отдаются только пакеты которые нужно доставить к другому узлу.
    Вот это понимание как раз и происходит в Routing Decision.
     
  10. TommyTong

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

    Протестировал, Black Hole и Prohibited варианты не срабатывают, пакеты отбрасываются раньше чем доходят до output'а.
    Единственный правильный вариант, использовать один реальный/неверный маршрут.
     
  11. Илья Князев

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

    ОК, было предположение, что могу не сработать.
     
  12. Legnum

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

    Здравствуйте. А подскажите как для маркированного маршрута настроить доступ к внешнему IP изнутри. Т.е. сам на себя.
    Сам порт открывать получается. А вот стукнуть на него изнутри нет.
    Без mangle все работает.
    На всякий случай уточню. Основной интернет у меня работает на pppoe и не маркирован, правила для порта 123 работают, он открыт снаружи и доступен изнутри для определенного локального статик адреса, либо всей локальной сети. Нужно настроить доступ к такому же порту, но на другом статик IP в этой же сети, но уже с выделенного IP на 3G модеме.
    Спасибо!
     
  13. ну я как понимаю dual WAN нужно настроить. Т.е маркировать весь трафик WAN1 и WAN2
     
  14. Legnum

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

    Что-то я не продумал такой вариант.
    Попробую, спасибо.
     
  15. EIKA

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

    Коллеги, очень прошу помощи! Тоже столкнулся с разновидностью неработоспособности маркирования роутинга. Задача стоит простая - заворачивать обращения к хостам Телеграма в PPTP-тоннель. Казалось бы, что проще, но нет. Что делаю:

    Список узлов, которые заворачиваем:
    Код:
    /ip firewall address-list
    
    add address=91.108.4.0/22 list=Telegram
    add address=91.108.8.0/22 list=Telegram
    add address=91.108.12.0/22 list=Telegram
    add address=91.108.16.0/22 list=Telegram
    add address=91.108.56.0/22 list=Telegram
    add address=149.154.160.0/22 list=Telegram
    add address=149.154.164.0/22 list=Telegram
    add address=149.154.168.0/22 list=Telegram
    add address=149.154.172.0/22 list=Telegram
    add address=149.154.167.220 list=Telegram
    
    Манглы:

    Код:
     0    ;;; Mark Telegram
          chain=output action=mark-routing new-routing-mark=mark_telegram passthrough=no dst-address-type="" dst-address-list=Telegram log=no log-prefix=""
    
    1    chain=prerouting action=mark-routing new-routing-mark=mark_telegram passthrough=yes dst-address-list=Telegram log=no log-prefix="" 
    Тоннель:
    Код:
    /interface pptp-client add comment="Telegram VPN" connect-to=PL226.vpnbook.com disabled=no name=TelegramVPN user=vpnbook password=5bhea6u
    Маршрут для трафика Телеги (с меткой):
    Код:
    /ip route add comment="Telegram to TelegramVPN" distance=1 gateway=TelegramVPN routing-mark=mark_telegram
    Но, увы и ах, не работает. Ниже даю больше деталей:

    - Доступ к Телеге для LAN-клиентов не нужен, нужен только для собственных пакетов микрота (поэтому у меня нет соотв. правила на маскарадинг). Доступ делается для Микротик-скрипта.
    - Пакеты для 149.154.167.220 должным образом маркируются, что видно по счетчику пакетов в Mangle. Любой ping до 149.154.167.220 дает непрерывный рост счетчика, так что тут все ок.
    - VPN-тоннель PPTP активен и подключен, и в нем появляются TX-пакеты, когда я делаю /tool fetch url="http://api.telegram.org/"

    Конкретно что не так - обращения к узлам Телеги идут через ненужный мне интерфейс LAN5-WAN (вместо VPN-интерфейса TelegramVPN). До того момента, пока в маршруте TelegramVPN я не уберу routing_mark. Это я узнаю так:

    Код:
    [Mikrot] > /ip route check 149.154.167.220
         status: ok
      interface: LAN5-WAN
        nexthop: 89.xxx.xxx.x
    Таблица маршрутизации:
    Код:
     0 A S  0.0.0.0/0          192.168.2.1     TelegramVPN               1
    1 A S  0.0.0.0/0                          89.xxx.xxx.x              2
    2 ADC  89.xxx.xxx.0/21    89.xxx.xxx.xx   LAN5-WAN                  0
    3 ADC  172.16.36.1/32     172.16.36.xxx    TelegramVPN               0
    4 ADC  192.168.2.0/24     192.168.2.1     LAN-Bridge                0
    
    Где 192.168.2.1 - собственный адрес Микротика в LAN.

    routing_mark убрать в маршруте навсегда не могу, так как маршрута 0.0.0.0/0 у меня два, и маршрут 0.0.0.0/0 для MikrotikVPN начинает главенствовать над 0.0.0.0/0 89.xxx.xxx.x, который является дефолтным (выход в интернет).

    Очень прошу помочь, так как чувствую, что я рядом, но не хватает какой-то мелочи.
     
    Последнее редактирование: 4 ноя 2018
  16. EIKA

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

  17. EIKA

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

    Мне кажется, что проблема где-то здесь.

    Код:
    [mikroroot@Mikrot] > ip route check 149.154.167.220
         status: ok
      interface: LAN5-WAN
        nexthop: 89.xxx.xxx.xxx
    В Торче в SRC и DST видна какая-то чушь - узел Телеграмма виден как SRC, а сетка с VPN - как DST.
     

    Вложения:

  18. EIKA

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

    Проблему решил!
    И дело не в каких-то подвоных камнях схемы роутинга Микротика, или маркирования другого роутинга (main), и так далее, а в куда более простых вещах. В чем конкретно был затык - не скажу, но последовательное тестирование механизма обхода блокировки Телеги, позволило найти все причины.

    1. С ростом версии ROS немного поменялась концепция обработки символа комментария, #. Теперь # в начале пустой строки при вставке в консоль соединяется со строкой, идущей вслед за решеткой. Даже если был перевод строки после решетки.
    У меня в скрпите был такой фрагмент:
    Код:
    #
    # Some comment
    #
    И в процессе апгрейдов 6.xx этот кусок скрипта перестал нормально обрабатываться.

    2. VPN-сервис VPN99 (платный, но дешевый), на который я решил перейти с vpnbook, по какой-то причине прекрасно дает делать fetch url до узла api.telegram.org по протоколу http (правильный ответ 301 или 302), но не дает делать то же самое по протоколу https (а именно он нам и нужен). При использовании VPN99 и https выдается или таймаут или fail, точно не помню. Тупо при замене VPN на другого поставщика, проблема уходит.
    В примере выше показан vpnbook, но я для теста также уходил на VPN99. В какой-то момент играя с fetch url и сравнивая запросы и ответы с обычным бразуером, подключенным через другой VPN, я нашел вышеуказанную проблему с SSL. Чем она вызвана - не имею представлений.

    3. Вот здесь у меня была написана чушь:
    Код:
    add address=149.154.164.0/22 list=Telegram
    add address=149.154.168.0/22 list=Telegram
    add address=149.154.172.0/22 list=Telegram
    add address=149.154.167.220 list=Telegram
    Так как 149.154.167.220 входит в 149.154.164.0/22. Не знаю, могло ли это что-то рушить.

    4. В некоторых гайдах по настройке обхода Телеги создается только mangle-правило на маркирование роутинге в звене prerouting. И при этом ни слова не сказано о том, что это будет работать только для LAN-клиентов, но не для самого роутера (и его скриптов). Для роутера и его скриптов нужна цепочка output и только она. Цепочка prerouting нафиг не нужна.
    Не могу сказать что причиной была цепочка, так как я пробовал обе цепочки попеременно, а также 2 одновременно. От безысходности.

    5. Даже несмотря на то, что доступ к Телеге нужен только самому роутеру (клиентам в LAN он не нужен!), все равно нужен маскарадинг на VPN-интерфейсе! Я уж не знаю зачем, но без него не работает. При этом в правиле на маскарад нельзя указать IP-адрес вашего роутера в LAN как src-адрес . Так как там почему-то фигурируют совершенно другие IP-адреса из другой сети, и если вы укажете там LAN-адрес роутера или всю LAN-сеть, то ничего не заработает.
    Но данную настройку нельзя отнести к единственной причине неработоспособности моего сетапа, так как я добавлял и удалял src-адрес 100500 раз (метод ненаучного тыка).

    Готовый рабочий конфиг в пару кликов (copy/paste) в Terminal:
    Код:
    /ip firewall address-list
    add address=91.108.4.0/22 list=Telegram
    add address=91.108.8.0/22 list=Telegram
    add address=91.108.12.0/22 list=Telegram
    add address=91.108.16.0/22 list=Telegram
    add address=91.108.56.0/22 list=Telegram
    add address=149.154.160.0/22 list=Telegram
    add address=149.154.164.0/22 list=Telegram
    add address=149.154.168.0/22 list=Telegram
    add address=149.154.172.0/22 list=Telegram
    /ip firewall mangle
    add action=mark-routing chain=output comment="Mark Telegram" dst-address-list=Telegram new-routing-mark=mark_telegram passthrough=no
    /interface pptp-client
    add comment="Telegram VPN" connect-to=your_vpn_server disabled=no name=TelegramVPN password=vpnpass user=vpnuser
    /ip firewall nat
    add action=masquerade chain=srcnat out-interface=TelegramVPN
    /ip route
    /ip route
    add comment="Telegram to TelegramVPN" distance=1 gateway=TelegramVPN routing-mark=mark_telegram
     
    Мышаня и Kato нравится это.
  19. skroff

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

    vpn99.net тоже работает, mtu надо уменьшить.
     
  20. EIKA

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