Как правильно подойти к вопросу: возможно ли в bird менять metric по условию в filter?

Ссылка скопирована
1 ответ
filter metric { metric = 10; # Setting the default metric accept; } protocol kernel { ipv4 { import filter metric; }; scan time 15; }

Сейчас ситуация такая: если метрику указать в протоколе работает, но во через фильтре не удается, ошибка синтаксиса, может есть другой метод или другая что поддерживает.

Заранее спасибо.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Алексей Денисов Ответ

В BIRD нельзя просто написать metric = 10 внутри filter как произвольную переменную, если речь идет о kernel protocol metric. В BIRD есть route attributes, и для разных протоколов используются разные атрибуты. Для kernel route metric обычно применяется krt_metric, а не metric.

Попробуйте так:

filter set_kernel_metric {
    krt_metric = 10;
    accept;
}
 
protocol kernel {
    ipv4 {
        import filter set_kernel_metric;
        export all;
    };
    scan time 15;
}

filter set_kernel_metric { krt_metric = 10; accept; } protocol kernel { ipv4 { import filter set_kernel_metric; export all; }; scan time 15; }

Если нужно менять метрику по условию, условие пишется в filter:

filter set_kernel_metric {
    if net ~ [ 10.0.0.0/8+ ] then {
        krt_metric = 50;
    } else {
        krt_metric = 10;
    }
    accept;
}

filter set_kernel_metric { if net ~ [ 10.0.0.0/8+ ] then { krt_metric = 50; } else { krt_metric = 10; } accept; }

Учитывайте направление import/export. Если вы хотите, чтобы маршруты из BIRD попадали в kernel с нужной метрикой, чаще нужен export filter в protocol kernel, а не import. Import - это маршруты, которые BIRD читает из таблицы ядра. Export - маршруты, которые BIRD записывает в таблицу ядра.

protocol kernel {
    ipv4 {
        import none;
        export filter set_kernel_metric;
    };
}

protocol kernel { ipv4 { import none; export filter set_kernel_metric; }; }

Также проверьте версию BIRD: синтаксис и набор атрибутов отличаются между BIRD 1.x и 2.x. Команда birdc configure покажет синтаксическую ошибку точнее.

birdc configure
birdc show protocols
birdc show route all

birdc configure birdc show protocols birdc show route all

Итог: используйте krt_metric и правильное направление фильтра. Если задача - менять метрику маршрутов, которые BIRD отдает в ядро, ставьте export filter в protocol kernel. Если менять входящие из ядра - import filter.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно