シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

ダイナミックルーティングについて想いをはせる

こんにちは、技術部ネットワーク課の若松と申します。
私たちネットワーク課のスタッフは、サーバの保守と合わせて、ネットワークの保守もやっています。
この場合のネットワーク保守は回線をより太いものに変更したり、古い機材を交換するという意味もありますが、めまぐるしく変わっていくネットワークへのニーズに追従していく、という意味もあります。
今回はネットワーク保守としてとても大事な「ルーティング」について少しだけ簡単に説明したいと思います。
中身は、「厳密に言うと少し違う」という部分もありますが、そういう技術もある、ということをイメージをしていただければと思います。

IPアドレスとは

IPアドレスはよく「インターネット上の住所」とか言われます。
インターネット上のサーバや、皆さんのPC、スマートフォンはそれぞれIPアドレスが割り当てられています。
IPアドレスはその使用目的や使用方法により、固定さている場合や、都度変更になる場合があります。
現在利用されているのは32bitのIPv4アドレスと128bitのIPv6アドレスがあります。IPv4アドレスは192.168.XXX.YYYなどという数字の羅列を見たことがあるかたもいらっしゃると思います(なお、IPv6アドレスはもっと長い数字を16進数を用いて標記されますが、ここでは省略します)。
しかし数字だけのIPアドレスでは覚えにくいので(それだけが理由ではありませんが)、www.synapse.jp などのサーバ名とIPアドレスを変換するネームサーバを介して最終的にはそれらのIPアドレスを宛先として、また自身のPC/スマートフォンのIPアドレスを送信元として通信しています。

また、通信は一般に応答があって始めて成立しますので、その場合は、宛先IPアドレスと送信元IPアドレスが逆になったデータが戻ってきている形になります。

通信の方向 宛先 送信元
PC/スマホ→サーバ サーバのIPアドレス PC/スマホのIPアドレス
サーバ→PC/スマホ PC/スマホのIPアドレス サーバのIPアドレス

ちょうどお手紙を書いて、お返事を貰う際に、宛先と差出人の住所が逆になるのと似ていますね。

IPルーティングとは

では「IPルーティング」とは何でしょうか。なんか難しそうな言葉ですね。
簡単に言うと、インターネット上のTCP/IPでやりとりされる通信データや皆さんの社内ネットワークの通信データを宛先のIPアドレスまで送り届けることやその設定のことです。
「ルーティング」は routing と書き、道筋、航路、経路を意味する route が語源です。
ドライブに行くとき「どのルートで行く?」なんて会話がありますよね。どういう道筋を通り、目的地まで到着するかという意味ですが、インターネット上では宛先IPアドレスまで送り届けることやその設定を意味します。

小規模ネットワークのIPルーティング

たとえば、本社一箇所と支社二箇所をつなぐ場合のルーティング設定を考えます。ルーティング設定でルータに保持される情報をルーティングテーブルと呼びます。ルータは各通信データの宛先を見て、ルーティングテーブルと照合しながら、次の転送先(ネクストホップ)を決定します。
今回は、本社を中心として、支社がぶらさがる形で考えました。

ネットーワーク構成とルータ配置
ネットーワーク構成とルータ配置


本社にはISP向けルータと、支社向けルータの2台、各支社には各支社用のルータを設置することとします(この辺は実際のところは予算やルータの性能、ポート数、運用方法に左右されます。本社に2台設置せず1台で両方の機能を包含させてしまうこともあり得ます)。

各ルータにはどういうルーティング設定が必要でしょうか。

まず、本社のISP向けルーティングテーブル

ISPむけルータ設定
ISP向けルータ設定

宛先ネットワーク ネクストホップ
デフォルトルート ISP
A支社向け 支社向けルータ
B支社向け 支社向けルータ

デフォルトルートとは、「宛先がルータに定義されていない場合の最終的な送信先」になります。ネクストホップとは自身が次にパケットを送る宛先になります。

一般に、インタネット上のサーバ/各種サービスとの通信は、殆どがデフォルトルートに依存することになりますし、その場合はISP向けルータが契約するISPにパケットを送ります(あとはISPがなんとかしてくれるわけです)。

次に支社向けルータのルーティングテーブル

支社向けルータの設定
支社向けルータの設定

宛先ネットワーク ネクストホップ
デフォルトルート ISP向けルータ
A支社向け A支社ルータ
B支社向け B支社ルータ

支社向けルータのデフォルトルートはISP向けルータになります。
これで、A支社、B支社から来たパケットをISP向けルータに送り、インターネットへの接続を可能とします。

さらに、A支社/B支社ルータのルーティングテーブル

A支社/B支社ルータの設定
A支社/B支社ルータの設定

宛先ネットワーク ネクストホップ
デフォルトルート 支社向けルータ

支社側のルータは同じ設定になります。ようは自身が知らないネットワークは全て本社側の支社向けルータに投げてしまえ、ということです。

これで全ての拠点間の通信が可能となり、また本社を介したインターネット利用も可能となりました。

次に、C支社も開設されることになりました。
本来であれば、A支社、B支社同様本社配下にC支社も接続したいところですが、同様の構成は回線コストなどがかかり、開設当初のC支社の事業規模ではマッチしないため、距離的に近いA支社に接続することになりました(実際ランニングコストや回線を提供する通信事業者側の設備事情、納期の関係で思うようなネットワークを構築できないということはよくあることです)。

C支社の接続
C支社の接続
C支社向けネットワークの追加はISP向けルータ、支社向けルータ、A支社ルータにそれぞれC支社向けのルーティング設定が必要となり、結構大変ですね。C支社ルータはデフォルトルートだけでOKです。
C支社向けルーティング設定の追加
C支社向けルーティング設定の追加

さらに、D支社が開設されて、D支社はC支社配下とするか、C支社同様A支社配下とすることとなりました。

D支社をどこに接続するか?
D支社をどこに接続するか?

さすがにここまで拠点が増えると、いろいろ考えておく必要があります。
たとえば、本社~A支社間の回線に故障が発生したらどうなりますか?

C支社、D支社ともに上流にA支社がありますので、A支社も含めて、業務に支障が出ます。
あるいはA支社が停電したり、A支社のルータが故障した場合は、どうでしょうか。これもやはり、A支社/C支社/D支社ともに業務に支障が出ます。

回線故障や停電で大きな影響が出る
回線故障や停電で大きな影響が出る

さてここで1つアイデアを思いつきました。
本社と4つの支社をそれぞれつなぎ、ループ状にしてしまいます。

D支社とB支社/C支社に接続し、ループ状に
D支社とB支社/C支社に接続し、ループ状に
これならどこかの回線が故障しても、ネットワーク的な接続は確保されますし、どこかの支社が停電やルータ故障が起きてもその支社だけが切り離されるだけで、他の支社には支障がありません。

平常時、A支社の配下にC支社が、B支社の配下にD支社が接続されているイメージでデータが流れているとします。このときC支社とD支社の間はデータは流れていません。

平常時の通信データの流れ方
平常時の通信データの流れ方
そこで、本社とB支社間の回線が故障したとします。このままではB支社とD支社が切り離されてしまいます。
その場合は、どうすればいいでしょうか。
本社とB支社間の回線故障で、B支社、D支社業務に支障発生
本社とB支社間の回線故障で、B支社、D支社業務に支障発生
幸い、C支社とD支社間の回線は正常ですので、この回線を使って、B支社とD支社もつないでしまいましょう。

B社/D社はC社の向こうにあるというイメージになりますので、以下のような設定が必要です。

B支社暫定復旧への設定変更
B支社暫定復旧への設定変更

細かく説明すると、以下の通りです。

まず、本社のISP向けルータのルーティングテーブル

宛先ネットワーク ネクストホップ 変更の有無
デフォルトルート ISP向けルータ
A支社向け 支社向けルータ
B支社向け 支社向けルータ
C支社向け 支社向けルータ
D支社向け 支社向けルータ

ISP向けルータから見れば、全て支社向けルータがネクストホップになっていて、特に変更はありません。

次に支社向けルータのルーティングテーブル

宛先ネットワーク ネクストホップ 変更の有無
デフォルトルート ISP向けルータ
A支社向け A支社ルータ
B支社向け A支社ルータ 変更
C支社向け A支社ルータ
D支社向け A支社ルータ 変更

支社向けルータはこれまでB支社/D支社向けのネクストホップがB支社ルータだったのが全て同じA支社ルータになります。

次にA支社ルータのルーティングテーブル

宛先ネットワーク ネクストホップ 変更の有無
デフォルトルート 支社向けルータ
B支社向け C支社ルータ 追加
C支社向け C支社ルータ
D支社向け C支社ルータ 追加

A支社ルータはこれまでなかったB支社/D支社向け設定を追加します。ネクストホップはC支社になります。

次にC支社ルータのルーティングテーブル

ネットワーク ネクストホップ 変更の有無
デフォルトルート A支社ルータ
B支社向け D支社ルータ 追加
D支社向け D支社ルータ 追加

C支社ルータもA支社ルータと同様、B支社/D支社向け設定を追加します。ネクストホップはD支社になります。

次にD支社ルータのルーティングテーブル

宛先ネットワーク ネクストホップ 変更の有無
デフォルトルート C支社ルータ 変更
B支社向け B支社ルータ 追加

D支社ルータはデフォルトルートをC支社に向け、B支社向け設定を追加します。ネクストホップはB支社になります。

最後にB支社ルータのルーティングテーブル

宛先ネットワーク ネクストホップ 変更の有無
デフォルトルート D支社ルータ 変更
D支社向け D支社ルータ

B支社はデフォルトルートを本社に向けていたのをD支社に向けてしまえばOKとなります。
D支社向けルートも特に変更や削除する必要はありません(D支社向けパケットは1つ手前のD支社ルータで処理され、B支社側から来ることはないため)。

これで、回線故障への一時対処は完了しました。業務への支障も最小限となり、ホッとしました(お疲れさまでした)。
しかし、この対処作業自体も大変ですよね。

  • 各支社のルータ設定変更をするには、現地まで行く必要があり、復旧までに時間や交通費などのコストがかかる。
  • 仮に現地スタッフに設定変更して貰うとしたら、日ごろからの教育や指導、手順書の作成などを準備しておく必要がある。
  • 仮に支社間の回線を経由して各支社ルータに入れた場合でも、順番や手順を間違えないようにして、設定ミスによるネットワークダウンを回避する必要がある(たった1つのミスで全てのネットワークがダウンする可能性がある)。
  • 平常時C支社~D支社間はデータが流れていないのに回線料金だけ払い続けているのはコスト面で問題視されやすい。
  • 回線故障が復旧して、本来のネットワーク構成に戻す場合も、逆の手順で全てのルータの設定を随時戻していく必要がある。

ううむ、故障対応するスタッフは大変ですね。別部門のスタッフに「まだ直らないの?」とせっつかれながらも、回線事業者への問い合わせ、故障箇所の特定、代替機の確保、復旧対策の策定、復旧手順の作成、社内への説明、、、などなど。

そして思うはずです。
「これってなんとか自動化できないの?」

どこかを経由して回線がつながってさえいれば、回線故障で拠点間が切断されたり、停電やルータ故障で拠点自体がダウンしても、生き残っている回線や拠点のみで通信を継続できる方法があれば・・・。

あります。ダイナミック(動的)ルーティングを使えば出来ます。

ダイナミックルーティングとは

ダイナミックルーティングは追加や削除されたネットワークの情報を動的に隣接するルータ同士で交換することで、ルーティングテーブルを自動更新させることが出来ます。

ルータ~ルータ間でネットワーク情報を自動交換
ルータ~ルータ間でネットワーク情報を自動交換
自動化させることで、バックアップルートへの自動切り替え、トラフィックの負荷分散が実現します。もちろん支社が追加された場合も、その支社と対向先のルータに設定を追加するだけで、自動的にネットワークがつながります(ということは、たった1つの作業ミスでネットワーク全体を機能不全に陥らせる危険性もあるわけで、ネットワーク設計と実作業自体は慎重にやる必要があります)。

支社の追加もらくらく
支社の追加もらくらく

回線故障が発生した際も自動的に健全なネットワークを使って通信を継続します。

回線故障時も自動的に迂回して通信を継続
回線故障時も自動的に迂回して通信を継続

なお、これまで拠点が増えるたびに、その都度設定変更をしてきた方法をスタティック(静的)ルーティングといいます。
ダイナミックルーティングと比較すると、以下のような違いがあります。

比較項目 スタティック(静的)ルーティング ダイナミック(動的)ルーティング
ルートの設定方法 管理者が手動で設定 ルータ間で自動追加(ダイナミックルーティングのための初期設定は必要)
ネットワーク変更検出時 変化無し 自動で反映
ルータ負荷 低い CPUとメモリを消費
管理者負荷 ネットワーク規模により設定変更対象ルータが増える ダイナミックルーティングの深い知識が必要
トラブル発生時 手動で設定変更が必要 基本的には故障箇所の復旧のみ

なお、スタティックルーティングとダイナミックルーティングは組み合わせて使うこと出来ます。しかし、ダイナミックルーティングの便利さを覚えてしまうと、全てダイナミックルーティング化してしまいたくなりますね(個人的な感想です)。

ダイナミックルーティングの種類

ダイナミックルーティングは大規模ネットワーク向けのEGPと小規模ネットワークむけのIGPがあります。

種類 適用範囲 種類
EGP(Exterior Gateway Protocol) 大規模ネットワーク(ISP/大手クラウド事業者等)の相互接続 実質BGPのみ
IGP(Interior Gateway Protocol) 小規模ネットワーク(1組織の範囲内) RIP/OSPF/EIGRP/IS-ISなど

ダイナミックルーティングは奥が深くて、ちょっとした解説だけでも本が何冊も書けてしまうボリュームなので、今回はIPv4で使われるIGPについて(極めて)簡単に説明しますね。

RIP

RIPはRouting Information Protocolの略です。DVAというアルゴリズムを使い、ルータのホップ数(段数)がもっとも少ないルータをネクストホップとして選択/決定します。しかし、回線の速度はまったく考慮されないため、以下のようなネットワークではA支社とE支社の通信は、A~C~B~D~Eの経路がより太い回線を経由しますので、最適であるといえますが、RIPの場合は、A~C~Eが選択されてしまいます。

RIPは経由するルータの数(ホップ数)で最適経路を決定する
RIPは経由するルータの数(ホップ数)で最適経路を決定する


比較的簡単なアルゴリズムなので、西暦2000年以前のルータでも実装されており、また WindowsPCでも動作させることが出来ました。RIPはVersion1とVersion2があり動作に差があります。Version1はサブネットマスクを伝達できないなどの制限があり、ただしくアドレス設計されていないネットワークには適用しにくいという課題がありました。Version2はその点は改善されています。しかしRIP自体が隣接するルータからネットワークの情報が伝達されなくなってから一定の時間が経過した後にそのネットワークは接続されていないと判断し伝達を中止するという実装になっていることから、ルータの段数が多いと、ネットワークダウンから末端のルータに伝わるまで時間がかかるという運用上の支障も発生します。比較的単純なネットワークで一定程度のダウンも許容できる箇所に適用するのがいいでしょう。

OSPF

OSPFはOpen Shortest Path Firstの略です。隣接するルータから伝達されたネットワークの情報を元に、自身のルータを中心としたネットワーク構成のデータベースを構築し、ダイクストラというアルゴリズムを使い、宛先ネットワークへの最適経路を決定します。
OSPFはRIPと違い、ルータの段数のほか、回線の太さ(速さ)も最適経路の決定に大きく関わりますので、回線事情に応じたネットワーク構築が可能です。また、ネットワークダウン時の収束も早いです。

OSPFは経由する回線の太さも最適経路の決定に反映される
OSPFは経由する回線の太さも最適経路の決定に反映される
動作にはある程度のCPU性能とメモリが必要なため、性能/信頼性が必要な法向けルータに多く実装されています。
なお、宛先ネットワークに対して、同じ太さの回線が2本あった場合、50%ずつ流れるように負荷分散することができます(ただしルータの実装次第です)。この複数の経路をイコールコストマルチパスと呼びます。
OSPFは途中の回線が同じ太さなら不可分散も可能
OSPFは途中の回線が同じ太さなら不可分散も可能
上記のようなネットワーク構成の場合は、A支社とE支社の間は論理的には200Mbpsまで使えることになります(実際には不可分散のアルゴリズムの関係もあり、経験則ですが、ここまで綺麗に50%/50%で分散されることはありません)。
OSPFでは大規模ネットワークを構築する際に、「エリア」ごとに分割することで、ネットワーク変更の伝達範囲を制限/分割することが可能です。これによりネットワーク全体の負荷上昇を抑え、余計なCPU/メモリ使用を抑制できます。

EIGRP

EIGRPはEnhanced Interior Gateway Routing Protocolの略で、シスコシステムズ社の独自プロトコルです。Cisco社製ルータのみで構成されるネットワークであれば、EIGRPを採用してもいいでしょう。DUALというアルゴリズムを使い、ルーティングループ(パケットが同じルータ間をぐるぐる回ること)を防ぎ、収束時間の最短化を図っています。EIGRPは同一の宛先ネットワークに対して「サクセサ」と「フィジブルサクセサ」を用意(出来る場合は用意)し、通常は「サクセサ」をネクストホップとしますが、万が一「サクセサ」が使えなくなった場合は「フィジブルサクセサ」にすぐに切り替えることで高速な収束を実現します。また宛先ネットワークに対して複数のネクストホップがある場合に、途中の回線の太さが異なる場合でも、太さに応じた負荷分散もできます(不等コストロードバランシング)。回線の有効活用という面でもメリットになります。

EIGRPの不等コストロードバランシング
EIGRPの不等コストロードバランシング

なお、最適経路の決定や、負荷分散については、さまざまな決定(設定)要素が存在しますので、上記のように理想的な分散がなされるとは限りません。ルータの設定と実装次第の面があります。

IS-IS

IS-IS自体はOSIのネットワーク層のためのルーティングプロトコルでしたが、OSIネットワーク層でのルーティングが普及しない中TCP/IPでのルーティングにニーズがあったため、TCP/IP向けに開発、発表されたのが Integrated IS-IS(統合IS-IS)です。統合IS-IS ではOSPFのようにエリア分け(ただし、エリアの考え方はOSPFとは厳密には違いますが)したネットワークで、エリア内のルーティングをするルータをLevel1ルータ(L1ルータ)、エリア間のルーティングをするルータをLevel2ルータ(L2ルータ)と呼びます。アルゴリズムはOSPFと同様ダイクストラが用いられます。
実装しているルータメーカは アラクサラネットワークス社シスコシステムズ社などがあります。

いかがでしたか。

みなさん、いかがでしたか。ちょっと小難しい話ばっかりになってしまいました。
しかしダイナミックルーティングは私どものネットワーク運用になくてなならない存在となっています。たとえば機材の増強で入れ替えをする時もダイナミックルーティングによりトラフィックを自動的に迂回させて、お客様に気づかれること無く実施することが出来ますし、ネットワーク全体としてはサービスを停めることなく継続することが出来ます。
また故障発生時に自動的にトラフィックが迂回してくれた時は自分の設計通りに動作してくれたことが非常にうれしいものです。

そしてダイナミックルーティングといえば、やはり上位ISPなどと接続する際に使用するBGPでしょう。シナプスでも上位ISPやIXに対してはBGPを使用して接続しています。

本当はBGPについてもお話ししたいところですが、すごーく記事が長くなりそうなので、それはまたいつか、どこかで。