Configuración de BGP con BIRD 2 en Equinix Metal
BIRD es un demonio de enrutamiento de código abierto para sistemas tipo Unix. Puede utilizarse para establecer sesiones Border Gateway Protocol (BGP) entre sus servidores y la red Equinix Metal. Esta es una guía para una configuración mínima viable para anunciar una dirección IP de su servidor a través de BGP.
Al final de esta guía, encontrará un enlace a un repositorio GitHub de Equinix Labs que contiene algunos scripts y consejos útiles para automatizar esta configuración.
Cómo empezar
Si está configurando BGP por primera vez, tendrá que seguir los pasos descritos en nuestra Documentación sobre BGP local para Habilitar BGP en el proyecto y Crear sesiones BGP locales para el servidor que está configurando con BIRD.
También necesitará una dirección IP para anunciarse a través de BGP, aunque no es necesario que la asigne a un servidor en la consola de Metal. Si aún no dispone de una, puede solicitar una IP elástica a Equinix Metal. Consulte la documentación sobre direcciones IP Anycast Globales para obtener más información sobre la configuración de una IP Elástica Global.
El resto de esta guía asumirá que usted ha completado la configuración anterior y se ha conectado a su servidor linux con ssh o similar. Esta guía utilizará Ubuntu 24.04 como SO de ejemplo. Al final de esta guía, encontrará un script de shell que podría utilizar para realizar toda la instalación y configuración de forma automática suponiendo que se cumplen los requisitos previos anteriores.
Paquetes obligatorios
Esta guía necesitará bird2 para completar la instalación y hacer uso de jq para consultar algunos de los metadatos de nuestro servidor. Si aún no tiene instalados estos paquetes, ejecútelos:
apt -y update && apt -y install bird2 jq
especificado en esta instalación es bird2 y no bird. Si no especifica el número al final, es probable que su gestor de paquetes instale la versión más antigua, la 1.x de BIRD. Para verificar qué versión ha instalado, escriba bird --version en el terminal.
Actualice la interfaz de red.
En primer lugar, crearemos una interfaz loopback y le asignaremos la dirección IP que nos gustaría anunciar a los peers. Querrá añadirla a /etc/network/interfaces para asegurar su persistencia tras un reinicio del sistema. Puede añadirla manualmente o copiar y pegar lo siguiente, sustituyendo la IP después de address por la IP que le gustaría 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
Configuración de BIRD
BIRD viene con un archivo de configuración mínimo, suficiente para iniciar el demonio, pero nada más. Tendremos que actualizar este archivo con la información sobre nuestro entorno, pero antes, tendremos que conseguir esa información, lo que podemos hacer utilizando el servicio de metadatos de la plataforma Equinix. Encontrará más información en nuestra documentación de metadatos BGP.
Puede consultar todo esto a mano y escribir un archivo de configuración a medida, pero para los fines de esta guía, vamos a aprovechar un poco más avanzadas técnicas de shell para automatizar esto un poco.
Recopilación de información
En primer lugar, vamos a consultar el servicio de metadatos utilizando curl, y filtrar sólo la información que necesitamos con jq guardando la salida como las variables que necesitaremos más adelante:
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')
Debido a que toda nuestra salida se ha establecido como variables, es posible que no vea pasar nada en el terminal. Así que si quiere probar esto, puede utilizar algo como echo $MY_ASN o echo $MY_PRIVATE_GW para asegurarse de que se ha establecido.
A continuación, tendremos que guardar también como variable la dirección IP global que queremos anunciar a través de BGP. Sustituya 192.0.2.1 a continuación por la IP elástica global de Equinix o la que haya traído con usted:
ELASTIC_IP=192.0.2.1
Creación de la configuración BIRD
Una vez instalado BIRD, su archivo de configuración se encuentra en /etc/bird/bird.conf y es suficiente para que el demonio arranque sin errores, pero en realidad no enruta nada. Vamos a sustituir ese archivo por el texto del comando escrito a continuación.
Ejecute lo siguiente en el terminal del 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
Asegúrese de que esto ha actualizado correctamente su archivo bird.conf leyendo su contenido con less, cat o similar:
less /etc/bird/bird.conf
Compruebe que este archivo tiene un aspecto similar al texto del comando anterior, pero por supuesto con las variables que extrajimos de los metadatos en los lugares adecuados. Si alguna de ellas está en blanco o no contiene los datos esperados, asegúrese de que BGP está habilitado en su proyecto Equinix y en ese dispositivo específicamente para IPv4 y, a continuación, intente repetir los pasos anteriores desde Recopilación de información.
Reiniciar BIRD
Una vez comprobada la configuración, tendrás que reiniciar el servicio de aves para que surta efecto.
systemctl restart bird
Confirmación de BGP
Para confirmar que se han establecido sesiones BGP, puede utilizar el botón Update Now y actualizar la pestaña BGP de la página de gestión de su servidor en el portal de Equinix, o podemos utilizar la consola BIRD en el propio servidor
Inicie la consola con birdc y debería ver una nueva línea de consola BIRD donde podemos introducir algunos comandos:
bird>
A continuación, puede utilizar show protocols para ver los protocolos que acabamos de especificar y comprobar si se han establecido las conexiones vecinas. Debería verse algo así
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>
Sus conexiones deberían estar ahora establecidas y su servidor está anunciando la dirección IP especificada al principio de esta guía. Puede comprobarlo mediante ping o cualquier otro método que utilice para conectarse a este servidor.
Conclusión
¡Enhorabuena! ¡Ha configurado su servidor para anunciar una IP global sobre BGP a través de la red Equinix! Si desea hacerlo de forma más automatizada, he creado un [par de scripts en nuestra organización Equinix Labs en github que puede descargar, modificar o utilizar de cualquier otra forma para instalar y configurar automáticamente BIRD2 en sus dispositivos Equinix Metal.