Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Вопрос по точному совпадению префикса в фильтре маршрутов BGP "dst in address_list"

    Вопрос по точному совпадению префикса в фильтре маршрутов BGP "dst in address_list"

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Вопрос по точному совпадению префикса в фильтре маршрутов BGP "dst in address_list", RouterOS
     
    StepBee
    Guest
    #1
    0
    19.10.2022 17:57:00
    Привет, ребята из Mikrotik! С большим удовольствием заметил, что в ROS v7.6 снова появилась возможность отображать рекламируемые маршруты — здорово! Благодаря этому я смог увидеть, с моей точки зрения, неожиданное поведение фильтра маршрутов.

    Согласно документации по фильтрам маршрутов (BGP), оператор префикса IN — возвращает true, если префикс является подсетью указанной сети. Если оператор используется для сопоставления префиксов из списка адресов (например, «dst in list_name»), то он должен совпадать только с точным префиксом.

    Я использую следующее правило:  
    chain=ipv4-ebgp-provider-out  
    rule=«if (afi ipv4 && dst in ipv4-subnets-own-remote) {set bgp-path-prepend 2; accept}»

    И у меня есть такая запись в списке «ipv4-subnets-own-remote»:  
    list=ipv4-subnets-own-remote  
    address=123.87.184.0/24

    Согласно моему пониманию документации, правило должно пропускать только точно «123.87.184.0/24», а не 123.87.184.0/25, не 123.87.184.123/32 или что-то ещё — только точное совпадение префикса.

    Но, глядя на рекламируемые маршруты, я вижу:  
    peer=ipv4-ebgp-provider-1  
    dst=123.87.184.16  
    nexthop=99.115.135.123  
    origin=2

    Когда я отключаю вышеуказанное правило, этот IP не рекламируется — значит, именно это правило его пропускает.

    Может, я неправильно понимаю документацию («Если оператор используется для сопоставления префиксов из списка адресов (например, “dst in list_name”), то совпадение происходит только по точному префиксу»), или есть разница между реализацией и документацией?

    Есть ли у вас советы, как сделать так, чтобы принимался только точный префикс адреса?

    Спасибо и с уважением,  
    Стефан
     
     
     
    StepBee
    Guest
    #2
    0
    01.12.2022 12:46:00
    Для всех, кто столкнулся с такой же проблемой, я провёл дополнительные тесты, и служба поддержки Mikrotik только что подтвердила: точное совпадение на самом деле работает, но есть ошибка — оно срабатывает и на подсети /32. Другие размеры подсетей не затронуты.
     
     
     
    FezzFest
    Guest
    #3
    0
    03.11.2023 00:21:00
    Эта проблема всё ещё существует в RouterOS v7.12rc4. Совпадение точных префиксов, заданных в списке адресов с использованием условия «if (dst in address-list) {accept}», работает некорректно и принимает каждый отдельный адрес /32 в указанных префиксах.
     
     
     
    nellicus
    Guest
    #4
    0
    18.11.2023 23:28:00
    Я бы также хотел получить окончательное разъяснение по этому поведению — останется ли оно таким, какое есть, или оператор будет изменён. В данный момент я использую этот баг/фичу в своих целях для фильтрации BGP, чтобы пропускать от клиентов только правильные префиксы с точным совпадением, как указано в списке префиксов клиента. По счастливой случайности, если от клиента приходит /32 или /128, он проходит через начальное правило фильтра в цепочке клиента и попадает в правило blackhole.

    В AS0000_CID_IPV6_PL  
    192.168.0.0/22

    В цепочке Customer:  
    if (dst in AS0000_CID_IPV6_PL) {  
     jump ALL_CUSTOMER_IPV6_IN;  
    } else {  
     reject;  
    }

    В ALL_CUSTOMER_IPV6_IN:  
    if (bgp-large-communities equal 0000:666:666 && (dst-len == 32 || dst-len == 128)) {  
     set blackhole yes;  
     return;  
    } else {  
     return;  
    }

    Интересно, есть ли у кого-нибудь предложения, как сделать это лучше?
     
     
     
    twofatmonkeys
    Guest
    #5
    0
    10.02.2024 22:31:00
    Это поведение совершенно неинтуитивное и сильно усложняет автоматизацию фильтров. По моему мнению, при использовании списков должно работать следующее:

    address-list add list=test_list address=192.168.1.0/24  
    address-list add list=test_list address=10.0.0.0/8

    #accept 192.168.1.0/24, 192.168.1.128/29, 10.1.2.0/24  
    #deny 1.1.1.0/24  
    chain=test_bgp_rule="if (afi ipv4 && dst in test_list) {set bgp-path-prepend 2;accept}"  
    chain=test_bgp_rule="reject;"

    #accept 192.168.1.0/24  
    #deny 1.1.1.0/24, 192.168.1.128/29, 10.1.2.0/24  
    chain=test_bgp_rule="if (afi ipv4 && dst == test_list) {set bgp-path-prepend 2;accept}"  
    chain=test_bgp_rule="reject;"

    #accept 1.1.1.0/24, 192.168.1.128/29, 10.1.2.0/24  
    #deny 192.168.1.0/24  
    chain=test_bgp_rule="if (afi ipv4 && dst != test_list) {set bgp-path-prepend 2;accept}"  
    chain=test_bgp_rule="reject;"

    Ещё, возможно, стоит добавить новый оператор «!in» — «не в префиксе», которого сейчас нет.

    address-list add list=test_list address=192.168.1.0/24  
    address-list add list=test_list address=10.0.0.0/8

    #accept 1.1.1.0/24  
    #deny 192.168.1.0/24, 192.168.1.128/29, 10.1.2.0/24  
    chain=test_bgp_rule="if (afi ipv4 && dst !in test_list) {set bgp-path-prepend 2;accept}"  
    chain=test_bgp_rule="reject;"
     
     
     
    alexjhart
    Guest
    #6
    0
    12.06.2024 18:55:00
    Есть ли у тебя новости от службы поддержки?
     
     
     
    novasys
    Guest
    #7
    0
    22.04.2025 01:22:00
    Почти год прошёл, а проблема всё ещё присутствует. Я не смог найти обходное решение. Все /32, которые объявляются от BGP-пира, фильтруются правилом chain=BGP_IN_VPN_VDF rule="if ( dst in BGP_NETWORKS_VPN_VDF ) { reject; }".

    Ниже вывод, полученный при активном правиле:

    [local@NSG_MB_Core] /routing/filter/rule> /routing/route/print detail where gateway=10.1.255.1 and 81.181.171.131 in dst-address
    Flags: X - отключено, F - отфильтровано, U - недоступно, A - активно; c - connect, s - static, r - rip, b - bgp, o - ospf, i - isis, d - dhcp, v - vpn, m - modem, a - ldp-address, l - ldp-mapping, g - slaac, y - bgp-mpls-vpn; H - аппаратное ускорение;  
    + - ecmp, B - blackhole  
    b   afi=ip4 contribution=best-candidate dst-address=0.0.0.0/0 routing-table=main gateway=10.1.255.1 immediate-gw=10.1.255.1%vlan4004 distance=150 scope=40 target-scope=10 belongs-to="bgp-IP-10.1.255.1"  
         bgp.session=VDF_VPN-1 .as-path="64891,12302,12302,207737" .communities=64891:1,64891:100,64891:1006 .weight=90 .local-pref=90 .origin=igp  
         debug.fwp-ptr=0x20342BA0  

    Fb   afi=ip4 contribution=filtered dst-address=81.181.171.131/32 routing-table=main gateway=10.1.255.1 immediate-gw=10.1.255.1%vlan4004 distance=20 scope=40 target-scope=10 belongs-to="bgp-IP-10.1.255.1"  
         bgp.session=VDF_VPN-1 .as-path="64891,12302,12302,207737" .communities=64891:1 .origin=igp  
         debug.fwp-ptr=0x20342BA0  

    А когда правило выключено:

    [local@NSG_MB_Core] /routing/filter/rule> /routing/route/print detail where gateway=10.1.255.1 and 81.181.171.131 in dst-address
    Flags: X - отключено, F - отфильтровано, U - недоступно, A - активно; c - connect, s - static, r - rip, b - bgp, o - ospf, i - isis, d - dhcp, v - vpn, m - modem, a - ldp-address, l - ldp-mapping, g - slaac, y - bgp-mpls-vpn; H - аппаратное ускорение;  
    + - ecmp, B - blackhole  
    b   afi=ip4 contribution=best-candidate dst-address=0.0.0.0/0 routing-table=main gateway=10.1.255.1 immediate-gw=10.1.255.1%vlan4004 distance=150 scope=40 target-scope=10 belongs-to="bgp-IP-10.1.255.1"  
         bgp.session=VDF_VPN-1 .as-path="64891,12302,12302,207737" .communities=64891:1,64891:100,64891:1006 .weight=90 .local-pref=90 .origin=igp  
         debug.fwp-ptr=0x20342BA0  

    Ab   afi=ip4 contribution=active dst-address=81.181.171.131/32 routing-table=main gateway=10.1.255.1 immediate-gw=10.1.255.1%vlan4004 distance=20 scope=40 target-scope=10 belongs-to="bgp-IP-10.1.255.1"  
         bgp.session=VDF_VPN-1 .as-path="64891,12302,12302,207737" .communities=64891:1 .origin=igp  
         debug.fwp-ptr=0x20342BA0  

    Мой адресный список содержит только:  

    [local@NSG_MB_Core] /routing/filter/rule> /ip fi address-list/print where 81.181.171.131 in address and list=BGP_NETWORKS_VPN_VDF
    Columns: LIST, ADDRESS, CREATION-TIME  
    # LIST                  ADDRESS          CREATION-TIME  
    ;;; NSG #001 - ICI  
    2 BGP_NETWORKS_VPN_VDF  81.181.171.0/24  2025-04-22 01:13:18  
    ;;; NSG #000 - ICI  
    3 BGP_NETWORKS_VPN_VDF  81.181.170.0/23  2025-04-22 01:13:18  

    Пока не было возможности проверить анонсы, но явно получаемые маршруты затрагиваются. Есть какие-нибудь советы?
     
     
     
    mrz
    Guest
    #8
    0
    22.04.2025 07:14:00
    если (dst в BGP_NETWORKS_VPN_VDF && dst-len > 32)
     
     
     
    novasys
    Guest
    #9
    0
    22.04.2025 17:05:00
    Спасибо, mrz. На самом деле я думал о похожем подходе перед сном, но не проверял его. Так что твоё решение работает! Спасибо. Мне придётся заменить это во всех правилах, где ожидается подобное поведение. Удачи, хорошего дня!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры