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