BGP<基本設定について>

BGP基本設定

  • 1、BGPルーティングプロセスの有効化
  • 2、ネイバーの設定
  • 3、BGPルートの生成


-BGPルーティングプロセスの有効化-

 

(config)#router bgp <AS>
(config-router)#

 

※BGPプロセスは1つしか有効化できません


-BGPネイバーの設定-

BGPではネイバーを手動で設定しなければいけません。

 

(config)#router bgp <AS>
(config-router)#neighbor <ip-address> remote-as <AS>

 

EBGPネイバー、IBGPネイバーはrouter bgpコマンドの<AS>とneighbor remote-asコマンドの<AS>によって決まります。

 

※AS番号が異なっていればEBGPネイバー、同じであればIBGPネイバーとなります。


-BGPルートの生成-

BGPネイバーを設定すれば、そのネイバーからルートを受信また、BGPルートをアドバタイズすることができます。

※EBGPネイバーだけがこのような動作が可能、IBGPはスプリットホライズンのルー ルにより動作が異なる。

 

自ASないのネットワークのルート情報をBGPルートとして生成するためには、次の3通りの方法があります。

・networkコマンド
・AS内のIGPからの再配送
・aggregate-addressコマンド

 

●ここでではnetworkコマンドについてだけ解説します

 

(config)#router bgp <AS>
(config-routr)#network <address> [mask <subnet-mask>]

 

networkコマンドにより指定したルート情報をBGPテーブルに載せてベストパスとします。クラスフルなネットワークアドレスの場合はmaskオプションは必要ありません


networkコマンドが機能するためには条件があります。

それは「networkコマンドで指定したルートと完全に一致するルートがルーティング

テーブルに存在していなければいけない」ということです。

 

※ルートの情報元はRIP,OSPF、EIGRP、STATICなどなんでも構いません

※「完全に一致」している必要があります!!!

 

 

-------------------------------------------------------------------------------------------------------------------- 

RIPやOSPFでもnetworkコマンドを使用しますが、BGPのnetworkコマンドとは全く意味が異なります。
IGPのnetworkコマンドは、ルーティングプロトコルを動作させるためのコマンドです。ですから、ルータに直接接続されているネットワークを指定します。
一方、BGPのネットワークコマンドは、BGPでアドバタイズしたいルート情報を指定するためのコマンドなので、ルータに直接接続されているネットワークアドレスを指定する必要はありません。

 ---------------------------------------------------------------------------------------------------------------------

 

 参考資料:Cisco CCNP ROUTEテキスト

 

 

BGP<BGPネイバーの状態>

BGPネイバーを確立して、ルート情報を交換することができるようになるまで次の6つの状態を遷移します。

 

・Idle

BGPプロセスの初期状態、ネイバーとのTCP接続のプロセスを開始してConnect状態へ移行する

 

・Connect

ネイバーとのTCP接続が完了するのを待っている状態。

TCP接続を正常に確立できれば、

BGP OPENメッセージを送信してOpenSent状態に移行する。

もし、TCP接続を確立できなければActive状態に移行する

 

・Active

ネイバーとのTCPプロセスを開始している状態。

TCP接続が正常に確立されればOPENメッセージを送信してOpenSent状態に移行する。

TCP接続が確立できなければ再びConnect状態に戻る。

ネイバーから予期しないIPアドレスTCP接続が行われるとActiveの状態のままとなる。

※Active状態にとどまってしまう場合は、設定ミスがほとんどなのでネイバーの設定を確認する。

 

・OpenSent

OPENメッセージをネイバーに送信しネイバーからのOPENメッセージを待っている状態。

OPENメッセージを受け取ると中身をチェックする。

エラーがあればNOTIFICATIONメッセージを送信しIdle状態に移行する。

エラーがなければKEEPALIVEメッセージを送信してホールドタイムをネゴシエーションする。

また、ネイバーのAS番号からIBGPネイバーかEBGPネイバーを決定し、OpenConfirm状態に移行する。

 

・OpenConfirm

KEEPALIVEもしくはNOTIFICATIONを待っている状態。

KEEPALIVEメッセージを受け取ればEstablished状態に移行する。

NOTIFICATIONメッセージを受け取ればIdle 状態に移行する。

 

・Established

BGPネイバーが完全に確立している状態。

Established状態でUPDATEメッセージを交換することができます。

KEEPALIVEもしくはUPDATEを受信するごとにホールドタイムをリセット。

NOTIFICATIONメッセージを受信するとIdle状態に移行。

 

 

おおまかな流れを図に描いてみました ↓↓↓

 

 

f:id:asojuku-abcc-cn:20160220144748p:plain

 

 

 

 

 参考資料:Cisco CCNP ROUTEテキスト

 

 

BGP<BGPルータが保持するデータベース&BGPのメッセージ>

ーBGPルータが保持する3つのデータベースについてー

・ネイバーテーブル

BGPでルート情報を交換するBGPルータの情報を保持しているテーブルです。

 

ネイバーには、EBGPネイバー、IBGPネイバー、IEBGPネイバーの3種類がある

 

  • 自分のAS番号とネイバーのAS番号が異なっていればEBGPネイバー
  • 自分のAS番号とネイバーのAS番号が同じであればIBGPネイバー
  • IEBGPネイバーはコンフェデレーションという機能を利用する場合のネイバー

※BGPネイバーはBGPピアという言い方をする場合がありますが基本的に同じ意味

 

・BGPテーブル

BGPで送受信するるーと情報を保持するためのデータベース
BGPネイバーから受信したルート情報はすべてBGPテーブルに格納される


BGPでネイバーに情報を送信するためにはまずBGPテーブルにルート情報を登録する
同じネットワークプレフィクスに対する複数のルートが存在する場合、パスアトリビュートによってベストパスを1つに決定する


・ルーティングテーブル
ipパケットをルーティングするために必要な情報が格納されているデータベース
BGPのルート情報には「B]の文字が先頭につく

 

アドミニストレーティブディスタンスはEBGPが20でIBGPが200

 

 

ーBGPのメッセージー

BGPでは4種類のメッセージを使用します

 

・OPEN

TCPコネクションを開始するために最初にやり取りされるメッセージ

バージョン番号、AS番号、BGPルータIDなどの情報が含まれる

OPENの応答としてKEEPALIVEメッセージが返ってくる

 

・UPDATE

BGPネイバーで交換するルート情報が含まれている

1つのUPDAEメッセージの中には1つのルート情報が含まれている

新しいルートが追加された場合や、ネットワークがダウンし利用不可能になた場合に送

信される

 

・KEEPALIVE

BGPネイバーが正常かどうか確認するためにKEEPALIVEメッセージを送信する

ホールドタイム時間内にネイバーからKEEPALIVEメッセージを受け取ることができな

ければ、ネイバーはダウンしたと判断する

ciscoルーターでは、デフォルトで60秒間隔で送信する

ホールドダウンタイムは180秒

 

・NOTIFICATION

BGPネイバーで何らかのエラーが発生したときに、そのエラーを通知するために送信さ

れる

NOTIFICATIONメッセージを受け取ると直ちにネイバーを切断する

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

今回はBGPルータが保持するデータベースとBGPのメッセージについてでした。

前回は図ありだったのですが、今回はなしということで若干さぼり気味です、

次回は、BGPネイバーの状態と基本的な動作の流れについて、ちゃんと図付きで書いて

いきたいと思います。

 

 

 

 

 

 

awk で遊ぼう!!!

 

ここではコマンドの使い方について詳しく説明することはありません。文字どうり遊ぶだけなので都度、引数やオプションは調べながら自分で工夫してみてください。

 

seq コマンドで数字を生成します。

$seq 1 5
1
2
3
4
5

出来ました。

 

このままでは面白くないので

$seq 1 20 |xargs -n 5 > data

$cat data
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

これで準備はOKです。

awkで簡単なテキスト処理をしていきます。

3列目を出力

$cat data | awk '{print $3}'
3
8
13
18

3列目が10より大きい行を出力

$cat data | awk '$3 >10'
11 12 13 14 15
16 17 18 19 20

3行目が13の行を出力

$cat data | awk '$3==13'

11 12 13 14 15

 

→もっと遊んでしてみる。

次はawkを使って数字に手を加えていきます。

一列目と二列目を乗算して出力

$cat data | awk '{print $1*$2}'
2
42
132
272

一列目を増殖させる。

$cat data | awk '{print $1,$1,$1,$1}'

1 1 1 1
6 6 6 6
11 11 11 11
16 16 16 16

 

→制御構文

awkもif やforなどを使うことが出来ます。

1列目が奇数か偶数か判断させる。

cat data | awk '{if($1%2==0){print $1,"偶数"}else{print $1,"奇数"}}'

1 奇数
6 偶数
11 奇数
16 偶数

for 文を使ってdataの中身をすべて判断させる。

$cat data | awk '{for(a=1;a<=5;a++){if($a%2==0){print $a,"偶数"}else{print $a,"奇数"}}}'

1 奇数
2 偶数
3 奇数
4 偶数
5 奇数
6 偶数
7 奇数
8 偶数
9 奇数
10 偶数
11 奇数
12 偶数
13 奇数
14 偶数
15 奇数
16 偶数
17 奇数
18 偶数
19 奇数
20 偶数

 

このままでは汚いので最後に

$cat data | awk '{for(a=1;a<=5;a++){if($a%2==0){print $a,"偶数"}else{print $a,"奇数"}}}'|xargs -n 10

1 奇数 2 偶数 3 奇数 4 偶数 5 奇数
6 偶数 7 奇数 8 偶数 9 奇数 10 偶数
11 奇数 12 偶数 13 奇数 14 偶数 15 奇数
16 偶数 17 奇数 18 偶数 19 奇数 20 偶数

 

exit

 

 

 

 

 

 

BGP <BGPの概要とASについて>

BGPとは

BGPとはAS間でルート情報を交換するためのプロトコル


ASとは、「統一の管理ポリシーによって管理されるネットワーク」の集合です。
一つの組織が管理しているネットワーク全体が1つのASを構成します。

 

各AS内でのルーティングを行うためにRIP,OSPF、EIGRPなどのプロトコルを利用します。
そして、ほかのASに自身のASないの情報をアドバタイズしたり、ほかのASのルート情報を受け取ったりするためにBGPを利用します。

f:id:asojuku-abcc-cn:20160210024116p:plain

インターネットを構成するAS間で管理されているネットワークの数は膨大です。そのため、BGPで送受信されるルート情報は膨大であり、現在では50万以上のルートがあります。

 

このような膨大なルート情報を交換するために、トランスポート層TCPを使うアプリケーション層プロトコルとして定義されています。

TCPを使っているので膨大な数のルート情報も効率よく送受信できるようにしています。

 

ちなみに、BGPのWell knownポートは179で、ルート情報の送信はトリガードアップデートを採用しています。

 


ASについて

AS番号にはグローバルAS番号とプライベートAS番号の2種類があります。


●グローバルAS番号:1~64511
●プライベートAS番号:64512~65535

 

 ASは他のASとの接続形態やどのようなルーティングを行うかで、いくつかの種類に分かれています。


ASの種類

○スタブAS
○マルチホーム非トランジットAS
○トランジットAS(ISP)

 

---スタブAS---
他のASと1つだけの接続を持っているAS。また、インターネットに独立して存在しているのではなく、ISPを経由してインターネットに接続します。

f:id:asojuku-abcc-cn:20160210024120p:plain

一般的な企業のネットワークはこのスタブASになります。
スタブASではBGPを利用する必要がなく、接続しているAS(ISP)にデフォルトルートをスタティックで設定すればオッケーです。

 

 

---マルチホーム非トランジットAS---
複数のASと接続しているAS。なおかつ、ほかのAS間のパケットを自AS内を通してルーティングしません。

f:id:asojuku-abcc-cn:20160210024402p:plain

インターネット接続を冗長化したい一般企業や、インターネット上で商用サービスを展開するような企業のネットワークがマルチホーム非トランジットASの例として挙げられます。


※1つのASと複数の回線で接続している場合も、マルチホーム非トランジットASになります。

 


---トランジットAS---
マルチホーム非トランジットASと同じく複数のASに接続しているASです。ただし、マルチホーム非トランジットASとは違い、ほかのAS間のパケットを通過(トランジット)するASです。ISPなどがこれにあたります。

f:id:asojuku-abcc-cn:20160210024440p:plain
トランジットASはインターねとを構成する中心的なASで、グローバスAS番号を取得して、複数のASと接続しBGPを利用してそれらのASとルート情報を交換します。

 

スタブASやマルチホーム非トランジットASは、トランジットASによって提供されるインターネット接続サービスを利用してインターネットに接続します。

 

 

今回は以上!!

次に書くときは、BGPの基本動作について書いていこうと思います。

 

参考資料:Cisco CCNP ROUTEテキスト

 

 

 

 

 

 

 

Debug・BGPコマンドメモ書き(Cisco)

 

IOSのヴァージョンによっては使えないかも
【<   >:数値を代入|[   ]:詳細設定などで追加記入】

■Debugコマンド使用時に
【ハードウェアの状態取得】
 #show process cpu

  CPU使用率を表示
 #show process memory

  メモリ使用率の確認
 #show logging

  機器のログ出力先・バッファの確認

 #show ntp associations

 NTPサーバと同期されているかどうか

【ログ設定】
 (config)#service sequence-number
  ログのメッセージにシーケンス番号を表示
 (config)#service timestamps debug datetime localtime msec

  ルータの時刻をミリ秒単位でデバッグの結果に出力

 (config)#no logging console
  ルータのデバッグの出力はデフォルトでコンソールに送信される

  コンソールにデバッグを出力すると、コンソールからの入力不能

  CPU使用率が100%に達する事があるため無効推奨
 (config)#no logging monitor 
  デバッグ情報をリアルタイムにVTYセッションに送信しない
  デバッグを別のサーバに出力する場合は送信する必要がないため
 (config)#logging x.x.x.x
  ログの出力先を指定
 (config)#logging persistent url flash:/LOG size xxxxx filesize xxxxxx
  ログを指定したPathに保存
 (config)#logging host x.x.x.x
  Syslogサーバを指定(サーバ側は514/TCPUDPを許可しておくこと)
 (config)#logging buffered [<size>] [<severity>]
  ロギングバッファを設定。デフォルトでsizeは4094バイト
  severityを指定すると指定した値以下を送信する
 #show logging
  ロギングバッファが指定されていればログを出力する

【debugコマンド】
 #show debug
  現在のdebug状況
 #no debug all (undebug all)
  全デバッグコマンドを無効。検証終了時に忘れずに入力
 #terminal monitor
  デバッグの出力を端末に表示
 #debug ppp authentication
 #debug ip ospf adj
 #debug ip eigrp packet
  認証ミスがある場合は"authentication Mismatch"と表示
 #debug ip packet [detail <acl-number>]
  全パケットを検証。ほとんどの場合拡張aclで出力を制御
  拡張aclには出力するパケットに関してpermitする

■BGP(使った試しがない為、調べた分だけ)
【BGPの確認】
 #show ip bgp [summary] [x.x.x.x]
  BGPテーブルを表示
 #show ip bgp neighbor
  BGPのネイバーを表示
 #show ip bgp neighbor | include BGP state
  BGPステートを一覧表示

【BGPのプロセス】
 (config)#router bgp <AS-number>
  BGPのプロセスを起動
 (config-router)#network <x.x.x.x> mask <networkmask>
  流す経路情報を指定
 (config-router)#neighbor <x.x.x.x> remote-as <AS-number>
  ピアを確立するルータのIPとAS番号を指定
 (config-router)#[no] synchronization
  BGP同期の無効・有効化
  BGP同期はIOS12.2(8)T以前のルーターでデフォルトで有効

・BGP経路はまだ調べてない為割愛
 
参考ページ
ttp://www.cisco.com/cisco/web/support/JP/100/1008/1008436_debug-j.html
ttps://supportforums.cisco.com/ja/document/109691#hdr-7
ttp://www.infraexpert.com/study/tea1.htm
ttp://www.ccstudy.org/study/bgp/basic/basic.html