HOMENOCの公式TwitterやFacebookで告知しておりましたが、2月27-28日に開催された、第5回ICTトラブルシューティングコンテストにインターネット接続の提供をHOMENOCより行いました。
恐らく運営や参加者の学生さんにとっては、IPアドレスを割り当てられ、そのアドレスを設定したらインターネットに繋がった、という認識なのかと思います。せっかくの機会ですので、HOMENOCのバックボーン内でどのような制御がされているのかを分かりやすく解説したいと思います。
※分かりやすく伝えることを目的としておりますので、一部表現として不正確な部分がある場合があります。
1.バックボーン全体の構成
HOMENOCでは複数の拠点にネットワーク機器を設置しバックボーンネットワークを構築しています。メンバーの自宅などエンジニアが居住している場所を「NOC」、データセンターなどエンジニアが居住していない場所を「POP」と定義しています。
2016年2月現在では下図の通り8拠点の構成となっています。接続をユーザに提供する場合は、8拠点のどこかに接続することとなります。各拠点は利用できる帯域、インタフェースの数、フルルートが提供可能かなど様々な特徴があり、接続の提供を希望するユーザの要件と、各拠点のバックボーンの特徴などを総合的に考慮して接続先を決定しております。
図1:バックボーン構成
また、NOC01/NOC02/POP03/POP01の4拠点では、対外接続(他のASへの接続)を行っております。接続帯域など詳しい情報は以下のURLをご覧いただければと思います。
Home NOC Operators Group:https://www.bgp.ne.jp/
2.構成
各NOCには大きく分けて下記の3種類のルータがあり、図2のような構成で接続されています。なお管理系や直接ルーティングに関与しないスイッチなどについてはここでは割愛します。
・コアルータ
⇒そのNOCの中心となるルータで他のNOCや他のASとの接続を担当。
・サーバー/サービス収容ルータ
⇒そのNOCに接続するユーザやサーバを収容するルータ。
・ルートリフレクタ(一部NOCのみ)
⇒経路情報をiBGPで他のルータに渡すための専用機、経路生成ルータを兼ねる。
図2:各NOCの構成イメージ
3.ルーティングの仕組み
続いてルーティングの仕組みについて解説したいと思います。
3-1.サーバー/サービス収容ルータ
サーバー/サービス収容ルータから各ユーザへはスタティックルーティングを利用します。ユーザのルータとサーバー/サービス収容ルータの間に/30の境界アドレスを設定し、境界アドレスのユーザ側をネクストホップとしてスタティックルートを設定します。逆にユーザ側からはサーバー/サービス収容ルータをネクストホップとしたデフォルトルートを設定します。
図3-1:経路制御の仕組み
サーバー/サービス収容ルータからコアルータへは、iBGPにて経路を広報しています。経路を広報する際にはBGPのコミュニティ属性(59105:100)とlocal-pref属性(350)の値を付加して広報しています。具体的には下記のような設定を行っています。
policy-options { prefix-list POP03SPECIFIC { 192.0.2.0/28; } policy-statement 59105-SPECIFIC { term SPECIFIC { from { family inet; protocol [ static direct ]; prefix-list POP03SPECIFIC; } then { metric add 1000; local-preference 350; community add 59105-SPECIFIC; accept; } } } community 59105-SPECIFIC members 59105:100; }
HOMENOCで利用しているコミュニティ属性はいくつかありますが、59105:100はユーザと各NOCにあるサーバーセグメントに付けられるコミュニティです。コミュニティ属性を付加する目的は、大量の経路を分類し制御しやすくすること、モニタリング時に分かりやすくすることなどが挙げられます。
3-2.コアルータ
コアルータではサーバー/サービス収容ルータからの経路を受け取ると共に、サーバー/サービス収容ルータに対してデフォルトルートと59105:100のコミュニティが付いた経路を広報しています。
フルルートを広報せずにデフォルトルートを広報する目的は、経路数の削減です。2016年2月現在、IPv4フルルートの経路数は58万経路に達しています。これらの経路を安定して受け続けるには高性能(=高価)なルータが必要となります。HOMENOCで利用しているサーバー/サービス収容ルータ(Juniper M7i)は比較的旧式のルータとなり、最大51万経路しか経路を受けられません。
写真3-2:JuniperM7i
※ JuniperM7iはコントロールプレーン(RE)とデータプレーン(FEB)が独立したモジュールになっているタイプのルータです。トラコンで学生さんが利用するクラスのルータではこのような仕組みはありませんが、キャリアやISPが利用するルータではこのような構造になっているタイプの機器が主流です。前記の51万経路というのはデータプレーン(CFEB)の制限によるものです。データプレーンを交換(CFEB-E)すればM7iでも100万経路を受けることが可能です。
また、コアルータは対外接続(他のASとの接続)機能を担っています。他のASから経路を受け取り、他のNOCのルータやルートリフレクタに経路を広報し、HOMENOCのIPアドレスブロックを他のASに対して広報しています。
対外接続(他のASとの接続)にはトランジットとピアの2種類があります。トランジットはフルルートを受け取とり、HOMENOCの経路を世界中のASに広報して貰う接続形態、ピアはお互いのASが持つ経路のみを交換する方式です。
なおトランジットやピアから受け取る経路にもBGPのコミュニティ属性とlocal-pref属性の値を付加しております。
3-3.ルートリフレクタ
iBGPには、「他のiBGPルータから受け取った経路は、他のルータには渡さない」というルーティングループを防ぐ為の仕様があります。そのため、原則としてiBGPを利用する場合は全てのiBGPルータ同士でフルメッシュで接続をする必要があります。小規模なネットワークであればそれで良いのですが、ネットワーク規模が大きくなるにつれてiBGPピアの数が増え管理が煩雑になる上、メモリなどのリソースを大量消費することになります。
この問題を解決する手法の一つとしてルートリフレクタという技術が存在します。
HOMENOCでは中核となる2つのNOCにルートリフレクタを置いており、コアルータはルートリフレクタ(以下RR)とのみiBGP接続し、ルートリフレクタクライアント(RC)となることにより、フルメッシュ構成を回避しています。
コアルータはRCであるのと同時に、サーバー/サービス収容ルータに対するRRにもなり、RRとRCの階層構造をとっています。RRとRCはクラスタと呼ばれるグループに分けることができ、「AS全体のRRとRCであるコアルータ」「RRであるコアルータとRCのサーバー/サービス収容ルータ」という2つのグループを作っています。
AS全体で2つあるRRは「経路生成用ルータ」を兼ねています。今回トラコンには/28のサイズのIPv4アドレスを割り当てましたが、インターネットにはHOMENOCが割り当てを受けている/23のプレフィックス長で経路を広報しています。BGPで経路広報を行うにはルーティングテーブル上に同一のマスクを持つ経路が存在する必要があります。HOMENOCの内部にはユーザに割り当てているプレフィックス長の経路が流れており、/23のプレフィックス長の経路は存在しないため、どこかでその経路を生成する必要があり、その役割をルートリフレクタが担っています。具体的には下記のように設定しています。
・discard経路(Ciscoで言うとNullインタフェース宛経路)を記述する
routing-options { rib inet.0 { static { route 103.48.31.0/24 discard; route 103.247.181.0/24 discard; route 103.202.216.0/23 discard; } } }
・プレフィックスリストで広報する経路を指定し、BGPに広報する
policy-options { prefix-list HOMENOC4 { 103.48.31.0/24; 103.202.216.0/23; 103.247.181.0/24; } policy-statement BGP-ADVERTISE { term HOMENOC { from { family inet; protocol static; prefix-list HOMENOC4; } then accept; } } }
5.トラブルに対する考え方
最後にトラブルシューティングに関するお話をしておきましょう。当たり前の話ですがHOMENOCとしては「そもそもトラブルが起こること自体が好ましくない」という立場です。予め起こりうる可能性があるトラブルを想定しそれに対する対策を考慮に入れた設計や構成をとっています。それらは技術的なものだけではなく、設定変更などに際してヒューマンエラーが起き辛い表示や手順なども含まれます。
トラブルにどう対処するかも大切ですが、そのトラブルを発生させないためにはどうすれば良かったかを考え、トラコンの問題を振り返ってみるのも面白いと思います。