BGP

边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。

本节定义路由设备和VSM之间的管理接口.

bgp功能下面子模块比较多,因此设计为一个MQTT主题,然后使用一个object字段区分bgp下面的子模块。

MQTT管理主题定义为: VSE//bgp,替换为实际的设备序列号。

编号 Topic名称 发布者 订阅者 topic含义
1 VSE//bgp VSM VSE bgp管理
2 VSE//bgp/resp VSE VSM vse将处理情况反馈给云端

BGP全局配置

该部分为BGP基础信息, enable字段控制BGP功能是否开启。

字段 类型 含义
enable unsignedInt 是否启用
as_number unsignedInt AS number (1-429496729)
router_id IPAddress Router ID
update_source IPAddress 更新源IP,可选字段

支持get/set方法,消息示例

{“rid”: 12345, “timestamp”:1234, “action”: “set”, “object”: “bgp”, “params”: { “enable”: 1, “as_number”: 100, “router_id”: “1.1.1.1”, “update_source”: “” } }

quagga内部配置如下

router bgp 1001 bgp router-id 1.1.1.1

100为as number, “1.1.1.1” 为router id

neighbor

neighbor对象, 可以有多个,id和remote_ip均为其唯一标识。

字段 类型 含义
id unsignedInt VSR和VSM交互内部字段,唯一标识一个邻居
remote_ip IPAddress 对端地址
desc string 用户对该邻居的描述,可选
remote_as unsignedInt 对端AS
bfd string BFD,可选
in_policy string 挂接入策略名称,可选
out_policy string 挂接出策略名称,可选
multihop unsignedInt 多跳,可选

支持add/set/del/get方法,消息示例

{“rid”: 12345, “timestamp”: 1234, “action”: “add”, #邻居有多个因此可以增删改查, 根据id来标识一个唯一邻居。 “object”: “bgp.neighbor”, #使用bgp.neightbor来标识对邻居的操作 “params”: { “id”: 1, “remote_ip”: “1.1.1.1”, “desc”: “dec”, “remote_as”: 123456, “bfd”: “bfd”, “in_policy”: “bgp_policy_01”, “out_policy”: “bgp_policy_02”, “multihop”:2 } }

删除消息示例

{“rid”: 12345, “timestamp”: 1234, “action”: “del”, #邻居删除。 “object”: “bgp.neighbor”, #使用bgp.neightbor来标识对邻居的操作 “params”: [1] #指定删除的ID }

获取指定ID邻居信息的消息示例

{“rid”: 12345, “timestamp”: 1234, “action”: “get”, #获取邻居信息。 “object”: “bgp.neighbor”, #使用bgp.neightbor来标识对邻居的操作 “params”: [1] #指定获取的ID,返回指定ID的邻居信息 }

获取邻居ID的消息示例

{“rid”: 12345, “timestamp”: 1234, “action”: “get”, #获取邻居信息。 “object”: “bgp.neighbor”, #使用bgp.neightbor来标识对邻居的操作 “params”: [] #无指定ID时,返回所有邻居的ID }

quagga内部参考配置

neighbor 1.1.1.1 remote-as 123456 neighbor 1.1.1.1 ebgp-multihop 2 neighbor 1.1.1.1 route-map bgp_policy_01 in neighbor 1.1.1.1 route-map bgp_policy_02 out

IPlist

字段 类型 含义
name string 列表名称, 英文字母名称,唯一标识,不能进行修改
ip array 内容,以服务器内容为准,进行覆盖更新
desc string 描述,可选

支持add/set/del/get方法,add消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.iplist”, #使用bgp.iplist来标识对IPList的操作 “action”: “add”, #IPlist有多个, 因此可以增删改查。 “params”: { “name”: “prefix1”, “desc”: “”, “ip”: [“deny 0.0.0.0/0 le 7”, “permit 192.168.0.0/15”] } }

删除消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.iplist”, #使用bgp.iplist来标识对IPList的操作 “action”: “del”, #IPlist有多个, 因此可以增删改查。 “params”: [ “prefix1”,“prefix2” #以IPlist名称为关键字进行删除。 ] }

该配置在quagga进程中,内部配置参考如下

ip prefix-list prefix1 seq 1 deny 0.0.0.0/0 le 7 ip prefix-list prefix1 seq 2 permit 192.168.0.0/15

ASpath

字段 类型 含义
name string 列表名称, 英文字母名称,唯一标识,不能进行修改
desc string 描述,可选
as_path string 内容,以服务器内容为准,进行覆盖更新

支持add/set/del/get方法,add消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.aspath”, #使用bgp.aspath来标识对ASpath的操作 “action”: “add”, #ASpath有多个, 因此可以增删改查。 “params”: { “name”: “aspath1”, “desc”: “dec”, “as_path”: “permit 300”, } }

删除消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.aspath”, #使用bgp.aspath来标识对ASpath的操作 “action”: “del”, #ASpath有多个, 因此可以增删改查。 “params”: [ “aspath1”,“aspath2” #以ASpath名称为关键字进行删除。 ] }

该配置在quagga进程中,内部配置参考如下

ip as-path access-list aspath1 permit 300

BGP策略

字段如下

字段 类型 含义
id unsignedInt route-map 序列
name string 列表名称, 英文字母名称
desc string 用户对该策略的描述
match_ip_list string 创建的Iplist名称,可选
match_community string 创建的团体名称,可选
match_as_path string 创建的as路径名称,可选
next_hop string 下一跳地址,可选
as_path string as路径,可选
community string 团体属性,可选
local_preference string 本地偏好,可选
filter_enable unsignedInt 过滤使能

支持add/set/del/get方法,消息示例

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.policy”, #使用bgp.policy来标识对BGP策略的操作 “action”: “add”, #BGP策略有多个, 因此可以增删改查。策略下面又有策略项 “params”: { “id”: 1, “name”: “bgppolicy01”, “desc”:“”, “policy”:[{ “match_ip_list”: “prefix1”, “match_community”: “comm1”, “match_as_path”: “aspath1”, “next_hop”: “1.1.1.1”, “as_path”: “1000”, “community”: “11”, “local_preference”: “100”, “filter_enable”:1 }, { “match_ip_list”: “prefix2”, “match_community”: “comm2”, “match_as_path”: “aspath2”, “next_hop”: “1.1.1.1”, “as_path”: “1000”, “community”: “11”, “local_preference”: “100”, “filter_enable”:1 }] } }

删除消息时,根据策略的名称进行删除。消息示例

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.policy”, #使用bgp.policy来标识对BGP策略的操作 “action”: “add”, #BGP策略有多个, 因此可以增删改查。策略下面又有策略项 “params”: { “id”: 1, “name”: “bgppolicy01”, “desc”:“”, “policy”:[{ “match_ip_list”: “prefix1”, “match_community”: “comm1”, “match_as_path”: “aspath1”, “next_hop”: “1.1.1.1”, “as_path”: “1000”, “community”: “11”, “local_preference”: “100”, “filter_enable”:1 }, { “match_ip_list”: “prefix2”, “match_community”: “comm2”, “match_as_path”: “aspath2”, “next_hop”: “1.1.1.1”, “as_path”: “1000”, “community”: “11”, “local_preference”: “100”, “filter_enable”:1 }] } }

BGP只能挂接一个策略,因此需要将策略连接在一起,quagga配置参考如下

route-map bgp_policy_01 permit 1 match ip address prefix-list prefix-1 match community aaa match as-path aa set ip next-hop 1.1.1.1 set as-path prepend 1000 set community 11 set local-preference 100 route-map bgp_policy_01 permit 2 match ip address prefix-list prefix-2 match community aaa match as-path aa set ip next-hop 1.1.1.1 set as-path prepend 1000 set community 11 set local-preference 100

network

网络发布功能,将所需发布的网段放到network字段中。

字段 类型 含义
network array 将多个网段放在列表中,例如[“192.168.4.1/24”]

支持add/del/get方法,增加消息示例

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.network”, #使用bgp.network来标识对network的操作 “action”: “add”, #network有多个, 因此可以增删查。 “params”: { “network”: [“192.168.4.1/24”,“192.168.0.1/30”] } }

删除消息示例

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.network”, “action”: “del”, “params”: [“192.168.4.1/24”] }

获取消息示例

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.network”, “action”: “get”, “params”: [] }

内部参考配置为

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.network”, “action”: “get”, “params”: [] }

地址聚合

地址聚合:将多条路由整合成一条路由

字段 类型 含义
aggregate array 将聚合地址放在列表中,可以有多个

支持add/del/get方法,增加消息示例

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.aggregate”, #使用bgp.aggregate来标识对aggregate的操作 “action”: “add”, #aggregate有多个, 因此可以增删查。 “params”: { “aggregate”:[“30.30.0.0/16 as-set summary-only”, “30.31.0.0/16 as-set” ] } }

删除消息示例

{“rid”: 12345, “timestamp”:1234, “object”: “bgp.aggregate”, #使用bgp.aggregate来标识对aggregate的操作 “action”: “del”, #aggregate有多个, 因此可以增删查。 “params”: [ “30.30.0.0/16 as-set summary-only”,“30.31.0.0/16 as-set” ] }

内部参考配置为

aggregate-address 30.30.0.0/16 as-set summary-only aggregate-address 30.31.0.0/16 as-set

redistribute

重分布:指连接到不同路由选择域的边界路由器在不同自主系统之间交换和通告路由选择信息的能力。(未完成)

字段 类型 含义
route_type string 重分布路由类型
tag unsignedInt 标签,唯一标识

支持add/set/del/get方法,消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.redistribute”, #使用bgp.redistribute来标识对重分布的操作 “action”: “add”, #redistribute有多个, 因此可以增删改查。 “params”: { “tag”: 200, “type”: “static” } }

删除消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.redistribute”, #使用bgp.redistribute来标识对重分布的操作 “action”: “del”, #redistribute有多个, 因此可以增删改查。 “params”: [ 200 #以redistribute中tag值为关键字进行删除。 ] }

该配置在quagga进程中,内部配置参考如下

redistribute static route-map redistribute-map-tag route-map redistribute-map-tag permit 1 match tag 200

community

community,可选的传递属性,用于简化路由策略的执行(未完成)

字段 类型 含义
name string 社团名称, 唯一标识,不能进行修改
type string community属性类型:standard/expanded
desc string 用户对该community的描述
value array 内容,进行覆盖更新

支持add/set/del/get方法,add消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.community”, #使用bgp.community来标识对community的操作 “action”: “add”, #community有多个, 因此可以增删改查。 “params”: { “name”: “comm1”, “type”: “standard”, #standard/expanded “desc”: “dec”, “value”: [“permit 100:10”, “permit 120:10”] } }

删除消息示例

{“rid”: 12345, “timestamp”: 1234, “object”: “bgp.community”, #使用bgp.community来标识对community的操作 “action”: “del”, #community有多个, 因此可以增删改查。 “params”: [ “comm1”,“comm2” #以community名称为关键字进行删除。 ] }

该配置在quagga进程中,内部配置参考如下

ip community-list standard comm1 permit 100:10 ip community-list standard comm1 permit 120:10