Sobre a instalação do BIRD
Para instalar o BIRD em sistemas Debian e Ubuntu, a forma mais recomendada é usar o repositório oficial mantido pelo próprio time do projeto, disponível em: https://pkg.labs.nic.cz/doc/?project=bird.
Esse repositório oferece pacotes sempre atualizados, com versões recentes e suporte direto do CZ.NIC, o mantenedor original do BIRD. Lá você encontra instruções detalhadas para adicionar o repositório ao seu sistema e instalar o pacote com apt
.
Para outras distribuições, como CentOS, Fedora, Arch, Alpine ou derivados, você pode instalar o BIRD diretamente dos repositórios oficiais da própria distribuição. Quase todas já empacotam o BIRD, mas a versão disponível nem sempre é a mais recente.
Se você precisa de funcionalidades específicas das últimas versões (como multithreading, MPLS, melhorias no suporte a BGP ou novos filtros), pode ser necessário compilar o BIRD a partir do código-fonte.
O código está disponível no GitLab oficial do projeto e o processo de compilação é simples para quem já tem familiaridade com make
e dependências básicas de desenvolvimento. Essa abordagem garante que você tenha acesso à versão exata que deseja, com os módulos necessários ativados, seja para produção, laboratório ou ambiente de testes.
Também é possível rodar o BIRD dentro de containers, o que é útil tanto para testes quanto para produção em ambientes com roteadores virtuais, redes overlay ou laboratórios automatizados.
Você pode usar imagens prontas da comunidade ou criar sua própria imagem baseada em Debian, Alpine ou outra distro leve, instalando o BIRD dentro do container com os pacotes oficiais ou compilando direto do código-fonte. O mais importante nesse cenário é garantir que o container tenha as permissões e capacidades certas para operar como roteador.
Para funcionar corretamente, o container precisa ser executado com as capacidades de rede elevadas, como --cap-add=NET_ADMIN
, --cap-add=NET_RAW
, além de ter acesso a interfaces reais ou virtuais (com --network=host
). Se rodar o BIRD como usuário não-root dentro do container e precisar ouvir na porta 179 (BGP) ou IP protocolo 89 (OSPF), garanta a capacidade NET_BIND_SERVICE
para portas menores que 1024.
O container pode rodar com rede do tipo host
, garantindo acesso direto à pilha de rede do sistema, enquanto todo o restante (processos, arquivos e ambiente de execução) permanece isolado dentro do container. Não é recomendado rodar uma aplicação com usuário root dentro do container, desde que o container tenha as capacidades de rede adequadas. O usuário no sistema hospedeiro que executa o container também não deve ser o usuário root.
Uma prática segura é rodar o container com root (como já é no Docker - rootful), mas com apenas as capacidades necessárias e, dentro do container, executar o bird como usuário dedicado com setcap:
setcap CAP_NET_ADMIN,CAP_NET_RAW,CAP_NET_BIND_SERVICE=+eip /usr/sbin/bird
Instalando o BIRD
Vamos instalar ele em um Ubuntu 22.04:
# Baixe a chave GPG usada para verificar a autenticidade dos pacotes do repositório:
wget -O /usr/share/keyrings/cznic-labs-pkg.gpg https://pkg.labs.nic.cz/gpg
# Adicione o repositório do BIRD 3 para o Ubuntu 22.04 (jammy), referenciando a chave GPG baixada:
echo "deb [signed-by=/usr/share/keyrings/cznic-labs-pkg.gpg] https://pkg.labs.nic.cz/bird3 jammy main" | sudo tee /etc/apt/sources.list.d/cznic-labs-bird3.list
# Atualize a lista de pacotes do apt, incluindo o novo repositório:
apt-get update
# Instale o BIRD 3, além de pacotes auxiliares para acesso a repositórios HTTPS:
apt-get -y install apt-transport-https ca-certificates
# Habilite e inicie o serviço do BIRD 3 imediatamente:
systemctl enable --now bird3
Após instalar o BIRD, há alguns passos essenciais para garantir que ele funcione corretamente como daemon de roteamento em um sistema Linux. Esses ajustes não fazem parte da instalação do pacote em si, mas são indispensáveis para que o roteador esteja operacional de verdade.
Primeiro, ative o encaminhamento de pacotes no kernel. Por padrão, o Linux não encaminha pacotes entre interfaces, ou seja, se configurado com BGP, pode não encaminhar pacotes de uma interface para outra.
# Para IPv4:
sysctl -w net.ipv4.ip_forward=1
# E para IPv6:
sysctl -w net.ipv6.conf.all.forwarding=1
Para tornar isso permanente, adicione essas linhas ao arquivo /etc/sysctl.conf
:
cat << 'EOF' >> /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF
# ative a configuração:
sysctl -p /etc/sysctl.conf
Depois, habilite o serviço do BIRD para que ele inicie automaticamente junto com o sistema. Em sistemas com systemd
, o comando é:
systemctl enable bird
Verifique também se o daemon está rodando corretamente com:
systemctl status bird
Outro ponto importante, se você estiver usando filtros de rotas, múltiplas tabelas ou recursos avançados como múltiplos RIBs, pode ser necessário configurar regras no firewall (iptables/nftables) para garantir que o tráfego roteado não seja bloqueado.
Em ambientes com firewalls restritivos, é comum esquecer que roteamento e NAT são coisas separadas, o BIRD cuida do roteamento, mas o sistema ainda pode filtrar ou dropar pacotes.
Por fim, é uma boa prática criar diretórios separados para logs (/var/log/bird.log
) e ajustar o syslog
ou rsyslog
para registrar os eventos do BIRD, principalmente em ambientes com BGP ou OSPF ativos, onde queda de sessões, timers e atualizações de rota precisam ser auditadas.
Arquivo de configuração do BIRD
O arquivo de configuração do BIRD (geralmente localizado em /etc/bird/bird.conf
ou /etc/bird.conf
em algumas distribuições) é o coração do daemon. É nele que você define como o roteador vai se comportar, quais protocolos vai usar (BGP, OSPF, kernel, static, etc.), quais rotas vai aceitar, quais vai anunciar, como vai filtrar, quais tabelas vai manipular, e assim por diante.
A estrutura do bird.conf
é baseada em blocos, cada um definindo um protocolo, tabela, filtro ou função auxiliar. Ele é interpretado de cima para baixo, como um script, e erros de sintaxe impedem o BIRD de carregar a configuração.
Exemplo básico:
router id 192.0.2.1;
protocol device {}
protocol kernel kernel4 {
ipv4 {
import all;
export all;
};
}
protocol static {
route 192.0.2.0/24 via 10.0.0.1;
}
Aqui você tem o ID do roteador (obrigatório para OSPF e BGP), um protocolo device
para monitorar interfaces, uma instância kernel
para sincronizar rotas com o sistema, e uma rota estática.
O arquivo pode conter comentários com #
, pode ser dividido em múltiplos arquivos com include
, e aceita a definição de variáveis, funções (function
), listas e filtros. Cada protocolo declarado ali se conecta a uma tabela (default ou customizada), e você controla o fluxo de rotas entre protocolos com import
e export
.
É um arquivo declarativo, mas com lógica suficiente para aplicar políticas complexas. Um erro comum é esquecer o ponto e vírgula ao fim dos blocos, o BIRD exige isso para delimitar instruções.
Toda mudança na configuração exige recarregar o BIRD com birdc configure
, e erros no arquivo são reportados com detalhes no log ou no terminal.