第10回 BGP

#BGP(Border Gateway Protocol)

ルーティングプロトコルは、**AS内部で使用するIGP(Interior Gateway Protocol)**と、**AS外部で使用するEGP(Exterior Gateway Protocol)**の大きく2つに分かれます。
これまでの記事で紹介してきた[RIP、EIGRP](https://qiita.com/infra-blog/items/66d0fd612cb05da9dfe6)、[OSPF](https://qiita.com/infra-blog/items/de12629831098af31472)、は、**AS内部**で経路情報を交換する**IGP**です。
今回紹介するBGPは、**AS間**で経路情報を交換する**EGP**に該当します。
またBGPは**※パスベクタ型ルーティングプロトコル**をもちOSPFが狭い範囲で使用されるプロトコルに対し、BGPは**広い範囲のネットワーク帯**をつなぐ際に使用されるプロトコルの役割を持ちます。
そして**複数のBGPをつないだネットワークの集まりをインターネット**といわれています。

※**パスベクタ型ルーティングプロトコル**
AS内のルート情報に付加された**パスアトリビュート**を送信して最適経路を決定。
デフォルトでは、宛先ネットワークまでに経由するASが少ない経路をベストパスとして使用。

**パスアトリビュートに関しての詳細は以下参照**
 [ネットワークエンジニアとしてBGP - Path Attribute]
(https://www.infraexpert.com/study/bgpz05.html)

##eBGP(外部BGP)作成


#### 構築ネットワーク図
![eBGP.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/1d5dad6e-8217-161d-4ce2-0f8b82722b57.png)

```ruby:Router_8設定
router bgp 10
※BGPのピア設定(異なるASなのでeBGP)
 neighbor 10.0.0.2 remote-as 11
 network 10.0.0.0 mask 255.255.255.0
 network 10.10.10.0 mask 255.255.255.0
※AS番号は1~64511まではグローバルAS番号、64512~65535までをプライベートAS番号という
　IPアドレスと同じくプライベートAS番号は各自で自由に設定できるが、グローバルAS番号は
　ICANNなどで管理しており自由に割り振ることはできない。
　今回はあくまで検証用なのでグローバルAS番号を使用。
```

```ruby:Router_9設定

router bgp 11
※BGPのピア設定(異なるASなのでeBGP)
neighbor 10.0.0.1 remote-as 10
network 10.0.0.0 mask 255.255.255.0
network 11.11.11.0 mask 255.255.255.0
```

## BGPのピア接続

BGPをピア接続する時、ネイバーアドレスに**loopbackアドレス**を指定します。
**(理由)**
ポートのケーブル断などの物理I/Fがダウンが起きた時、物理インターフェースでなく**論理インターフェース**にすることでケーブル抜き間違えなど人為的事故による通信断などの危険を防ぐことができる。

##iBGP(内部BGP)ピアグループ作成

**※パケットトレーサーではiBGPが構築できないのでCisco CMLを使用してコンフィグ作成。**
####構築ネットワーク図
![iBGP.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/9f210ce4-abd8-d942-0c19-d89886cffb33.png)



```ruby:iosv-1　iBGP設定
router bgp 300
 bgp log-neighbor-changes
 network 3.3.3.3 mask 255.255.255.255
 neighbor TEST01 peer-group
 neighbor TEST01 remote-as 300
 neighbor TEST01 update-source Loopback0
 neighbor TEST01 next-hop-self
 neighbor 2.2.2.2 peer-group TEST01

ip route 2.2.2.2 255.255.255.255 10.1.1.3
```

```ruby:iosv-8　iBGP設定

router bgp 300
 bgp log-neighbor-changes
 network 2.2.2.2 mask 255.255.255.255
 neighbor TEST01 peer-group
 neighbor TEST01 remote-as 300
 neighbor TEST01 update-source Loopback0
 neighbor TEST01 next-hop-self
 neighbor 1.1.1.1 peer-group TEST01
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 3.3.3.3 peer-group TEST01
 neighbor 3.3.3.3 update-source Loopback0

ip route 1.1.1.1 255.255.255.255 10.10.10.1
ip route 3.3.3.3 255.255.255.255 10.1.1.4
```

```ruby:iBGP表示
#show ip bgp summary
BGP router identifier 2.2.2.2, local AS number 30
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
1.1.1.1         4          300      25      26        8    0    0 00:18:01        1
3.3.3.3         4          300      30      30        8    0    0 00:23:19        1
※両隣のルーターとiBGPが確立しているので2つのネイバーが表示。

Router#show ip bgp
BGP table version is 8, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
              t secondary path, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 r>i  1.1.1.1/32       1.1.1.1                  0    100      0 i
 *>   2.2.2.2/32       0.0.0.0                  0         32768 i
 r>i  3.3.3.3/32       3.3.3.3                  0    100      0 i
```

```ruby:iosv-5　iBGP設定
router bgp 300
 bgp log-neighbor-changes
 network 1.1.1.1 mask 255.255.255.255
 neighbor TEST01 peer-group
 neighbor TEST01 remote-as 300
 neighbor TEST01 update-source Loopback0
 neighbor TEST01 next-hop-self
 neighbor 2.2.2.2 peer-group TEST01

ip route 2.2.2.2 255.255.255.255 10.10.10.2
```

##eBGPとiBGPの混合作成
###構築ネットワーク図
![BGP複合2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/16df5b66-824b-4673-4ac1-cfa6c503a237.png)

```ruby:iosv-6　iBGP設定
router bgp 300
 bgp log-neighbor-changes
 network 1.1.1.1 mask 255.255.255.255
 neighbor 2.2.2.2 remote-as 300 (iBGP)
 neighbor 2.2.2.2 update-source Loopback0

ip route 2.2.2.2 255.255.255.255 10.10.10.2
```

```ruby:iosv-7　iBGPとeBGP設定
router bgp 300
 bgp log-neighbor-changes
 network 2.2.2.2 mask 255.255.255.255
 network 10.0.0.0 mask 255.255.255.0
 neighbor 1.1.1.1 remote-as 300 (iBGP)
 neighbor 1.1.1.1 update-source Loopback0
 neighbor 10.0.0.4 remote-as 110 (eBGP)

ip route 1.1.1.1 255.255.255.255 10.10.10.1
```

```ruby:iosv-4　eBGP設定
router bgp 110
 bgp log-neighbor-changes
 network 10.0.0.0 mask 255.255.255.0
 network 10.10.10.0 mask 255.255.255.0
 neighbor 10.0.0.1 remote-as 300 (eBGP)
```

##show ip bgpの内容
```ruby:iosv_6
     Network          Next Hop            Metric LocPrf Weight Path
 *>   1.1.1.1/32       0.0.0.0                  0         32768 i
 r>i  2.2.2.2/32       2.2.2.2                  0    100      0 i
 *>i  10.0.0.0/24      2.2.2.2                  0    100      0 i
 r>i  10.10.10.0/24    10.0.0.4                 0    100      0 110 i
※ r>i はiBGP
```

```ruby:iosv_7
     Network          Next Hop            Metric LocPrf Weight Path
 r>i  1.1.1.1/32       1.1.1.1                  0    100      0 i
 *>   2.2.2.2/32       0.0.0.0                  0         32768 i
 *    10.0.0.0/24      10.0.0.4                 0             0 110 i
 *>                    0.0.0.0                  0         32768 i
 r>   10.10.10.0/24    10.0.0.4                 0             0 110 i
```

```ruby:iosv_4
     Network          Next Hop            Metric LocPrf Weight Path
 *>   1.1.1.1/32       10.0.0.1                               0 300 i
 *>   2.2.2.2/32       10.0.0.1                 0             0 300 i
 *    10.0.0.0/24      10.0.0.1                 0             0 300 i
 *>                    0.0.0.0                  0         32768 i
 *>   10.10.10.0/24    0.0.0.0                  0         32768 i
```
## BGPのベストパス
補足としてBGPは以下の**ベストパス**に沿って経路が決まります
*この表は**シスコ**を基準にしていますので、機器によっては優先度は変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/80993525-41ad-47a4-9d4e-d2390e9b1e64.png)

## 参考
 [ネットワークエンジニアとしてBGP - Peer Group]
(https://www.infraexpert.com/study/bgpz18.html)

[【図解】iBGPとeBGPの違い]
(https://milestone-of-se.nesuke.com/nw-advanced/bgp/nexthop-self-ibgp-ebgp/)

[北館テック.com　Cisco Packet Tracer でBGPにトライ]
(https://kitakantech.com/cisco-packet-tracer-bgp/)

[ネットワークのおべんきょしませんか？　BGPピア]
(https://www.n-study.com/bgp_2/)