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でアドバタイズしたいルート情報を指定するためのコマンドなので、ルータに直接接続されているネットワークアドレスを指定する必要はありません。
---------------------------------------------------------------------------------------------------------------------
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状態に移行。
おおまかな流れを図に描いてみました ↓↓↓
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メッセージを受け取ることができな
ければ、ネイバーはダウンしたと判断する
ホールドダウンタイムは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を利用します。
インターネットを構成する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を経由してインターネットに接続します。
一般的な企業のネットワークはこのスタブASになります。
スタブASではBGPを利用する必要がなく、接続しているAS(ISP)にデフォルトルートをスタティックで設定すればオッケーです。
---マルチホーム非トランジットAS---
複数のASと接続しているAS。なおかつ、ほかのAS間のパケットを自AS内を通してルーティングしません。
インターネット接続を冗長化したい一般企業や、インターネット上で商用サービスを展開するような企業のネットワークがマルチホーム非トランジットASの例として挙げられます。
※1つのASと複数の回線で接続している場合も、マルチホーム非トランジットASになります。
---トランジットAS---
マルチホーム非トランジットASと同じく複数のASに接続しているASです。ただし、マルチホーム非トランジットASとは違い、ほかのAS間のパケットを通過(トランジット)するASです。ISPなどがこれにあたります。
トランジットASはインターねとを構成する中心的なASで、グローバスAS番号を取得して、複数のASと接続しBGPを利用してそれらのASとルート情報を交換します。
スタブASやマルチホーム非トランジットASは、トランジットASによって提供されるインターネット接続サービスを利用してインターネットに接続します。
今回は以上!!
次に書くときは、BGPの基本動作について書いていこうと思います。
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/TCP・UDPを許可しておくこと)
(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
はてなブログをはじめました。
今後、いろいろな分野のいろんな技術に関するブログを書いていきたいと思います。
是非、今後ともよろしくおねがいたします。