OpenBGPD
最后更新于
# rcctl enable bgpd
# 开机启动
# bgpd -n -f /etc/bgpd.conf
# 语法检查(不启动)
# rcctl start bgpd
# 启动守护进程## /etc/bgpd.conf — 单 ISP eBGP,显式出站与受控入站
AS 64512
router-id 198.51.100.2
# 待通告的前缀
prefix-set "our-net" {
198.51.100.0/24,
2001:db8:100::/48
}
neighbor 203.0.113.1 {
remote-as 64500
descr "ISP-A"
local-address 198.51.100.2
enforce neighbor-as yes
max-prefix 500000 restart # 按供应商指引调整
announce none # 出站由下方 match 规则控制
}
# 入站:接受上游路由(受 max-prefix 与后续过滤器约束)
allow from neighbor 203.0.113.1
# 出站:仅向该邻居通告已批准的前缀
match to neighbor 203.0.113.1 prefix-set "our-net" announce# bgpctl reload
# 平滑重配置
$ bgpctl show summary
# 会话状态、前缀计数、逐邻居统计
$ bgpctl show neighbor 203.0.113.1
# 能力与最近错误(若有)
$ bgpctl show rib out neighbor 203.0.113.1
# 应仅通告已批准的前缀## /etc/bgpd.conf — 两家供应商;确定性偏好与出站标记
AS 64512
router-id 198.51.100.2
prefix-set "our-net" { 198.51.100.0/24, 2001:db8:100::/48 }
neighbor 203.0.113.1 {
remote-as 64500
descr "ISP-A"
local-address 198.51.100.2
enforce neighbor-as yes
max-prefix 500000 restart
announce none
}
neighbor 198.51.100.1 {
remote-as 64496
descr "ISP-B"
local-address 198.51.100.2
enforce neighbor-as yes
max-prefix 500000 restart
announce none
}
# 接受双方的入站
allow from neighbor 203.0.113.1
allow from neighbor 198.51.100.1
# AS 内偏好 ISP-A
match from neighbor 203.0.113.1 set localpref 200
match from neighbor 198.51.100.1 set localpref 150
# 出站:向双方通告同一集合,并附加参考团体属性
match to neighbor 203.0.113.1 prefix-set "our-net" set community 64512:100 announce
match to neighbor 198.51.100.1 prefix-set "our-net" set community 64512:100 announce$ bgpctl show rib as 64500
# 从 ISP-A 学到的路由(AS 路径视图)
$ bgpctl show rib | egrep '198\.51\.100\.0/24|2001:db8:100::/48'
# 导出前存在于 RIB 中的始发前缀
$ bgpctl show neighbor | egrep 'LocalPref|Community'
# 策略标记按预期可见## /etc/bgpd.conf — 添加一个简单 iBGP 对等体
AS 64512
router-id 10.0.0.1
neighbor 10.0.0.2 {
remote-as 64512
descr "iBGP-R2"
announce none
}
# iBGP 接受
allow from neighbor 10.0.0.2
# 可选:将交换限制为内部路由
prefix-set "internal" { 10.10.0.0/16, 10.20.0.0/16 }
match to neighbor 10.0.0.2 prefix-set "internal" announce$ bgpctl show summary
# iBGP 会话应为 Established
$ bgpctl show rib neighbor 10.0.0.2
# 从对等体接受的路由
$ bgpctl show rib out neighbor 10.0.0.2
# 向对等体通告的路由(经 "internal" 过滤)# rcctl enable rpki_client
# rcctl start rpki_client
# 启动周期性 ROA 获取/校验;产物位于 /var/db/rpki-client/
# rpki-client -vv
# 按需运行,用于初始填充与诊断## /etc/bgpd.conf — 加载 ROA 并丢弃无效项
AS 64512
router-id 198.51.100.2
roa-set {
/var/db/rpki-client/openbgpd
}
# 策略:不接受按 ROA 判定为无效源的路由
deny from any roa invalid
# 其余导入按邻居规则放行$ bgpctl show rib roa invalid
# 因无效源被拒绝的路由
$ bgpctl show rib roa unknown | head
# 无覆盖 ROA 的路由(仅供参考)## /etc/bgpd.conf — 通过 iBGP 始发任播主机路由
AS 64512
router-id 10.0.0.1
network 10.10.255.53/32
# 导出前路由须已存在于 RIB(lo0 别名或静态)$ bgpctl show summary
# 会话状态与计数器
$ bgpctl show neighbor <addr>
# 能力、定时器、最近错误
$ bgpctl show rib
# Loc-RIB;附加 'in' 或 'out' 配合 'neighbor <addr>' 查看逐对等体视图
$ bgpctl show rib community 64512:100
# 按团体属性过滤;便于策略检查
$ bgpctl log verbose
# 排障时临时提高 bgpd(8) 日志详细度# tcpdump -ni egress port 179
# 观察链路上的 BGP OPEN/KEEPALIVE/UPDATE
$ route -n show -inet ; route -n show -inet6
# 已通告前缀对应的始发/静态路由是否存在