OpenBGPD BGP 路由器¶
简介¶
边界网关协议 (BGP) 是将互联网连接在一起的路由协议。无论您的互联网服务提供商是谁,您都可以通过它来查看本文档。
OpenBGPD 是 OpenBSD 的跨平台 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