跳至内容

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