Как правильно подойти к вопросу: возможно ли в bird менять metric по условию в filter?
Ссылка скопирована
filter metric { metric = 10; # Setting the default metric accept; } protocol kernel { ipv4 { import filter metric; }; scan time 15; }
Сейчас ситуация такая: если метрику указать в протоколе работает, но во через фильтре не удается, ошибка синтаксиса, может есть другой метод или другая что поддерживает.
Заранее спасибо.
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
VPN
Как правильно настроить vless для Android TV?
1 ответ
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
Telegram
Как диагностировать ошибку с подключением к прокси в мобильном приложении Telegram?
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
Итог: используйте krt_metric и правильное направление фильтра. Если задача - менять метрику маршрутов, которые BIRD отдает в ядро, ставьте export filter в protocol kernel. Если менять входящие из ядра - import filter.