searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

gobgp在vrf场景下的使用介绍

2023-07-25 11:42:56
303
0

gobgp 是使用golang开发的bgp协议,支持grpc接口,和quagga/frr不同的是,此工具仅支持bgp协议,不支持ospf、rib等其他路由协议。

Gobgp的主要特点是:

    1. 支持BGP协议的IPv4和IPv6路由管理,可以应对各种网络拓扑结构和路由策略。
    2. 提供了丰富的路由管理功能,包括路由过滤、路由聚合、路由映射等,可以满足各种复杂的路由管理需求。
    3. 支持BGP多路径功能,可以同时维护多条相同的路由,提高网络的容错性和负载均衡能力。
    4. 支持BGP路由服务器功能,可以实现高效的路由分发和路由汇聚,提高网络的可扩展性和灵活性。
    5. 提供了丰富的命令行工具和grpc接口,方便用户进行路由管理和监控。

Gobgp的设计和实现都非常精简,代码量较少,易于维护和扩展。同时,Gobgp采用了模块化的设计,可以方便地添加新的功能模块,满足不同场景的需求。

通过两个运行gobgp的docker, 介绍一下gobgp的具有vrf的使用场景。拓扑如下图所示:

制作docker

通过https://github.com/osrg/gobgp/releases,或者下载源码编译的方式,将gobgp、gobgpd文件导入ubuntu容器,用来充当环境中的gobgp容器。

配置文件

gobgp配置可以通过配置文件或者grpc api的方式完成配置。

配置文件支持toml、json、yaml、hcl等多种配置文件格式, toml为默认的配置文件格式,项目给出的简单的配置文件实例如下:

[global.config]
as = 64512
router-id = "192.168.255.1"

[[neighbors]]
[neighbors.config]
neighbor-address = "10.0.255.1"
peer-as = 65001

[[neighbors]]
[neighbors.config]
neighbor-address = "10.0.255.2"
peer-as = 65002

gobgp是该项目的grpc api客户端,以cli的方式完成配置, 命令手册见https://github.com/osrg/gobgp/blob/master/docs/sources/cli-command-syntax.md

启动gobgp

此实例,所有配置全部采用grpc配置的方式,启动时不带任何配置文件。后续配置global、vrf、neighbor、rib等配置,演示gobgp简单使用场景

# docker run -it --privileged --name bgp1 gobgp:v0.2
# ./gobgpd
{"level":"info","msg":"gobgpd started","time":"2023-03-28T02:48:56Z"}

# docker run -it --privileged --name bgp2 gobgp:v0.2
# ./gobgpd
{"level":"info","msg":"gobgpd started","time":"2023-03-28T02:48:56Z"}

global配置

分给配置bgp1、bgp2global参数。

docker bgp1
# ./gobgp global as 1000 router-id 172.17.0.2

docker bgp2
# ./gobgp global as 2000 router-id 172.17.0.3

VRF配置/查询

root@e839926089f7:~/bfswitch/bin# ./gobgp vrf add vrf1 id 100  rd 100:1 rt  both 100:1 200:1
root@e839926089f7:~/bfswitch/bin# ./gobgp vrf
  Name                 RD                   Import RT            Export RT            ID
  vrf1                 100:1                100:1, 200:1         100:1, 200:1         100

root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf add vrf1 id 100  rd 200:1 rt  both 100:1 200:1
root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf
  Name                 RD                   Import RT            Export RT            ID
  vrf1                 200:1                100:1, 200:1         100:1, 200:1         100

邻居配置/查询

分别给bgp1、bgp2添加带有vrf属性的neighbor

root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor add 172.17.0.3 as 2000 vrf vrf1
root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor add 172.17.0.2 as 1000 vrf vrf1


root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor
Peer         AS  Up/Down State       |#Received  Accepted
172.17.0.3 2000 00:00:03 Establ      |        0         0

root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor
Peer         AS  Up/Down State       |#Received  Accepted
172.17.0.2 1000 00:00:11 Establ      |        0

路由表添加/查询

rib 添加

root@e839926089f7:~/bfswitch/bin# ./gobgp vrf vrf1 rib -a ipv4 add 10.1.1.1/32 origin egp aspath "100, 200"
root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf vrf1 rib -a ipv4 add 10.1.1.2/32 origin egp aspath "100, 200"

rib查询

root@e839926089f7:~/bfswitch/bin# ./gobgp vrf vrf1 rib
   Network              Next Hop             AS_PATH              Age        Attrs
*  10.1.1.1/32          0.0.0.0              100 200              00:01:30   [{Origin: e}]
*  10.1.1.2/32          172.17.0.3           2000 100 200         00:00:19   [{Origin: e}]

root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf vrf1 rib
   Network              Next Hop             AS_PATH              Age        Attrs
*  10.1.1.1/32          172.17.0.2           1000 100 200         00:02:27   [{Origin: e}]
*  10.1.1.2/32          0.0.0.0              100 200              00:01:16   [{Origin: e}]

adj表查询

root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor 172.17.0.3 adj-in
   ID  Network              Next Hop             AS_PATH              Age        Attrs
   0   10.1.1.2/32          172.17.0.3           2000 100 200         00:02:10   [{Origin: e}]
root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor 172.17.0.3 adj-out
   ID  Network              Next Hop             AS_PATH              Attrs
   1   10.1.1.1/32          172.17.0.2           1000 100 200         [{Origin: e}]

root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor 172.17.0.2 adj-in
   ID  Network              Next Hop             AS_PATH              Age        Attrs
   0   10.1.1.1/32          172.17.0.2           1000 100 200         00:03:40   [{Origin: e}]
root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor 172.17.0.2 adj-out
   ID  Network              Next Hop             AS_PATH              Attrs
   1   10.1.1.2/32          172.17.0.3           2000 100 200         [{Origin: e}]

0条评论
0 / 1000
l****n
3文章数
0粉丝数
l****n
3 文章 | 0 粉丝
l****n
3文章数
0粉丝数
l****n
3 文章 | 0 粉丝
原创

gobgp在vrf场景下的使用介绍

2023-07-25 11:42:56
303
0

gobgp 是使用golang开发的bgp协议,支持grpc接口,和quagga/frr不同的是,此工具仅支持bgp协议,不支持ospf、rib等其他路由协议。

Gobgp的主要特点是:

    1. 支持BGP协议的IPv4和IPv6路由管理,可以应对各种网络拓扑结构和路由策略。
    2. 提供了丰富的路由管理功能,包括路由过滤、路由聚合、路由映射等,可以满足各种复杂的路由管理需求。
    3. 支持BGP多路径功能,可以同时维护多条相同的路由,提高网络的容错性和负载均衡能力。
    4. 支持BGP路由服务器功能,可以实现高效的路由分发和路由汇聚,提高网络的可扩展性和灵活性。
    5. 提供了丰富的命令行工具和grpc接口,方便用户进行路由管理和监控。

Gobgp的设计和实现都非常精简,代码量较少,易于维护和扩展。同时,Gobgp采用了模块化的设计,可以方便地添加新的功能模块,满足不同场景的需求。

通过两个运行gobgp的docker, 介绍一下gobgp的具有vrf的使用场景。拓扑如下图所示:

制作docker

通过https://github.com/osrg/gobgp/releases,或者下载源码编译的方式,将gobgp、gobgpd文件导入ubuntu容器,用来充当环境中的gobgp容器。

配置文件

gobgp配置可以通过配置文件或者grpc api的方式完成配置。

配置文件支持toml、json、yaml、hcl等多种配置文件格式, toml为默认的配置文件格式,项目给出的简单的配置文件实例如下:

[global.config]
as = 64512
router-id = "192.168.255.1"

[[neighbors]]
[neighbors.config]
neighbor-address = "10.0.255.1"
peer-as = 65001

[[neighbors]]
[neighbors.config]
neighbor-address = "10.0.255.2"
peer-as = 65002

gobgp是该项目的grpc api客户端,以cli的方式完成配置, 命令手册见https://github.com/osrg/gobgp/blob/master/docs/sources/cli-command-syntax.md

启动gobgp

此实例,所有配置全部采用grpc配置的方式,启动时不带任何配置文件。后续配置global、vrf、neighbor、rib等配置,演示gobgp简单使用场景

# docker run -it --privileged --name bgp1 gobgp:v0.2
# ./gobgpd
{"level":"info","msg":"gobgpd started","time":"2023-03-28T02:48:56Z"}

# docker run -it --privileged --name bgp2 gobgp:v0.2
# ./gobgpd
{"level":"info","msg":"gobgpd started","time":"2023-03-28T02:48:56Z"}

global配置

分给配置bgp1、bgp2global参数。

docker bgp1
# ./gobgp global as 1000 router-id 172.17.0.2

docker bgp2
# ./gobgp global as 2000 router-id 172.17.0.3

VRF配置/查询

root@e839926089f7:~/bfswitch/bin# ./gobgp vrf add vrf1 id 100  rd 100:1 rt  both 100:1 200:1
root@e839926089f7:~/bfswitch/bin# ./gobgp vrf
  Name                 RD                   Import RT            Export RT            ID
  vrf1                 100:1                100:1, 200:1         100:1, 200:1         100

root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf add vrf1 id 100  rd 200:1 rt  both 100:1 200:1
root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf
  Name                 RD                   Import RT            Export RT            ID
  vrf1                 200:1                100:1, 200:1         100:1, 200:1         100

邻居配置/查询

分别给bgp1、bgp2添加带有vrf属性的neighbor

root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor add 172.17.0.3 as 2000 vrf vrf1
root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor add 172.17.0.2 as 1000 vrf vrf1


root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor
Peer         AS  Up/Down State       |#Received  Accepted
172.17.0.3 2000 00:00:03 Establ      |        0         0

root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor
Peer         AS  Up/Down State       |#Received  Accepted
172.17.0.2 1000 00:00:11 Establ      |        0

路由表添加/查询

rib 添加

root@e839926089f7:~/bfswitch/bin# ./gobgp vrf vrf1 rib -a ipv4 add 10.1.1.1/32 origin egp aspath "100, 200"
root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf vrf1 rib -a ipv4 add 10.1.1.2/32 origin egp aspath "100, 200"

rib查询

root@e839926089f7:~/bfswitch/bin# ./gobgp vrf vrf1 rib
   Network              Next Hop             AS_PATH              Age        Attrs
*  10.1.1.1/32          0.0.0.0              100 200              00:01:30   [{Origin: e}]
*  10.1.1.2/32          172.17.0.3           2000 100 200         00:00:19   [{Origin: e}]

root@378d166ca87a:~/bfswitch/bin# ./gobgp vrf vrf1 rib
   Network              Next Hop             AS_PATH              Age        Attrs
*  10.1.1.1/32          172.17.0.2           1000 100 200         00:02:27   [{Origin: e}]
*  10.1.1.2/32          0.0.0.0              100 200              00:01:16   [{Origin: e}]

adj表查询

root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor 172.17.0.3 adj-in
   ID  Network              Next Hop             AS_PATH              Age        Attrs
   0   10.1.1.2/32          172.17.0.3           2000 100 200         00:02:10   [{Origin: e}]
root@e839926089f7:~/bfswitch/bin# ./gobgp neighbor 172.17.0.3 adj-out
   ID  Network              Next Hop             AS_PATH              Attrs
   1   10.1.1.1/32          172.17.0.2           1000 100 200         [{Origin: e}]

root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor 172.17.0.2 adj-in
   ID  Network              Next Hop             AS_PATH              Age        Attrs
   0   10.1.1.1/32          172.17.0.2           1000 100 200         00:03:40   [{Origin: e}]
root@378d166ca87a:~/bfswitch/bin# ./gobgp neighbor 172.17.0.2 adj-out
   ID  Network              Next Hop             AS_PATH              Attrs
   1   10.1.1.2/32          172.17.0.3           2000 100 200         [{Origin: e}]

文章来自个人专栏
learning
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0