Configurando bgp em linux usando o Bird
Autor: Felipe Silva | Publicado: 2011-12-12T10:53:00-02:00

Pessoal por falta de material na internet principalmente em português[br] vou disponibilizar o que aprendi em cofiguração do Bird.
Muitas pessoas usam roteadores Cisco e Mikrotik, para quem uma solução em Linux vai a dica o Bird.
O Bird tem sua configuração muito simples, para você que quer fechar um peering com seu provedor segue um exemplo abaixo, comentado.


Cenário:

ip externo do roteador BGP - 192.168.100.1
rede a ser exportada - 192.168.200.0/21
Meu AS(Sistema Autónomo)- 99999
AS do meu provedor - 1000
Ip do peers BGP : 20.20.20.1 e 30.30.30.1

Depois de configurado o bird tem um CLI que pode ser chamado pelo comando birdc.



#Inicio do arquivo /etc/bird.conf



# Turn on global debugging of all protocols

#Exige muito processamento quando se descometa este parâmetro

#debug protocols all;



# Configuração quais tipos de mensagens vão para os arquivos de log e o local do arquivo.



log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug };

log stderr all;

log "/usr/local/bird/log/bird.log" all;



# Override router ID

# Indentificação do seu roteador, normalmente se usa o primeiro IP do bloco seu bloco que será divulgado.

router id 192.168.200.1;



# Porta e IP de escuta do BGP

listen bgp address 192.168.100.1 port 179;



# Define a route filter...

#filter test_filter {

#       if net ~ 10.0.0.0/16 then accept;

#       else reject;

#}



#filter sink { reject; }

#filter okay { accept; }



# Define another routing table

#table testable;



# The direct protocol automatically generates device routes to

# all network interfaces. Can exist in as many instances as you wish

# if you want to populate multiple routing tables with device routes.

#protocol direct {

#       interface "-eth*", "*"; # Restrict network interfaces it works with

#}



# This pseudo-protocol performs synchronization between BIRD's routing

# tables and the kernel. If your kernel supports multiple routing tables

# (as Linux 2.2.x does), you can run multiple instances of the kernel

# protocol and synchronize different kernel tables with different BIRD tables.

protocol kernel {

learn;                  # Learn all alien routes from the kernel (Usei para evitar de que ele importe sua proprias rotas)

#       persist;                # Don't remove routes on bird shutdown

scan time 20;           # Scan kernel routing table every 20 seconds

#       import none;            # Default is import all

#       export all;             # Default is export none

#       kernel table 5;         # Kernel table to synchronize with (default: main)

}



# This pseudo-protocol watches all interface up/down events.

protocol device {

scan time 10;           # Scan interfaces every 10 seconds

}



# Static routes (again, there can be multiple instances, so that you

# can disable/enable various groups of static routes on the fly).

protocol static {

#       disabled;               # Disable by default

#       table testable;         # Connect to a non-default table

#       preference 1000;        # Default preference of routes

#       debug { states, routes, filters, interfaces, events, packets };

debug all;

#-----------------------------------------------------------------------------



#Adcione as rotas a serem exportadas

#Rota para minha rede /21

route 192.168.200.0/21 via 192.168.100.2;

#       route 0.0.0.0/0 via 62.168.0.189;

#       route 62.168.0.0/25 reject;

#



#Rota necessaria para fecha o peer BGP com seu provedor, deve se ter uma rota para os seu vizinhos

route 20.20.20.1/32 via 192.168.100.2;

route 30.30.30.1/32 via 192.168.100.2;

}



#Sessões bgp que serão fechadas



#Sessão BGP numero 1

protocol bgp partial {

local as 99999;

neighbor 20.20.20.1 as 1000;

multihop;

source address 192.168.200.1;

export all;

import all;

}



#Sessão BGP numero 2

protocol bgp full {

local as 99999;

neighbor 30.30.30.1 as 1000;

multihop;

source address 192.168.200.1;

#       export all;

import all;

}





Referencia importantes:

site do projeto Bird : http://bird.network.cz

Wiki do projeto Bird : https://git.nic.cz/redmine/projects/bird/wiki

Ferramentas, sites de monitoramento e Looking Glass: http://bgp.he.net

http://ping.eu/

http://www.rnp.br/ip/lg.php