IXPとBGPルートサーバ、現場ではどう使われているの?
インターネットの「交差点」とも呼べるIXP(Internet Exchange Point)。複数のISPやコンテンツ事業者が一か所に集まり、トラフィックを直接交換するこの仕組みは、レイテンシ削減やコスト最適化の観点から、今や多くの組織にとって欠かせないインフラです。
ただ、IXPに接続する参加者(ピア)が増えるにつれて、1対1でBGPセッションを張る「フルメッシュ構成」は一気に管理コストが跳ね上がります。参加者が100社いたら、単純計算で4,950本ものセッションが必要になります。そこで登場するのがBGPルートサーバ(Route Server)です。今回は、ルートサーバの仕組みと設計のポイントを、実際の設定例を交えながら解説していきます。
BGPルートサーバとは何か?仕組みを理解しよう
ルートサーバが解決する問題
通常のBGPピアリングでは、ピア同士が1対1でセッションを確立し、経路情報を交換します。IXPのように多数の参加者がいる環境でこれをやると、セッション数は n*(n-1)/2 に膨れ上がります。ルートサーバはこの問題を解決する「仲介者」です。
ルートサーバの動作フローはシンプルです。
- 各参加者はルートサーバに対してのみBGPセッションを1本張る
- 参加者Aが広告した経路をルートサーバが受け取り、参加者Bへ転送する
- ルートサーバ自身はトラフィックを転送しない(データプレーンには関与しない)
- 経路情報(コントロールプレーン)だけを仲介する役割
重要なのは、ルートサーバは通常のBGPルータとは異なり、NEXT_HOP属性を書き換えない点です。これにより、経路を受け取ったピアは、ルートサーバを経由せず、広告元のピアへ直接トラフィックを転送できます。
ルートサーバのASパスの扱い
もう一つの特徴は、AS_PATHにルートサーバ自身のASNを挿入しない点(RFC 7947準拠)。通常のiBGPルートリフレクタと同様の考え方ですが、外部向けのeBGPでこれを実現しているのがポイントです。
設定例:Birドおよびルートサーバクライアントの設定
ルートサーバ側(BIRD2を使用した例)
router id 192.0.2.1;
protocol bgp RS_CLIENT_A {
local as 65000;
neighbor 192.0.2.10 as 65001;
rs client; # ルートサーバモード有効化
ipv4 {
import filter import_from_peer;
export filter export_to_peer;
};
}
filter import_from_peer {
if net ~ [ 10.0.0.0/8+ ] then reject; # プライベートアドレスを拒否
if bgp_path.len > 64 then reject; # AS_PATH長制限
accept;
}
filter export_to_peer {
# IRRベースのフィルタリングをここに実装
accept;
}
参加者側(Cisco IOS-XEの設定例)
router bgp 65001
bgp router-id 192.0.2.10
neighbor 192.0.2.1 remote-as 65000
neighbor 192.0.2.1 description IXP-RouteServer-1
!
address-family ipv4
neighbor 192.0.2.1 activate
neighbor 192.0.2.1 soft-reconfiguration inbound
neighbor 192.0.2.1 prefix-list ADVERTISE out
neighbor 192.0.2.1 prefix-list ACCEPT in
exit-address-family
!
ip prefix-list ADVERTISE seq 10 permit 203.0.113.0/24
ip prefix-list ACCEPT seq 10 permit 0.0.0.0/0 le 24
ip prefix-list ACCEPT seq 20 deny 0.0.0.0/0
現場での活用とベストプラクティス
IRRフィルタリングによる経路の正当性検証
ルートサーバ環境では、IRR(Internet Routing Registry)に登録されたROUTE/ROUTE6オブジェクトを元に、ピアが広告できる経路を制限するのが標準的な実装です。RPKI(Resource Public Key Infrastructure)と組み合わせることで、より強固なルーティングセキュリティを実現できます。
ルートサーバの冗長化
本番環境では、単一障害点を避けるため、最低2台のルートサーバを運用しましょう。各参加者は両方のルートサーバとセッションを張り、フェイルオーバーを自動化するのが定石です。
| 構成パターン | 特徴 | 推奨シーン |
|---|---|---|
| アクティブ/アクティブ | 2台とも経路配信、ピアは両方から受け取る | 大規模IXP |
| アクティブ/スタンバイ | 片系障害時にのみ切り替え | 小規模・シンプルな環境 |
コミュニティを使った経路制御
BGPコミュニティ属性を活用すると、特定ピアへの経路広告の制御が柔軟に行えます。例えば「このピアには広告しない」「LOCALPREFを下げる」といった制御を、コミュニティ値の付け替えだけで実現できます。
# 特定ピア(AS65002)への広告を抑制するコミュニティの例
# 65000:65002 を付与した経路はAS65002に転送しない
filter export_to_peer {
if (65000, 65002) ~ bgp_community then reject;
accept;
}
注意点・よくある落とし穴
- NEXT_HOPの到達性確認を怠らない:ルートサーバ経由で受け取った経路のNEXT_HOPは広告元ピアのIPアドレスです。同じIXP LANセグメント上にいない場合、通信できない経路を受け取ってしまいます。
- プレフィックスフィルタは必ず実装する:デフォルトルートやBOGONアドレスが広告される事故を防ぐため、参加者側でもinboundフィルタを適切に設定しましょう。
- IRRの登録情報を最新に保つ:登録が古いと正規の経路がフィルタされ、自社のトラフィックがIXPを経由しなくなる事態も起こり得ます。
- セッション数の上限に注意:参加者が多いIXPでは、ルートサーバとのセッション数やRIBサイズがルータのリソースを圧迫することがあります。機器スペックは余裕を持って選定してください。
まとめ
BGPルートサーバは、IXP環境における経路制御を劇的にシンプルにしてくれる強力な仕組みです。セッション管理のコスト削減だけでなく、IRRやRPKIと組み合わせることでセキュアなルーティング環境を構築できます。
大切なのは、ルートサーバを「ただ経路をもらう場所」として受け身に使うのではなく、コミュニティや適切なフィルタリングポリシーを設計して、自社のトラフィックを意図通りに制御すること。ぜひ一度、手元のシミュレータ環境(GNS3やCMLなど)でルートサーバ構成を試してみてください。設計の解像度がぐっと上がるはずです。
```