在Equinix Metal上使用 BIRD 2 配置 BGP
BIRD 是一个适用于类 Unix 系统的开源路由守护进程。它可用于在您的服务器和 Equinix Metal 网络之间建立 边界网关协议 (BGP) 会话。本指南将介绍如何通过 BGP 从您的服务器发布 IP 地址的最小可行配置。
在本指南的最后,您将找到一个Equinix Labs GitHub 存储库的链接,其中包含一些有用的脚本和提示,可自动执行此设置。
入门
如果您是第一次配置 BGP,则需要按照我们的 本地 BGP 文档 中概述的步骤,为使用 BIRD 配置的服务器在项目上启用 BGP 和创建本地 BGP 会话。
您还需要一个 IP 地址才能通过 BGP 进行通告,但无需在 Metal 控制台中将其分配给服务器。如果您还没有弹性 IP 地址,可以向 Equinix Metal 申请一个。有关设置全局弹性 IP 地址的更多信息,请参阅全局任播 IP 地址文档。
本指南的其余部分假设您已完成上述设置,并使用 ssh 或类似命令连接到您的 Linux 服务器。本指南将以 Ubuntu 24.04 为例进行说明。在本指南的最后,您将找到一个 shell 脚本,在满足上述前提条件的情况下,您可以使用该脚本自动完成所有设置和配置。
所需软件包
本指南需要使用 bird2 来完成安装,并使用 jq 查询一些服务器元数据。如果您尚未安装这些软件包,请运行:
apt -y update && apt -y install bird2 jq
本次安装指定的版本号为 bird2 而非 bird。如果您未在末尾指定数字,您的软件包管理器很可能会安装较旧的 BIRD 版本 1.x。要验证您安装的版本,请在终端中输入 bird --version。
更新网络接口
首先,我们将创建一个环回接口,并为其分配要向对等方通告的 IP 地址。您需要将其添加到 /etc/network/interfaces 中,以确保系统重启后配置仍然有效。您可以手动添加,也可以复制粘贴以下内容,并将 address 之后的 IP 地址替换为您要通告的 IP 地址。
cat <<EOF >> /etc/network/interfaces
auto lo:0
iface lo:0 inet static
address 192.0.2.1
netmask 255.255.255.255
EOF
配置 BIRD
BIRD 自带一个最小配置文件,仅足以启动守护进程,除此之外别无其他。我们需要用环境信息更新此文件,但首先,我们需要收集这些信息,这可以通过 Equinix 平台元数据服务来实现。更多信息请参阅我们的 BGP 元数据文档。
您可以手动查询所有这些并编写定制的配置文件,但出于本指南的目的,我们将利用更高级的 shell 技术来稍微自动化这一过程。
收集信息
首先,我们将使用 curl 查询元数据服务,并使用 jq 筛选出我们需要的信息,并将输出保存为我们稍后需要的变量:
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')
由于所有输出都已设置为变量,您可能在终端中看不到任何变化。因此,如果您想进行测试,可以使用类似 echo $MY_ASN 或 echo $MY_PRIVATE_GW 的值来确认是否已设置。
接下来,我们需要将要通过 BGP 通告的全局 IP 地址保存为一个变量。请将下面的 192.0.2.1 替换为 Equinix 全局弹性 IP 地址或您自带的 IP 地址:
ELASTIC_IP=192.0.2.1
创建 BIRD 配置
BIRD 安装完成后,其配置文件位于 /etc/bird/bird.conf 目录下,足以让守护进程正常启动,但实际上并不进行任何路由操作。我们将使用以下命令中的文本替换该文件。
在服务器的终端中运行以下命令:
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
使用 less、cat 或类似命令读取 bird.conf 文件的内容,确保已正确更新该文件:
less /etc/bird/bird.conf
验证此文件是否与上一个命令中的文本类似,当然,我们从元数据中提取的变量应位于正确的位置。如果其中任何一项为空或不包含预期数据,请确保您的 Equinix 项目和该设备上的 IPv4 已启用 BGP,然后尝试重复上述收集信息中的步骤。
重启 BIRD
检查完配置后,您需要重新启动 bird 服务才能使其生效。
systemctl restart bird
确认 BGP
要确认 BGP 会话已建立,您可以使用 Update Now 按钮刷新 Equinix 门户中服务器管理页面的 BGP 选项卡,或者也可以使用服务器上的 BIRD 控制台。
使用 birdc 启动控制台,您应该会看到一个新的 BIRD 控制台行,我们可以在其中输入一些命令:
bird>
然后您可以使用 show protocols 查看我们刚刚指定的协议,并查看邻居连接是否已建立。它应该类似于:
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>
您的连接现在应该已经建立,并且您的服务器正在广播本指南开头指定的 IP 地址。您可以通过 ping 或任何其他连接到此服务器的方法来测试这一点。
总结
恭喜!您已成功设置服务器,通过 Equinix 网络使用 BGP 协议发布全球 IP 地址!如果您想以更自动化的方式完成此操作,我已在 GitHub 上的 Equinix Labs 组织中创建了一些脚本,您可以下载、修改或以其他方式使用这些脚本,以自动设置和配置 Equinix Metal 设备上的 BIRD2。