Ir para o conteúdo principal

Configurando BGP com BIRD 2 no Equinix Metal

O BIRD é um daemon de roteamento de código aberto para sistemas do tipo Unix. Ele pode ser usado para estabelecer sessões BGP (Border Gateway Protocol) entre seus servidores e a rede Equinix Metal . Este guia apresenta uma configuração mínima viável para anunciar um endereço IP do seu servidor via BGP.

No final deste guia, você encontrará um link para um repositório GitHub do Equinix Labs que contém alguns scripts e dicas úteis para automatizar esta configuração.

Como Começar

Se você estiver configurando o BGP pela primeira vez, você seguir as etapas descritas em nossa documentação do BGP local para Habilitar o BGP no projeto e Criar sessões BGP locais para o servidor que você está configurando com o BIRD.

Você também precisará de um endereço IP para anunciar via BGP, embora você precise atribuí-lo a um servidor no console do Metal . Se você ainda não tiver um, você solicitar um IP elástico do Equinix Metal. Consulte a documentação de Endereços IP Anycast Globais para obter mais informações sobre como configurar um IP elástico global.

O restante deste guia pressupõe que você já concluiu a configuração acima e se conectou ao seu servidor Linux com ssh ou similar. Este guia usará o Ubuntu 24.04 como sistema operacional de exemplo. Ao final deste guia, você encontrará um script shell que poderá usar para realizar toda a configuração automaticamente, desde que os pré-requisitos acima sejam atendidos.

Pacotes necessários

Este guia precisará de bird2 para concluir a instalação e utilizar jq para consultar alguns dos metadados do nosso servidor. Se você ainda não tiver esses pacotes instalados, execute:

apt -y update && apt -y install bird2 jq
observação

O valor especificado nesta instalação é bird2 e não bird. Se você não especificar o número no final, seu gerenciador de pacotes provavelmente instalará a versão mais antiga, 1.x, do BIRD. Para verificar qual versão você instalou, digite bird --version no terminal.

Atualizar a interface de rede

Primeiro, vamos criar uma interface de loopback e atribuir a ela o endereço IP que desejamos anunciar aos pares. Você precisará adicioná-lo a /etc/network/interfaces para garantir a persistência após a reinicialização do sistema . Você pode adicioná-lo manualmente ou copiar e colar o código abaixo, substituindo o IP após address pelo IP que você deseja anunciar.

cat <<EOF >> /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.0.2.1
netmask 255.255.255.255
EOF

Configurando o BIRD

O BIRD vem com um arquivo de configuração mínimo, suficiente apenas para iniciar o daemon. Precisaremos atualizar este arquivo com as informações sobre nosso ambiente, mas primeiro, precisamos reunir essas informações, o que podemos fazer usando o serviço de metadados da Platform Equinix . Encontre mais informações em nossa documentação de metadados BGP .

Você pode consultar tudo isso manualmente e escrever um arquivo de configuração personalizado, mas para os propósitos deste guia, vamos aproveitar ao máximo técnicas de shell um pouco mais avançadas para automatizar isso um pouco.

Coletando informações

Primeiro, vamos consultar o serviço de metadados usando curl e filtrar para obter apenas as informações de que precisamos com jq, salvando a saída como as variáveis ​​que precisaremos posteriormente:

json=$(curl -s https://metadata.platformequinix.com/metadata)
MY_PRIVATE_IP=$(echo $json | jq -r ".network.addresses[] | select(.public == false) | .address")
MY_PRIVATE_GW=$(echo $json | jq -r '.network.addresses[] | select(.public == false and .address_family == 4).gateway')
MY_PEER_1=$(echo $json | jq -r '.bgp_neighbors[0].peer_ips[0]')
MY_PEER_2=$(echo $json | jq -r '.bgp_neighbors[0].peer_ips[1]')
MY_ASN=$(echo $json | jq -r '.bgp_neighbors[0].peer_as')

Como toda a nossa saída foi definida como variáveis, você pode não ver nada acontecer no terminal. Portanto, se você testar, você pode usar algo como echo $MY_ASN ou echo $MY_PRIVATE_GW para garantir que foi definido.

Em seguida, precisaremos salvar o endereço IP global que queremos anunciar via BGP como uma variável. Substitua 192.0.2.1 abaixo pelo IP elástico global da Equinix ou pelo endereço que você trouxe você:

ELASTIC_IP=192.0.2.1

Criando a configuração BIRD

Após a instalação do BIRD, seu arquivo de configuração é encontrado em /etc/bird/bird.conf e é suficiente para que o daemon inicie sem erros, mas na verdade não roteia nada. Vamos substituir esse arquivo pelo texto do comando escrito abaixo.

Execute o seguinte no terminal do servidor:

cat << EOF > /etc/bird/bird.conf
# Create a filter to advertise only the Elastic IP we've chosen.
# This IP must be bound to the lo interface
filter equinix_bgp {
if net = $ELASTIC_IP/32 then accept;
}

router id $MY_PRIVATE_IP;

# Add direct routes only on ipv4 on the lo interface
protocol direct {
ipv4;
interface "lo";
}

# Import routes from kernel
protocol kernel {
scan time 20;
ipv4 {
import all;
export all;
};
}

# Static routes to reach peers via private Equinix network
# Peers always 169.254.255.1 & 169.254.255.2 on Equinix Metal
protocol static {
ipv4;
route $MY_PEER_1/32 via $MY_PRIVATE_GW;
route $MY_PEER_2/32 via $MY_PRIVATE_GW;
}

# Check for interface up/down events
protocol device {
scan time 10; # Scan interfaces every 10 seconds
}

# BGP advertisement to neighbors
# Neighbor ASN should always be 65530 on Equinix Metal
# edit password line and uncomment as needed
protocol bgp neighbor_v4_1 {
local as 65000;
neighbor $MY_PEER_1 as $MY_ASN;
#password string;
multihop 5;
ipv4 {
export filter equinix_bgp;
import all;
};
}

protocol bgp neighbor_v4_2 {
local as 65000;
multihop 5;
neighbor $MY_PEER_2 as $MY_ASN;
#password string;
ipv4 {
export filter equinix_bgp;
import all;
};
}
EOF

Certifique-se de que isso atualizou corretamente seu arquivo bird.conf lendo seu conteúdo com less, cat ou similar:

less /etc/bird/bird.conf

Verifique se este arquivo é semelhante ao texto do comando anterior, mas com as variáveis ​​extraídas dos metadados nos locais corretos. Se alguma delas estiver em branco ou não contiver os dados esperados, certifique-se de que o BGP esteja habilitado no seu projeto Equinix e nesse dispositivo especificamente para IPv4. Em seguida, tente repetir os passos acima, a partir de Coletando Informações.

Reiniciar BIRD

Depois que sua configuração for verificada, você precisará reiniciar o serviço bird para que ela tenha efeito.

systemctl restart bird

Confirmando BGP

Para confirmar se as sessões BGP foram estabelecidas, você pode usar o botão Update Now e atualizar a guia BGP da página de gerenciamento do seu servidor no portal Equinix, ou pode usar o console BIRD no próprio servidor.

Inicie o console com birdc e você deverá ver uma nova linha do console BIRD onde podemos inserir alguns comandos:

bird>

Em seguida, você pode usar show protocols para visualizar os protocolos que acabamos de especificar e verificar se as conexões de vizinhança foram estabelecidas. Deverá ter uma aparência semelhante a esta:

bird> show protocols
Name Proto Table State Since Info
direct1 Direct --- up 20:19:06.003
kernel1 Kernel master4 up 20:19:06.003
static1 Static master4 up 20:19:06.003
device1 Device --- up 20:19:06.003
neighbor_v4_1 BGP --- up 20:19:10.579 Established
neighbor_v4_2 BGP --- up 20:19:10.700 Established
bird>

Suas conexões agora devem estar estabelecidas e seu servidor está anunciando o endereço IP especificado no início deste guia. Você pode testar isso por meio de ping ou qualquer outro método que use para conectar a este servidor.

Conclusão

Parabéns! Você configurou seu servidor para anunciar um IP global via BGP através da rede Equinix ! Se você quiser fazer isso de uma forma mais automatizada, eu criei [alguns scripts em nossa organização Equinix Labs no GitHub que você pode baixar, modificar ou usar para configurar automaticamente o BIRD2 em seus dispositivos Equinix Metal .

Leitura adicional

Esta página foi útil?