segunda-feira, 12 de dezembro de 2011

Configurando bgp em linux usando o Bird

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
Ferramentas, sites de monitoramento e Looking Glass: http://bgp.he.net

Nenhum comentário: