bgp always-compare-medとbgp bestpath as-path ignore

最適経路の際に参照するBGPパスアトリビュートの優先順位はベンダにより多少差がありますが、自分の知る限り全てのベンダがMEDより先にAS-Pathにより評価しています。

## AS_PATHとMED
### AS_PATH
同一経路を複数ネイバーから学習した場合、最短のAS_PATHを持つパスが優先されます。あくまで**経由したAS_PATHが最短**なので必ずしもホップ数が最短というわけではないです。
AS_PATHはeBGPネイバーにルートを公告する際に付与されるので、例えば自AS内で生成された経路のAS_PATHは空になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3768522/1f872c95-1f76-f884-f50a-e7265517e13b.png)


例えば上記のようなネットワークの場合、AS100のR1から広告された100.0.0.0/24の経路情報はAS100内の他ルータはAS_の経由数を0で学習し、AS300は100.0.0.0/24宛てのルートをホップ数が多い直接AS100に向かうルートを最適経路としてルーティングテーブルに登録します。


### MED
**同じAS**から同一経路を複数ネイバーから学習した場合、最小のMED値が付与された経路情報を最適経路としてルーティングテーブルに載せます。MED値が付与されていない経路の取り扱いはベンダにより差があるみたいですが、cisco機器(IOS)では0として扱います。
異なるASから同一経路を学習した場合はMEDでの評価をスキップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3768522/cdc163b2-afe6-cf78-2f5e-9b8ac4ab8708.png)
上記ではAS30は100.0.0.0/24をMED50とMED100で学習していますが、異なるASから学習しているのでMEDでの評価をスキップします。


## 今回検証で使用したネットワーク
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3768522/c1b9245e-8610-dac4-311b-5b2add21f712.png)

## bgp always-compare-med
通常異なるASから同一経路を学習した場合はMEDでの評価をスキップしますが、上記コマンドを入力することで
異なるAS間からの学習であってもMEDでの評価を行います。

↓コマンド入力前　MEDの評価を行わないため、先に学習した方の経路情報(MEDが高い方のルート)をベストパスに選出している
~~~
R4#sh ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 44
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     1
  Refresh Epoch 3
  65003 65001
    172.16.4.3 from 172.16.4.3 (33.33.33.33)
      Origin incomplete, metric 50, localpref 100, valid, external
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 9
  65002 65001
    172.16.3.2 from 172.16.3.2 (22.22.22.22)
      Origin incomplete, metric 100, localpref 100, valid, external, best
      rx pathid: 0, tx pathid: 0x0
~~~

↓コマンド入力後　MEDが低い方の経路がベストパスに選出されている
~~~
R4#sh ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 48
Paths: (2 available, best #1, table default)
  Advertised to update-groups:
     1
  Refresh Epoch 4
  65003 65001
    172.16.4.3 from 172.16.4.3 (33.33.33.33)
      Origin incomplete, metric 50, localpref 100, valid, external, best
      rx pathid: 0, tx pathid: 0x0
  Refresh Epoch 10
  65002 65001
    172.16.3.2 from 172.16.3.2 (22.22.22.22)
      Origin incomplete, metric 100, localpref 100, valid, external
      rx pathid: 0, tx pathid: 0
R4#
~~~

## bgp as-path ignore
上記コマンドによりAS_PATHによる評価をスキップできます。
まずはR3(AS65003)でAS-Path prependを付与します。

↓AS-Pathの経由数が少ないR2(AS65002)から学習したルートをベストパスに選出している
~~~
R4#sh ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 60
Paths: (2 available, best #2, table default)
  Advertised to update-groups:
     1
  Refresh Epoch 5
  65003 65003 65001
    172.16.4.3 from 172.16.4.3 (33.33.33.33)
      Origin incomplete, metric 50, localpref 100, valid, external
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 11
  65002 65001
    172.16.3.2 from 172.16.3.2 (22.22.22.22)
      Origin incomplete, metric 100, localpref 100, valid, external, best
      rx pathid: 0, tx pathid: 0x0
R4#
~~~

bgp as-path ignoreを設定し、AS_PATHによる評価をスキップします。
↓AS_PATHによる評価をスキップしMEDによる評価を行い、R3から学習したルートをベストパスに選出している
(bgp always-compare-medが有効なため、異なるASから学習した経路情報をMEDで評価している)
~~~
R4#sh ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 19
Paths: (2 available, best #1, table default)
  Advertised to update-groups:
     1
  Refresh Epoch 8
  65003 65003 65001
    172.16.4.3 from 172.16.4.3 (172.16.4.3)
      Origin incomplete, metric 50, localpref 100, valid, external, best
      rx pathid: 0, tx pathid: 0x0
      Updated on Sep 13 2024 08:30:46 UTC
  Refresh Epoch 6
  65002 65001
    172.16.3.2 from 172.16.3.2 (172.16.3.2)
      Origin incomplete, metric 100, localpref 100, valid, external
      rx pathid: 0, tx pathid: 0
      Updated on Sep 13 2024 08:30:46 UTC
R4#