bird настройка фильтров

Статическая и динамическая, протоколы

bird настройка фильтров

Сообщение linx » 04 янв 2015, 11:47

Добрый день!

Пытаюсь переехать с quagga на bird, конфиг простой, нет транзитных as и один провайдер, так что можно принимать только дефаулт.
Накидал конфиг по примерам, без полного понимания как описываются фильтры - естественно не заработало. Хотелось бы понять как пишутся фильтры для bird
Последний раз редактировалось linx 05 янв 2015, 01:40, всего редактировалось 1 раз.
linx
новичок
 
Сообщения: 16
Зарегистрирован: 26 апр 2011, 14:36

Re: bird настройка фильтров

Сообщение linx » 04 янв 2015, 13:29

Нашел в блоге достаточно разжеванный пример http://subnets.ru/blog/?p=1728

Но все равно остались вопросы:

Накидал картинки для понимания
bird_net.png

bird_route.png


Переписал конфиг исходя из объяснений изложенных в блоге, ночью проверю, все ли верно я понял
linx
новичок
 
Сообщения: 16
Зарегистрирован: 26 апр 2011, 14:36

Re: bird настройка фильтров

Сообщение linx » 05 янв 2015, 03:23

Мозги уже едут, полная засада, был бы еще доступ на сайт http://bird.network.cz/ - трасировка к нему выходит, он периодически то доступен, то нет.

В итоге криво-косо промучался, но вроде пересадил на берд, статик маршруты нужны, без них не работает и при их добавлении в консоли валит
Код: Выделить всё
<WARN> Netlink: File exists

как от этого избавится надо подумать

В итоге получился такой конфиг
Код: Выделить всё
timeformat base         iso long;
timeformat log          iso long;
timeformat protocol     iso long;
timeformat route        iso long;
log "/var/log/bird.log" all;
log stderr all;

protocol direct {
        interface "-enp*", "*"; # Restrict network interfaces it works with
}

protocol kernel {
        persist off;            # Don't remove routes on bird shutdown
        scan time 10;           # Scan kernel routing table every 20 seconds
        import none;            # Default is import all
        export all;             # Default is export none
}

protocol device {
        scan time 10;
}

protocol static  {
        route 0.0.0.0/0 via 85.26.168.225;
        route 46.151.0.0/22 via 192.168.21.3;
        route 46.151.4.0/23 via 192.168.21.1;
}


function avoid_martians()
prefix set martians;
{
  martians = [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+, 10.0.0.0/8+,
               224.0.0.0/4+, 240.0.0.0/4+, 0.0.0.0/32-, 0.0.0.0/0{25,32}, 0.0.0.0/0{0,7} ];
  if net ~ martians then return false;

  return true;
}


function pref_from_myasset()
prefix set pref_from_197406;
{
        pref_from_197406 = [ 46.151.0.0/22, 46.151.4.0/23 ];
        if net ~ pref_from_197406 then return true;
        return false;
}

filter megafon_in {
if avoid_martians() then
{
        bgp_local_pref = 100;
        accept;
}
        reject;
}

filter megafon_out {
if pref_from_myasset() then
{
#       bgp_community = -empty-; #не отправляем никаких коммьюнити
#       bgp_path.prepend(65000); #добавляем prepend
        accept;
}
        reject;
}

protocol bgp megafon {
        table master;
        router id 46.151.0.254;
        local as 197406;
        description "Megafon";
        neighbor 185.126.68.25 as 31133;
        hold time 240;
        startup hold time 240;
        connect retry time 120;
        keepalive time 80;
        start delay time 5;
        error wait time 60, 300;
        error forget time 300;
        next hop self;
        path metric 1;
        default bgp_med 0;
        source address 185.126.68.26;
        import filter megafon_in;
        export filter megafon_out;
}


В кваге был еще префикс лист для серых AS, как его реализовать нужно подумать
linx
новичок
 
Сообщения: 16
Зарегистрирован: 26 апр 2011, 14:36

Re: bird настройка фильтров

Сообщение root » 05 янв 2015, 10:00

"File exists" потому что default прописан как статик и он же приходит по BGP от апстрима. При попытке добавить 0.0.0.0/0 в таблицу маршрутизации и вылазит "File exists", т.к. такой маршрутуже есть.
Как избавиться ? Или убрать статик default или оставить, но отфильтровать default в BGP, например так:
Код: Выделить всё
function defaultGW()
{
    if (net = 0.0.0.0/0) then return true;
    return false;
}

if (defaultGW()) then reject "Reject default route";


Фильтр для серых AS выглядит так:
Код: Выделить всё
function greyAses()
int set asnums;
{
    asnums = [ 64512..65534 , 4200000000..4294967294 ];
    if bgp_path ~ asnums then return true;
    return false;
}

if (greyAses()) then reject "Reject ", net, " for grey AS-PATH ", bgp_path;


linx писал(а):был бы еще доступ на сайт http://bird.network.cz/ - трасировка к нему выходит, он периодически то доступен, то нет

Сохранение страницы никто ж не отменял ;)
bird.network.cz.rar
BIRD Filters
(44.85 Кб) Скачиваний: 3122
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: bird настройка фильтров

Сообщение linx » 06 янв 2015, 05:38

"File exists" идет на статик роуты анонсируемых сетей, победить не получилось никак - хоть указывай blackhole в протоколе статик, возможно поможет добавление в отдельную таблицу. Дефаулт уже есть в function avoid_martians, потому вроде как не обязательно навешивать еще отдельно defaultGW

За примеры спасибо! с этими примерами конфиг стал поизящнее и информативность в логах добавилась, что-то много сработок по серым ас. действительно они попадаются так часто?

Код: Выделить всё
function avoid_martians()
prefix set martians;
{
  martians = [ 169.254.0.0/16+, 172.16.0.0/12+, 192.168.0.0/16+, 10.0.0.0/8+,
               224.0.0.0/4+, 240.0.0.0/4+, 0.0.0.0/32-, 0.0.0.0/0{25,32}, 0.0.0.0/0{0,7} ];
  if net ~ martians then return true;
  return false;
}

function greyAses()
int set asnums;
{
    asnums = [ 64512..65534 , 4200000000..4294967294 ];
    if bgp_path ~ asnums then return true;
    return false;
}

function defaultGW()
{
    if (net = 0.0.0.0/0) then return true;
    return false;
}

function 1_net()
{
    if (net = 46.151.0.0/22) then return true;
    return false;
}

function 2_net()
{
    if (net = 46.151.4.0/23) then return true;
    return false;
}

filter megafon_in
{
    if (avoid_martians()) then reject "Reject ", net, " for martians AS-PATH ", bgp_path;
    if (greyAses()) then reject "Reject ", net, " for grey AS-PATH ", bgp_path;
    if (1_net()) then reject "Reject ", net, " for 1_net AS-PATH", bgp_path;
    if (2_net()) then reject "Reject ", net, " for 2_net AS-PATH", bgp_path;
#    if (defaultGW()) then reject "Reject default route";
#    if !(defaultGW()) then reject; # раскоментировать если нужен только дефаулт
    bgp_local_pref = 100;
    accept;
}

filter megafon_out
{
    if (1_net()) then accept "Accept ", net, " for 1_net AS-PATH", bgp_path;
    if (2_net()) then accept "Accept ", net, " for 2_net AS-PATH", bgp_path;
#       bgp_community = -empty-; #не отправляем никаких коммьюнити
#       bgp_community.add((197406,31133));
        bgp_path.prepend(197406); #добавляем prepend
    accept;
}
linx
новичок
 
Сообщения: 16
Зарегистрирован: 26 апр 2011, 14:36

Re: bird настройка фильтров

Сообщение root » 06 янв 2015, 09:42

Если апстрим один и ты в конфиге добавил статиком default, то я вообще не вижу смысла принимать какие либо анонсы по BGP от апстрима.
Ведь у трафика ведь маршрут по люому один в сторону единственного апстрима.

Да, анонсы с серыми ASками попадаются, т.к.:
    а) в последнее время уровень сис.админов падает
    б) не все утруждают себя установкой каких либо фильтров
    в) есть провайдеры, которые не отслеживают анонсы своих клиентов в принципе
Я сначала, если видел такой анонс, писал по контактам, чтобы убрали. Некоторые убирали, некоторые ничего не отвечали. В последнее время подзабил на это. Просто фильтрую и все.
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: bird настройка фильтров

Сообщение linx » 06 янв 2015, 13:10

не принимать анонсы сделал в protocol bgp import none;
есть и два апстрима, начал с простого. bird уже не кажется темным лесом, весьма удобен и гибок, в целом горазда интереснее чем квагга
linx
новичок
 
Сообщения: 16
Зарегистрирован: 26 апр 2011, 14:36

Re: bird настройка фильтров

Сообщение root » 07 янв 2015, 09:40

Главное в BIRD он стабилен и не выдает необъяснимых приколов, в отличие от Quagga.
Ну и конечно функциональность побогаче.

Ну да, так всегда "глаза боятся, а руки делают". Когда то мне так же BIRD казался страшной и непонятной прогой.
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: bird настройка фильтров

Сообщение linx » 30 янв 2015, 12:41

для понимания приложу картинку, что сделано сейчас
net_chem.png


Практика показывает без отказоустойчивости никак, не важно железный маршрутизатор или програмный. Потому сейчас ввожу в работу второй, изначально когда стояла квагга виделось просто - заббикс по тригеру выполняет действие, меняет статик роуты и переносит анонс на второй сервер. Разбираясь с bird как понял OSPF мне позволит, все это реализовать без участия заббикса.

По приложенной схеме - черный жирный линк это основной маршрут (т.е изначально когда оба маршрутизатора доступны город А ходит через свой маршрутизатор, город Б через свой). Красной линией маршрут в случае падения одного из маршрутизаторов. От магистрала две BGP сессии, /30 поделили на две /31. Маршруты на сети городов А и Б сделал напрямую статикой, дабы не бегать через маршрутизаторы.

Попробую развить дальше свою задумку, не хватает знаний потому бы хотелось прояснить следующие вопросы по OSPF и разбить все это дело на подзадачи

1. router_id должен быть уникальным, исходя из него происходит выбор основого DR и BDR. основная задача DR будет делать рассылки о состоянии, а вот маршрут все таки будет выбиратся исходя из значения cost ?
2. сost навешиваеться ток на интерфейс? Получается нужно дополнительные виланы, без них можно реализовать?
3. если верхние маршрутизаторы соединить между собой, то получаеться дополнительно к OSPF можно использовать BFD?
4. Нижние маршрутизаторы где терминируются L3, в случае если не найду подходящих железных решений, тоже останутся софт-роутерами и зарезервировать их можно используя протокол CARP, имеет ли смысл CARP поднимать в сторону OSPF?
linx
новичок
 
Сообщения: 16
Зарегистрирован: 26 апр 2011, 14:36

Re: bird настройка фильтров

Сообщение root » 31 янв 2015, 11:28

исходя из схемы правильным было бы убрать общий влан 4001, т.к. это p2p линки, а не общая магистраль
при настройке OSPF на ифейсе указать:
Код: Выделить всё
ip ospf network point-to-point

в BIRD тоже самое будет:
Код: Выделить всё
type pointopoint;

DR и BDR в таком случае выбираться вообще не будет, т.к. они не нужны

linx писал(а):1. router_id должен быть уникальным

да
linx писал(а):маршрут все таки будет выбиратся исходя из значения cost ?

если cost задан, то да, он будет учитываться при рассчете и выборе лучшего маршрута

linx писал(а):2. сost навешиваеться ток на интерфейс?

да

linx писал(а):Получается нужно дополнительные виланы, без них можно реализовать?

не понимаю зачем в данной схеме вланы, я бы как раз убрал бы 4001 влан отсюда
BGP роутеры анонсят default, нижние маршрутизаторы анонсируют свои подсети с абонентами
никакой cost тут тебе и не нужен, каждый роутер и так будет ходить по оптимальному пути.

linx писал(а):3. если верхние маршрутизаторы соединить между собой, то получаеться дополнительно к OSPF можно использовать BFD?

а) верхние маршрутизаторы имеет смысл соединять линком, если ты планируешь обмениваться BGP маршрутами полученные от апстримов
б) я бы между ними поднимал бы iBGP, а не OSPF
в) BFD можно использовать и при отсутствии данного линка

linx писал(а):имеет ли смысл CARP поднимать в сторону OSPF?

честно, не осознал вопроса
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

След.

Вернуться в Маршрутизация / Routing

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron