跳至内容

OpenBGPD BGP 路由器

简介

边界网关协议 (BGP) 是维系互联网运行的路由协议。无论您的互联网服务提供商是谁,它都能让您查看此文档。

OpenBGPDOpenBSD 的跨平台 BGP 实现。作者本人在他的网络上也在使用它。

先决条件

  • 具有 BGP 连接性的服务器、虚拟机或实验室网络
  • 来自您的 区域互联网注册管理机构 的 AS 号
  • 拥有的或租赁的 IPv4 或 IPv6 地址块
  • 网络管理知识

安装包

由于 OpenBGPD 不在默认的存储库中,请先安装 EPEL 存储库(企业 Linux 的额外包)

dnf install -y epel-release

然后,安装 OpenBGPD

dnf install -y openbgpd

设置 OpenBGPD

让我们从一个全新的 OpenBGPD 配置开始

rm /etc/bgpd.conf
touch /etc/bgpd.conf
chmod 0600 /etc/bgpd.conf

然后,在 /etc/bgpd.conf 中添加以下内容

AS YOUR_ASN
router-id YOUR_IPV4

listen on 127.0.0.1
listen on YOUR_IPV4
listen on ::1
listen on YOUR_IPV6
log updates
network IPV4_TO_ADVERTISE/MASK
network IPV6_TO_ADVERTISE/MASK

allow to ebgp prefix { IPV4_TO_ADVERTISE/MASK IPV6_TO_ADVERTISE/MASK }

neighbor PEER_IPV4 {
    remote-as               PEER_ASN
    announce IPv4           unicast
    announce IPv6           none
    local-address           YOUR_IPV4
}

neighbor PEER_IPV6 {
    remote-as               PEER_ASN
    announce IPv4           none
    announce IPv6           unicast
    local-address           YOUR_IPV6
}

替换以下信息

  • YOUR_ASN 替换为您的 AS 号。
  • YOUR_IPV4 替换为您的服务器的 IPv4 地址。
  • YOUR_IPV6 替换为您的服务器的 IPv6 地址。
  • PEER_ASN 替换为您的上游 ISP 的 AS 号。
  • PEER_IPV4 替换为您的上游 ISP 的 IPv4 地址。
  • PEER_IPV6 替换为您的上游 ISP 的 IPv6 地址。

以上行表示以下内容

  • AS 行包含您的 BGP AS 号。
  • router-id 行包含您的 BGP 路由器 ID。这是一个 IPv4 地址,但如果您只使用 IPv6 BGP,也可以是一个假的、不可路由的地址(例如 169.254.x.x)。
  • listen on 行指定要监听的接口。我们应该监听所有支持 BGP 的接口。
  • network 行添加我们想要通告的网络。
  • allow to ebgp prefix 行添加 RFC8212 的合规性,以提高路由安全性。某些托管公司(如 BuyVM)要求此项。
  • neighbor 块指定每个 IPv4 和 IPv6 对端。
  • remote-as 行指定上游的 AS 号。
  • announce IPv4 行指定我们是否应该通告 unicast IPv4 路由或 none。在 IPv6 上游上应设置为 none
  • announce IPv6 行指定我们是否应该通告 unicast IPv6 路由或 none。在 IPv4 上游上应设置为 none
  • local-address 行是上游的 IPv4 或 IPv6 地址。

某些上游可能使用 MD5 密码或 BGP 多跳。如果是这种情况,您的 neighbor 块将如下所示

neighbor PEER_IPV4 {
    remote-as               PEER_ASN
    announce IPv4           unicast
    announce IPv6           none
    local-address           YOUR_IPV4
    multihop                2
    local-address           203.0.113.123
}

neighbor PEER_IPV6 {
    remote-as               PEER_ASN
    announce IPv4           none
    announce IPv6           unicast
    local-address           YOUR_IPV6
    multihop                2
    local-address           2001:DB8:1000::1
}

您需要通过设置这些 sysctl 值来启用 IP 转发

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

现在,我们应该启用 OpenBGPD 和转发

sysctl -p /etc/sysctl.conf
systemctl enable --now bgpd

检查 BGP 状态

一旦 OpenBGPD 启用,您就可以看到 BGP 状态

bgpctl show

您将看到输出

Neighbor                   AS    MsgRcvd    MsgSent  OutQ Up/Down  State/PrfRcvd
BGP_PEER             PEER_ASN       164         68     0 00:32:04      0

您也可以查看 BGP 通告的路由

bgpctl show rib

如果工作正常,您应该能看到 BGP 路由表

flags: * = Valid, > = Selected, I = via IBGP, A = Announced,
       S = Stale, E = Error
origin validation state: N = not-found, V = valid, ! = invalid
aspa validation state: ? = unknown, V = valid, ! = invalid
origin: i = IGP, e = EGP, ? = Incomplete

flags  vs destination          gateway          lpref   med aspath origin
AI*>  N-? YOUR_IPV4/24         0.0.0.0           100     0 i
AI*>  N-? YOUR_IPV6::/48       ::                100     0 i

结论

虽然 BGP 最初可能看起来令人生畏,但一旦您掌握了它,就可以获得属于您的互联网路由表的一部分。OpenBGPD 的简洁性使得构建软件路由器或 anycast 服务器更加容易。尽情享受吧!

作者:Neel Chauhan

贡献者:Steven Spencer, Ganna Zhyrnova