テーマ:『BGPにおけるBGP Community属性を用いたトラフィックエンジニアリングの実装と最適化』
BGP Community属性によるトラフィック制御の概要
BGP(Border Gateway Protocol)は、インターネットのルーティングを支える中核的なプロトコルですが、標準的な属性だけでは、複雑なマルチホーム環境や大規模なISPネットワークにおける詳細なルーティング制御を行うには限界があります。ここで鍵となるのが「BGP Community属性」です。
BGP Community属性は、RFC 1997で定義された推移的な(Transitive)オプション属性であり、ルートに対して「タグ」を付けるような役割を果たします。このタグを識別子として利用することで、隣接するAS(自律システム)に対して、「この経路を優先してほしい」「この経路は特定の地域に広報しないでほしい」といった、メタ的な指示を伝えることが可能になります。
ネットワークスペシャリストにとって、BGP Communityを使いこなすことは、単なるルーティングの安定化だけでなく、トラフィックエンジニアリング(TE)を実現するための必須スキルです。本稿では、このCommunity属性を用いた高度な制御手法について深掘りします。
詳細解説:Community属性の仕組みと伝播メカニズム
BGP Community属性は、32ビットの値で構成されます。一般的には「AS番号:数値」という形式(例:65000:100)で表現されることが多く、これを「Extended Community」と区別して「Standard Community」と呼びます。
この属性の強力な点は、ルートがASを跨いで伝播する際、ポリシーに基づいて柔軟にフィルタリングや属性変更を行える点にあります。例えば、トランジットプロバイダから提供される「BGP Communityリスト」を活用することで、以下のような制御が可能です。
1. Local Preferenceの操作:特定のISP経由のトラフィックを減らすため、特定の経路に対して「Local Preferenceを下げる」というCommunity値を付与する。
2. AS-Path Prependingの自動化:特定の対向ASに対して、AS-Pathを長く見せることで、流入トラフィックの優先順位を制御する。
3. 経路広報の制限(No-Export/No-Advertise):特定の地域や特定のピアに対してのみ経路を広報し、不要なトラフィックの流入を防ぐ。
これらの制御は、ルータの設定ファイル上でルートマップ(Route-map)と組み合わせることで実装されます。ルートマップ内でマッチ条件としてCommunity値を指定し、アクションとしてLocal PreferenceやMED(Multi-Exit Discriminator)を変更する、あるいはコミュニティ値を置換または付与することが基本です。
サンプルコード:Cisco IOS/IOS-XEにおけるCommunity設定の実装例
実務において最も頻繁に使用される、特定のISPへ「経路の優先度を下げる」ためのCommunity設定例を示します。ここでは、対向ISPの指定するCommunity値「65000:70」を付与して、相手側のネットワーク内での優先順位を下げさせる設定を想定します。
! 1. Communityリストの定義
ip community-list standard TO_ISP_LOW_PRIORITY permit 65000:70
! 2. ルートマップの作成
route-map SET_COMMUNITY permit 10
match ip address prefix-list MY_PREFIXES
set community 65000:70 additive
!
route-map SET_COMMUNITY permit 20
!
! 3. BGPプロセスへの適用
router bgp 65001
neighbor 203.0.113.1 remote-as 65000
neighbor 203.0.113.1 route-map SET_COMMUNITY out
neighbor 203.0.113.1 send-community
!
! send-communityコマンドを忘れると属性が削除されるため注意が必要
この設定により、自律システムから広報される特定のプレフィックスには「65000:70」というタグが付与されます。対向のISPがこの値を認識し、それに基づいたルーティングポリシーを適用していれば、意図した通りのトラフィックエンジニアリングが自動的に行われます。
実務アドバイス:設計と運用における落とし穴
BGP Communityを利用した設計において、エンジニアが陥りやすい罠がいくつか存在します。
第一に「Send-communityの有効化」です。設定が完璧であっても、ネイバー設定で「send-community」を有効にしていなければ、隣接ルータへCommunity値は送信されません。これはトラブルシューティング時に最も見落とされがちなポイントです。
第二に「Community値の文書化と命名規則」です。大規模ネットワークでは、数多くのCommunity値が定義されます。これらが何のために存在するのか、どのルートマップで付与されているのかをドキュメント化していないと、将来的な設定変更時に意図せぬルーティングループやトラフィックの片寄りを引き起こします。Community値には、可能な限り組織内で標準化された命名規則(例:1000番台は地理的制御、2000番台はトラフィック優先度など)を適用すべきです。
第三に「推移性の考慮」です。Standard Communityは推移的であり、設定を誤ると意図せず広範囲にわたって経路制御が伝播してしまいます。特定のAS内だけで有効にしたいのか、それともインターネット全体に広報したいのかを、ルートマップの適用ポイント(InboundかOutboundか)と合わせて慎重に設計してください。
また、最近では「Large Community(RFC 8092)」の普及も進んでいます。従来の32ビットではAS番号が16ビットしか表現できず、現代の4バイトAS番号環境では不十分でしたが、Large Communityでは「Global Administrator (4バイト) : Data Part 1 (4バイト) : Data Part 2 (4バイト)」の計12バイトを使用可能です。将来性を考慮するならば、設計段階でLarge Communityの採用を検討することも推奨されます。
まとめ:ネットワークの意志を伝えるプロトコルとして
BGP Community属性は、単なるルーティング制御の道具ではありません。それは、ネットワーク管理者が自身のネットワークに対して持っている「意志」を、隣接するASやインターネット全体に伝えるための言語です。
「このトラフィックは安価な回線を通したい」「この経路は特定の国からは見せたくない」といった高度な要求を、BGPの標準的な動作を維持しながら実現できるのは、このCommunity属性があるからこそです。
本稿で解説した基本的な実装手法と、実務上の注意点を押さえることで、より堅牢で柔軟なネットワーク環境を構築することが可能になります。BGPの運用において、Community属性という「タグ」を自在に操れるようになることは、ネットワークスペシャリストとしての市場価値を確実に高めるでしょう。
最後に、ネットワーク設計は常に変化するものです。一度構築して終わりではなく、トラフィック量や通信品質をモニタリングし、必要に応じてCommunityを用いたポリシーを微調整し続ける「継続的なエンジニアリング」を意識してください。これが、真に最適化されたネットワークを実現するための唯一の道です。

コメント