<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          GoBGP 原理與實踐

          共 17366字,需瀏覽 35分鐘

           ·

          2022-04-12 23:55


          GoBGP 是使用 Go 語言開發(fā)的,運行在 Linux 系統(tǒng)上的開源工具,可以提供 BGP 協(xié)議的控制平面功能。與 Quagga/FRRouting 相比,GoBGP 的性能更好,收斂時間更短,可以適用于更大規(guī)模的網(wǎng)絡(luò),比如充當(dāng) IXP 路由器。可以使用 Python、C++ 等多種語言,通過 gRPC API 對 GoBGP 進(jìn)行配置,當(dāng)然也支持 CLI。GoBGP 還支持 OpenConfig,其 YANG 模型符合 draft-ietf-idr-bgp-model-03[1]。因為 GoBGP 可以很方便地人工干涉路由,參與感更強(qiáng),是一個很好的實驗工具。本文將介紹 gobgp 的主要功能與實踐。

          背景介紹

          安裝與組成

          GoBGP 的安裝非常簡單,從 https://github.com/osrg/gobgp/releases 下載 tar.gz 文件,解壓即可。此處選擇的是 v2.27.0。

          $?tar?-xzf?gobgp_2.27.0_linux_amd64.tar.gz
          • gobgpd
            • Gobgp 的 daemon 程序,完整的實現(xiàn)了 BGP 協(xié)議
            • 可以通過 gRPC API 與 gobgpd 交互
            • 也可以通過配置文件來配置 bgp
          • gobgp
            • Full-featured CLI
            • 可以查看 BGP 相關(guān)信息,也可以配置 BGP
          • 配置文件:支持多種格式 toml/yaml/json 等等

          支持特性

          • Full-featured CLI
          • Multiprotocol Support
            • IPv4/Pv6
            • Labeled IPv4/IPv6
            • Labeled IPv4/IPv6
            • EVPN
            • Flowspec IPv4/IPv6/L2
          • Flexible Policy
          • Graceful Restart
            • Both restarting/helper speak role
          • Route Reflector
          • Route Server
          • MRT Dumping
          • BMP
          • RPKI Validation
          • FIB manipulation
          • gRPC API
          • Standard configuration format

          性能測試

          與 Quagga/FRRouting 相比,GoBGP 的性能更好,收斂時間更短,可以適用于更大規(guī)模的網(wǎng)絡(luò),比如充當(dāng) IXP 路由器。更多關(guān)于 BGP 的性能測試,可以參考 Comparing Open Source BGP stacks with internet routes[2]

          與 Quagga/Zebra 等集成

          GoBGP 僅支持 BGP 這一種路由協(xié)議,但是它可以和 Zebra 集成,通過 API 的方式與 Quagga/FRR 協(xié)同工作,以支持多種路由協(xié)議。

          GoBGP 可以集成到 Quagga/Zebra 體系中:

          使用 GoBGP

          Basic operation

          我們可以啟動 gobgpd 作為一個 bgp server,和交換機(jī)建立 BGP 連接。

          此處有網(wǎng)絡(luò)拓?fù)鋱D

          比如針對

          [global.config]
          as = 1002
          router-id = "172.25.0.136"

          [[neighbors]]
          [neighbors.config]
          peer-as = 1002
          neighbor-address = "172.25.0.129"
          auth-password: "xxxxx"

          啟動 gobgpd:

          /?#?./gobgpd?-t?yaml?-f?gobgpd.yaml
          {"level":"info","msg":"gobgpd?started","time":"2022-03-03T07:28:56Z"}
          {"Topic":"Config","level":"info","msg":"Finished?reading?the?config?file","time":"2022-03-03T07:28:56Z"}
          {"level":"info","msg":"Peer?172.25.0.129?is?added","time":"2022-03-03T07:28:56Z"}
          {"Topic":"Peer","level":"info","msg":"Add?a?peer?configuration?for:172.25.0.129","time":"2022-03-03T07:28:56Z"}
          {"Key":"172.25.0.129","State":"BGP_FSM_OPENCONFIRM","Topic":"Peer","level":"info","msg":"Peer?Up","time":"2022-03-03T07:29:01Z"}

          通過 gobgp 查看 peer 信息,這里 State 的 Establ 才表示連接已經(jīng)建立,如果 State 是 Active 則需要查看交換機(jī)配置是否正確。

          /?#?./gobgp?neighbor
          Peer???????????AS??Up/Down?State???????|#Received??Accepted
          172.25.0.129?1002?00:01:29?Establ??????|????????8?????????8
          /?#?./gobgp?neighbor?172.25.0.129
          BGP?neighbor?is?172.25.0.129,?remote?AS?1002
          ??BGP?version?4,?remote?router?ID?172.25.100.4
          ??BGP?state?=?ESTABLISHED,?up?for?00:01:34
          ??BGP?OutQ?=?0,?Flops?=?0
          ??Hold?time?is?90,?keepalive?interval?is?30?seconds
          ??Configured?hold?time?is?90,?keepalive?interval?is?30?seconds

          ??Neighbor?capabilities:
          ????multiprotocol:
          ????????ipv4-unicast:?advertised?and?received
          ????route-refresh:?advertised?and?received
          ????extended-nexthop:?advertised
          ????????Local:??nlri:?ipv4-unicast,?nexthop:?ipv6
          ????4-octet-as:?advertised?and?received
          ??Message?statistics:
          ?????????????????????????Sent???????Rcvd
          ????Opens:??????????????????1??????????1
          ????Notifications:??????????0??????????0
          ????Updates:????????????????0??????????7
          ????Keepalives:?????????????4??????????4
          ????Route?Refresh:??????????0??????????0
          ????Discarded:??????????????0??????????0
          ????Total:??????????????????5?????????12
          ??Route?statistics:
          ????Advertised:?????????????0
          ????Received:???????????????8
          ????Accepted:???????????????8

          查看 global table

          /?#?./gobgp?global?rib
          ???Network??????????????Next?Hop?????????????AS_PATH??????????????Age????????Attrs
          *>?10.0.0.0/24??????????172.25.0.129?????????801?45090?45090??????00:04:16???[{Origin:??}?{LocalPref:?100}]
          *>?10.0.2.0/24??????????172.25.0.129?????????801?45090?45090??????00:04:16???[{Origin:??}?{LocalPref:?100}]
          *>?172.25.0.0/25????????172.25.0.129?????????801?1001?????????????00:04:16???[{Origin:?i}?{LocalPref:?100}]
          *>?172.25.0.128/25??????172.25.0.129??????????????????????????????00:04:16???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]
          *>?172.25.100.1/32??????172.25.0.129?????????801??????????????????00:04:16???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]
          *>?172.25.100.2/32??????172.25.0.129?????????801??????????????????00:04:16???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]
          *>?172.25.100.3/32??????172.25.0.129?????????801?1001?????????????00:04:16???[{Origin:?i}?{LocalPref:?100}]
          *>?172.25.100.4/32??????172.25.0.129??????????????????????????????00:04:16???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]

          查看 adjacent rib-in and rib-out

          /?#?./gobgp?neighbor?172.25.0.129?adj-in
          ???ID??Network??????????????Next?Hop?????????????AS_PATH??????????????Age????????Attrs
          ???0???10.0.0.0/24??????????172.25.0.129?????????801?45090?45090??????00:07:18???[{Origin:??}?{LocalPref:?100}]
          ???0???10.0.2.0/24??????????172.25.0.129?????????801?45090?45090??????00:07:18???[{Origin:??}?{LocalPref:?100}]
          ???0???172.25.0.0/25????????172.25.0.129?????????801?1001?????????????00:07:18???[{Origin:?i}?{LocalPref:?100}]
          ???0???172.25.0.128/25??????172.25.0.129??????????????????????????????00:07:18???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]
          ???0???172.25.100.1/32??????172.25.0.129?????????801??????????????????00:07:18???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]
          ???0???172.25.100.2/32??????172.25.0.129?????????801??????????????????00:07:18???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]
          ???0???172.25.100.3/32??????172.25.0.129?????????801?1001?????????????00:07:18???[{Origin:?i}?{LocalPref:?100}]
          ???0???172.25.100.4/32??????172.25.0.129??????????????????????????????00:07:18???[{Origin:?i}?{Med:?0}?{LocalPref:?100}]
          /?#?./gobgp?neighbor?172.25.0.129?adj-out
          Network?not?in?table

          可以通過以下命令 宣告路由

          gobgp?global?rib?-a?ipv4?add?192.168.1.0/24

          Route Reflector

          為保證 iBGP 對等體之間的連通性,需要在 IBGP 對等體之間建立全連接關(guān)系。隨著集群規(guī)模擴(kuò)大,F(xiàn)ull Mesh 模式效率將急劇降低,Route Reflection[3] 模式是一種成熟的替代方案。RR 方案下允許一個 BGP Speaker (也即是 Route Reflector)向其他 BGP Peer 廣播學(xué)習(xí)到的路由信息,大大減少了 BGP Peer 連接數(shù)量。

          對于 gobgpd,可以通過修改配置文件,添加 RouteReflector.RouteReflectorConfig 配置來支持 BGP Server 作為 Route Reflector。如下所示:

          • 節(jié)點 172.25.0.7 作為 RR 節(jié)點,與交換機(jī) 172.25.0.1 建立 bgp peer
          • 節(jié)點 172.25.0.6 作為 RR client 節(jié)點,與 RR 節(jié)點 172.25.0.7 建立 bgp peer
          • 節(jié)點 172.25.0.8 作為 RR client 節(jié)點,與 RR 節(jié)點 172.25.0.7 建立 bgp peer
          [global.config]
          as = 1001
          router-id = "172.25.0.7"

          [[neighbors]]
          [neighbors.config]
          neighbor-address = "172.25.0.1"
          peer-as = 1001
          auth-password = "xxxxxx"

          [[neighbors]]
          [neighbors.config]
          neighbor-address = "172.25.0.6"
          peer-as = 1001
          auth-password = "xxxxxx"

          [neighbors.route-reflector.config]
          route-reflector-client = true
          route-reflector-cluster-id = "172.25.0.137"

          [[neighbors]]
          [neighbors.config]
          neighbor-address = "172.25.0.8"
          peer-as = 1001
          auth-password = "xxxxxx"

          [neighbors.route-reflector.config]
          route-reflector-client = true
          route-reflector-cluster-id = "172.25.0.137"

          Route Server

          現(xiàn)網(wǎng)中存在一些場景,為了達(dá)到網(wǎng)絡(luò)流量互通的目的,通常需要通過 eBGP 方式進(jìn)行全連接。邊界設(shè)備之間的全連接,對于經(jīng)費消耗、設(shè)備性能要求都是比較高的,并且不利于網(wǎng)絡(luò)拓?fù)浜驮O(shè)備數(shù)量的擴(kuò)張。Route Server 類似于 IBGP 全連接使用路由反射器,是一臺(或多臺)用于進(jìn)行路由服務(wù)的設(shè)備,其主要的功能是,向各個客戶端(邊界設(shè)備)傳播路由,且向客戶端發(fā)布的路由不修改 AS_PATH、Nexthop、MED 等路徑屬性,從而減輕邊界路由器全連接的消耗。

          如下圖所示,一個 IX (Internet eXchange) 中,包含多個獨立的 SP (service provider),這些網(wǎng)絡(luò)想要實現(xiàn)流量互通。每個 SP 都有一個邊界路由器連接到公共的交換網(wǎng)絡(luò)。每個 SP 都有自己的 AS 號,BGP Router 的地址從 10.0.0.1 到 10.0.0.8。

          這種情況下,要求這 8 個 BGP Peer 建立全連接,和 iBGP 一樣,這種 full mesh 連接對于經(jīng)費消耗、設(shè)備性能要求都是比較高的,并且不利于網(wǎng)絡(luò)拓?fù)浜驮O(shè)備數(shù)量的擴(kuò)張。

          BGP Route Server 可以簡化 SP 的連接,如下所示:

          下圖展示了 route server 實現(xiàn)的透明路由傳播:

          更多關(guān)于 route server 的信息,可以參考 Route Server[4]

          對于 GoBGP 同樣支持 Route Server:

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

          [[neighbors]]
          [neighbors.config]
          neighbor-address = "10.0.255.1"
          peer-as = 65001
          auth-password = "hoge1"
          [neighbors.transport.config]
          passive-mode = true
          [neighbors.route-server.config]
          route-server-client = true

          [[neighbors]]
          [neighbors.config]
          neighbor-address = "10.0.255.2"
          peer-as = 65002
          auth-password = "hoge2"
          [neighbors.transport.config]
          passive-mode = true
          [neighbors.route-server.config]
          route-server-client = true

          BGP Policy

          Policy 是一種控制 BGP 路由如何插入到 RIB 或者廣播給 BGP Peer 的方法,分為兩個部分 ConditionAction。當(dāng) Policy 配置完成后,觸發(fā) Condition 條件后,會執(zhí)行 Action 操作來修改路由。

          • Condition 包括 prefixneighbor(source/destination of the route) 和 aspath
          • Action 包括 accept, reject, MED/aspath/community manipulation

          Policy Model

          Policy model 包括有 Import PolicyExport Policy

          • Import policy is invoked before best path calculation and pushing routes to RIB.
          • Export policy is invoked after that.

          可以通過以下命令查看 policy

          $?gobgp?global?policy?import
          $?gobgp?global?policy?export

          Route Server Policy Model

          對于 Route Server 模式,Import and Export policies 都是針對于一個 Peer 而言的:

          • The Import policy defines what routes will be imported into the master RIB.
          • The Export policy defines what routes will be exported from the master RIB.
          $?gobgp?neighbor??policy?import
          $?gobgp?neighbor??policy?export

          Policy Structure

          一個 Policy 包含多個 Statement,每個 Statement 都有自己的 Condtions 和 Actions

          Conditions 包括:

          • prefix
          • neighbor
          • aspath
          • aspath length
          • community
          • extended community
          • rpki validation result
          • route type (internal/external/local)
          • large community
          • afi-safi in

          Actions 包括:

          • accept or reject
          • add/replace/remove community or remove all communities
          • add/subtract or replace MED value
          • set next-hop (specific address/own local address/don’t modify)
          • set local-pref
          • prepend AS number in the AS_PATH attribute

          可以通過以下命令查看 Policy 配置

          $?gobgp?policy
          $?gobgp?policy?statement
          $?gobgp?policy?prefix
          $?gobgp?policy?neighbor
          $?gobgp?policy?as-path
          $?gobgp?policy?community
          $?gobgp?policy?ext-community
          $?gobgp?policy?large-community

          Policy Configuration

          Policy 配置比較復(fù)雜,以下是配置的步驟,具體可以參考 這里[5]

          1. define defined-sets
            1. define prefix-sets
            2. define neighbor-sets
          2. define bgp-defined-sets
            1. define community-sets
            2. define ext-community-sets
            3. define as-path-setList
            4. define large-community-sets
          3. define policy-definitions
          4. attach policies to global rib (or neighbor local rib when neighbor is route-server-client[6]).

          Graceful Restart

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

          [[neighbors]]
          [neighbors.config]
          neighbor-address = "10.0.255.1"
          peer-as = 65001
          [neighbors.graceful-restart.config]
          enabled = true

          BMP

          GoBGP 支持 BGP Monitoring Protocol (RFC 7854)[7] 對 BGP 會話的運行狀態(tài)進(jìn)行實時監(jiān)控,包括對等體關(guān)系的建立與關(guān)閉、路由信息等。

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

          [[bmp-servers]]
          [bmp-servers.config]
          address = "127.0.0.1"
          port=11019

          Dynamic Neighbors

          在 BGP 網(wǎng)絡(luò)中,當(dāng)多個對等體經(jīng)常發(fā)生變動時,如果采用靜態(tài)配置對等體的方式,則需頻繁地在本端進(jìn)行增加或刪除對等體的配置,維護(hù)工作量很大。此時可以配置 BGP 動態(tài)對等體功能,使 BGP 偵聽指定網(wǎng)段的 BGP 連接請求并動態(tài)建立 BGP 對等體,同時將這些對等體加入到同一個對等體組中。這樣當(dāng)對等體發(fā)生變動時,無需在本端進(jìn)行增加或刪除 BGP 對等體的配置,減少網(wǎng)絡(luò)維護(hù)的工作量。

          交換機(jī)都一般都支持配置 Dynamic Neighbors,比如 這里是華為交換機(jī)配置 Dynamic Neighbors 方法[8],對于 gobgp 同樣也支持 Dynamic Neighbors。

          如下所示,主要需要配置兩個部分:

          • 創(chuàng)建一個 peer group,描述這個 peer group 的基本信息
          • 配置 peer group 監(jiān)聽在 172.40.0.0/16 網(wǎng)段
          [global.config]
          as = 65001
          router-id = "172.40.1.2"

          [[peer-groups]]
          [peer-groups.config]
          peer-group-name = "sample-group"
          peer-as = 65002
          [[peer-groups.afi-safis]]
          [peer-groups.afi-safis.config]
          afi-safi-name = "ipv4-unicast"
          [[peer-groups.afi-safis]]
          [peer-groups.afi-safis.config]
          afi-safi-name = "ipv4-flowspec"

          [[dynamic-neighbors]]
          [dynamic-neighbors.config]
          prefix = "172.40.0.0/16"
          peer-group = "sample-group"

          Others

          在 GitHub 中還有很多其他關(guān)于 MRT/BMP/EVPN 等特性的說明,此處不再贅述,如有需要可以直接查看文檔。

          GoBGP 編程

          Basic Server

          參考 gobgp 庫 提供的文檔[9],我們可以實現(xiàn)一個簡單的 go bgp server,如下所示:

          package?main

          import?(
          ?"context"
          ?"time"

          ?"github.com/sirupsen/logrus"
          ?apb?"google.golang.org/protobuf/types/known/anypb"

          ?api?"github.com/osrg/gobgp/v3/api"
          ?"github.com/osrg/gobgp/v3/pkg/log"
          ?"github.com/osrg/gobgp/v3/pkg/server"
          )

          func?main()?{
          ?log?:=?logrus.New()

          ??//?創(chuàng)建?BGP?Server?實例
          ?s?:=?server.NewBgpServer(server.LoggerOption(&myLogger{logger:?log}))
          ?go?s.Serve()

          ?//?global?configuration
          ?if?err?:=?s.StartBgp(context.Background(),?&api.StartBgpRequest{
          ??Global:?&api.Global{
          ???Asn:?????????65003,
          ???RouterId:???"10.0.255.254",
          ???ListenPort:?-1,?//?gobgp?won't?listen?on?tcp:179
          ??},
          ?});?err?!=?nil?{
          ??log.Fatal(err)
          ?}

          ?//?monitor?the?change?of?the?peer?state
          ?if?err?:=?s.MonitorPeer(ctx,?&api.MonitorPeerRequest{},?func(p?*api.Peer)?{?log.Print(p)?});?err?!=?nil?{
          ??log.Fatal(err)
          ?}

          ?//?neighbor?configuration
          ?n?:=?&api.Peer{
          ??Conf:?&api.PeerConf{
          ???NeighborAddress:?"172.17.0.2",
          ???PeerAsn:??????????65002,
          ??},
          ?}

          ?if?err?:=?s.AddPeer(context.Background(),?&api.AddPeerRequest{
          ??Peer:?n,
          ?});?err?!=?nil?{
          ??log.Fatal(err)
          ?}

          ?//?add?routes
          ?nlri,?_?:=?apb.New(&api.IPAddressPrefix{
          ??Prefix:????"10.0.0.0",
          ??PrefixLen:?24,
          ?})

          ?a1,?_?:=?apb.New(&api.OriginAttribute{
          ??Origin:?0,
          ?})
          ?a2,?_?:=?apb.New(&api.NextHopAttribute{
          ??NextHop:?"10.0.0.1",
          ?})
          ?a3,?_?:=?apb.New(&api.AsPathAttribute{
          ??Segments:?[]*api.AsSegment{
          ???{
          ????Type:????2,
          ????Numbers:?[]uint32{6762,?39919,?65000,?35753,?65000},
          ???},
          ??},
          ?})
          ?attrs?:=?[]*apb.Any{a1,?a2,?a3}

          ?_,?err?:=?s.AddPath(context.Background(),?&api.AddPathRequest{
          ??Path:?&api.Path{
          ???Family:?&api.Family{Afi:?api.Family_AFI_IP,?Safi:?api.Family_SAFI_UNICAST},
          ???Nlri:???nlri,
          ???Pattrs:?attrs,
          ??},
          ?})
          ?if?err?!=?nil?{
          ??log.Fatal(err)
          ?}

          ?v6Family?:=?&api.Family{
          ??Afi:??api.Family_AFI_IP6,
          ??Safi:?api.Family_SAFI_UNICAST,
          ?}

          ?//?add?v6?route
          ?nlri,?_?=?apb.New(&api.IPAddressPrefix{
          ??PrefixLen:?64,
          ??Prefix:????"2001:db8:1::",
          ?})
          ?v6Attrs,?_?:=?apb.New(&api.MpReachNLRIAttribute{
          ??Family:???v6Family,
          ??NextHops:?[]string{"2001:db8::1"},
          ??Nlris:????[]*apb.Any{nlri},
          ?})

          ?c,?_?:=?apb.New(&api.CommunitiesAttribute{
          ??Communities:?[]uint32{100,?200},
          ?})

          ?_,?err?=?s.AddPath(context.Background(),?&api.AddPathRequest{
          ??Path:?&api.Path{
          ???Family:?v6Family,
          ???Nlri:???nlri,
          ???Pattrs:?[]*apb.Any{a1,?v6Attrs,?c},
          ??},
          ?})
          ?if?err?!=?nil?{
          ??log.Fatal(err)
          ?}

          ?s.ListPath(context.Background(),?&api.ListPathRequest{Family:?v6Family},?func(p?*api.Destination)?{
          ??log.Info(p)
          ?})

          ?//?do?something?useful?here?instead?of?exiting
          ?time.Sleep(time.Minute?*?3)
          }

          //?...

          可以看到,示例代碼相對比較簡單,主要使用了以下的 API:

          //?創(chuàng)建?BGP?Server?實例
          func?NewBgpServer(opt?...ServerOption)?*BgpServer

          //?啟動?BGP?Server
          func?(s?*BgpServer)?Serve()

          //?global?配置
          //?BGP?Server?的?AS?是?65003,RouterId?是?10.0.255.254
          api.Global{
          ??Asn:?????????65003,
          ??RouterId:???"10.0.255.254",
          ??ListenPort:?-1,?//?gobgp?won't?listen?on?tcp:179
          }

          //?根據(jù)傳入?global?配置,開啟?BGP?Server?的?BGP?協(xié)商
          func?(s?*BgpServer)?StartBgp(ctx?context.Context,?r?*api.StartBgpRequest)?error

          //?觀察?BGP?Peer?狀態(tài)變化
          func?(s?*BgpServer)?MonitorPeer(ctx?context.Context,?r?*api.MonitorPeerRequest,?fn?func(*api.Peer))?error

          //?Peer?信息
          api.Peer{
          ??Conf:?&api.PeerConf{
          ???NeighborAddress:?"172.17.0.2",
          ???PeerAsn:??????????65002,
          ??},
          ?}

          //?建立?BGP?Peer?連接
          func?(s?*BgpServer)?AddPeer(ctx?context.Context,?r?*api.AddPeerRequest)?error

          //?傳遞?BGP?路由信息
          func?(s?*BgpServer)?AddPath(ctx?context.Context,?r?*api.AddPathRequest)?(*api.AddPathResponse,?error)

          Route Reflector

          可以通過對 api.Peer 這個結(jié)構(gòu)進(jìn)行更詳細(xì)的配置,使得加入的 BGP Peer 是作為 RR client:

          n?:=?&api.Peer{
          ?Conf:?&api.PeerConf{
          ??NeighborAddress:?"172.25.0.6",
          ??PeerAsn:??????????1001,
          ?},
          ?RouteReflector:?&api.RouteReflector{
          ??RouteReflectorClient:?true,
          ??RouteReflectorClusterId:?"172.25.0.7",
          ?}
          }

          BMP

          這里列出了幾種常見的 BMP Message:

          type?BMPMessage?struct?{
          ?Header?????BMPHeader
          ?PeerHeader?BMPPeerHeader
          ?Body???????BMPBody
          }

          type?BMPRouteMonitoring?struct?{
          ?BGPUpdate????????*bgp.BGPMessage
          ?BGPUpdatePayload?[]byte
          }

          type?BMPPeerDownNotification?struct?{
          ?Reason??????????uint8
          ?BGPNotification?*bgp.BGPMessage
          ?Data????????????[]byte
          }

          type?BMPPeerUpNotification?struct?{
          ?LocalAddress????net.IP
          ?LocalPort???????uint16
          ?RemotePort??????uint16
          ?SentOpenMsg?????*bgp.BGPMessage
          ?ReceivedOpenMsg?*bgp.BGPMessage
          }

          //?...

          參考資料

          • GoBGP 配置[10]
          • GoBPG 命令行工具使用[11]
          • IETF: Internet Exchange BGP Route Server[12]
          • Tutorial: Using GoBGP as an IXP connecting router[13]
          • GoBGP library[14]
          • GoBGP slides[15]
          • Comparing Open Source BGP stacks with internet routes[16]
          • draft-ietf-idr-bgp-model-03[17]
          • bgp perf[18]
          • Route Server[19]
          • https://www.twblogs.net/a/5db3af42bd9eee310da061d0

          引用鏈接

          [1]

          draft-ietf-idr-bgp-model-03: https://datatracker.ietf.org/doc/html/draft-ietf-idr-bgp-model-03

          [2]

          Comparing Open Source BGP stacks with internet routes: https://elegantnetwork.github.io/posts/comparing-open-source-bgp-internet-routes

          [3]

          Route Reflection: https://datatracker.ietf.org/doc/html/rfc2796

          [4]

          Route Server: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/configuration/xe-3s/irg-xe-3s-book/irg-route-server.pdf

          [5]

          這里: https://github.com/osrg/gobgp/blob/master/docs/sources/policy.md#examples

          [6]

          route-server-client: https://github.com/osrg/gobgp/blob/master/docs/sources/route-server.md

          [7]

          BGP Monitoring Protocol (RFC 7854): https://tools.ietf.org/html/rfc7854

          [8]

          這里是華為交換機(jī)配置 Dynamic Neighbors 方法: https://support.huawei.com/enterprise/zh/doc/EDOC1100034251/f1ac6afd

          [9]

          提供的文檔: https://github.com/osrg/gobgp/blob/master/docs/sources/lib.md

          [10]

          GoBGP 配置: https://github.com/osrg/gobgp/blob/master/docs/sources/configuration.md

          [11]

          GoBPG 命令行工具使用: https://github.com/osrg/gobgp/blob/master/docs/sources/cli-command-syntax.md

          [12]

          IETF: Internet Exchange BGP Route Server: https://datatracker.ietf.org/doc/html/rfc7947

          [13]

          Tutorial: Using GoBGP as an IXP connecting router: http://www.slideshare.net/shusugimoto1986/tutorial-using-gobgp-as-an-ixp-connecting-router

          [14]

          GoBGP library: https://pkg.go.dev/github.com/keshonok/[email protected]

          [15]

          GoBGP slides: https://ripe71.ripe.net/presentations/135-RIPE71_GoBGP.pdf

          [16]

          Comparing Open Source BGP stacks with internet routes: https://elegantnetwork.github.io/posts/comparing-open-source-bgp-internet-routes/

          [17]

          draft-ietf-idr-bgp-model-03: https://datatracker.ietf.org/doc/html/draft-ietf-idr-bgp-model-03

          [18]

          bgp perf: https://github.com/osrg/bgperf

          [19]

          Route Server: https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/configuration/xe-3s/irg-xe-3s-book/irg-route-server.pdf


          原文鏈接:https://houmin.cc/posts/23fb5364/




          你可能還喜歡

          點擊下方圖片即可閱讀

          為 Kubernetes 集群啟用 Pod 安全策略

          云原生是一種信仰???

          關(guān)注公眾號

          后臺回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



          點擊?"閱讀原文"?獲取更好的閱讀體驗!


          發(fā)現(xiàn)朋友圈變“安靜”了嗎?

          瀏覽 211
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.成人黄色 | 欧美日韩中文在线观看 | 龙泽美曦土豪 酒店 | 丁香激情五月天 | 青娱乐凹凸视频 |