こんにちは。ネットワールドSEの藤田です。
今回はVMware NSXの分散ルーティングについてご紹介します。
※これまでの投稿は末尾の過去記事をご参照下さい。
分散ルーティングは仮想基盤全体でルーティング処理を分散処理することにより、効率的かつ低遅延の通信を実現できる機能です。また、分散ルーティングを理解するには、SRとDRというコンポーネントの知識も必要です。少しややこしい内容になりますが、この点を理解できれば見通しがよくなるのではないかと思います。
- 免責事項
- 概要
- SR(サービスルータ)
- DR(分散ルータ)
- SRとDRのトランスポートノードへの配置
- Tier-0 SRを経由した通信
- 分散ルーティングの注意点
- Tier-1を加えた構成
- まとめ
- 過去記事
免責事項
- 本書は、株式会社ネットワールド(以下 弊社)が作成・管理します。
- 本書の記載内容の一部または全部を弊社に無断で改変・転載することを禁じます。
- 本書の記載内容は、一部または全部が将来予告無く変更されることがあります。
- 本書の利用は、利用者様の責任において行われるものとします。
- 本書の記載内容には、最善の注意を払っておりますが、正確性・完全性を保証するものではありません。従いまして、本書の利用によって生じたあらゆる損害に関して、弊社は一切の責任を負いかねます。
概要
まず下図をご覧下さい。

これまでTier-0、Tier-1とご説明してきましたが、実はさらにそれぞれがSRとDRに分割できます。
- SR : サービスルータ
- DR : 分散ルータ
Tier-0、Tier-1それぞれにSRとDRが構成されます。
※Tier-1にはSRなしの構成オプションがあります
SRは従来型の仮想アプライアンスとしてのルータと同等のものとお考えください。ゲートウェイファイアウォールやNATなどのステートフルサービスを構成するためのルータです。
DRは「分散ルーティング」を処理するためのものであり、これにより効率的で低遅延の通信を実現することができます。ただ、その分散処理するという特徴のために、ステートフルサービスは構成できません。
本記事でお伝えしたいことは下記三点です。
- SRはNSX Edge上で動作し、ステートフルサービスが機能する
- DRはNSX Edge、ESXiホスト上で動作し、分散ルーティングが機能する
- 分散ルーティングの通信フローとその注意点
まずはSRとDRを簡単にご紹介し、それから分散ルーティングの挙動について説明します。
SR(サービスルータ)
SRはステートフルサービスを処理するルータです。ステートフルサービスとは、通信の状態を管理する必要があるサービスです。
例として、ファイアウォールを想像して下さい。
インターネット通信を許可するために、社内からインターネット方向の許可ルールを一つ設定します。ステートフルファイアウォールであれば、行きのパケットはもちろん、戻りのパケットも自動的に許可されます。これは行きのパケットをセッション情報として保持し、戻りのパケットを判別することが可能だからです。一方、ステートレスファイアウォールでは、セッション情報を保持しないため、行き・戻りのルールを明示的に許可する必要があります

ステートフルな処理を行うには、必ず特定のポイントをパケットが通過する必要があります。そのポイントでセッション情報を保持し、行きと戻りの通信を判別する必要があるためです。
そのポイントとなるのが、SRです。つまり、NSX Edge内のTier-0/Tier-1内のSRがステートフルサービスを処理するポイントです。ここでファイアウォール、NATまたはVPNなどのステートフルなサービスを処理します。
※ステートフルのファイアウォール機能(分散処理を含む)はアドオンライセンスが必要です

ステートフルサービスを処理するため、SRは必ずNSX Edgeの内部にのみ構成されます。
では、次にDR(分散ルータ)について見ていきましょう。
DR(分散ルータ)
SRがファイアウォールやNATなどのステートフルサービスを構成するためにあるとすれば、DRは効率的なルーティングを実現するためにあります。その効率的なルーティングのことを「分散ルーティング」と呼びます。
これは、NSX Edgeに限らず、ESXiホストを含めたトランスポートノードでルーティングを分散処理する機能です。これまでの記事では、説明を簡素化するためこのDRの存在を無視していました。つまり、これまでTier-0/Tier-1と説明していたものは、ほぼSRのことを指していたわけです。SRとは異なり、DRはステートレスで動作します。
仕様上の制約として、分散ルーティングはオーバーレイセグメント間でのみ構成できます。VLANセグメントではご利用いただけない点はご注意ください。
以降では、分散ルーティングの機能をSRとDRのトランスポートノードがどのように配置されるかという観点から説明します。
SRとDRのトランスポートノードへの配置
理解しやすいように構成を整理します。NSX EdgeとESXiホストは仮想マシンとハイパーバイザーの関係であるため、以下のように表現できます。話がシンプルになるよう、これ以降は以下の構成を前提として説明します。
- NSX Edgeはシングル構成
- Tier-0のみで構成
- Tier-0で2セグメントを収容
- オーバーレイセグメントで構成

しかし、このようなネスト構成は分散ルータを理解するにはあまり適切なイメージではありません。
NSX EdgeもESXiホストも、トランスポートノードとして横並びでイメージして下さい。

ここにSRとDRを収めてみましょう。まず、SRはNSX Edgeにのみ配置されるので、以下のように収まります。

そして、DRはトランスポートノード「全て」に配置されます。

これらのDRは各トランスポートノードの中で独立して動作します。こうすることで、同じDRに接続している仮想マシン同士の通信は、NSX Edgeを経由する必要がなくなります。

さらに、同じESXiホストに仮想マシンが配置されている場合、物理ネットワークに出る必要もなくなります。

これが分散ルーティングです。
ルーティングの処理が分散されるため、NSX Edge、物理スイッチのパケット処理が抑制されます。つまり、無駄なリソースを消費しなくて済むということです。また、NSX Edgeを通過しないため、低遅延の通信を実現できます。
Tier-0 SRを経由した通信
Tier-0のSRを通過する通信フローも確認しておきましょう。その前提として、SRとDRの中継セグメントについて補足しておきます。
SRとDRの中継セグメントは「169.254.0.0/24」より自動払い出しされます。リンクローカルアドレスの範囲ですね。これは変更が可能なデフォルト設定です。先ほどからの構成図にもさりげなく記載しておりましたが、DR側のIPアドレスが全て同じです。どうも奇妙に感じられるかもしれませんが、この理由も通信フローに即して見ていきましょう。
では、仮想マシンからTier-0を通過する行きの通信を確認します。この通信はDRからSR方向の通信となります。SR側のIPアドレスは重複がないため、転送先のトランスポートノードは一意に決まります。

次に、Tier-0方向から仮想マシンへの戻り通信です。ここでDRが全てのトランスポートノードに配置されていることを思い出して下さい。つまり、トランスポートノードであるNSX Edgeの中にもDRは稼働しているわけです。そのため、SRは何も考えずに同じトランスポートノード(NSX Edge)で稼働しているDRへパケットを渡すだけで済みます。つまり、この方向の通信にはどのトランスポートノードへ転送するかという選択がそもそも発生しないということです。こうして、DR側はすべて同じIPアドレスでも問題なく処理できます。

さて、Tier-0 SRを介する通信を見ると、行きと戻りで異なるDRを通過していることがわかります。分散ルーティングに伴う構成上の注意点もこの挙動から生じるものです。
分散ルーティングの注意点
分散ルーティングはほぼ非対称ルーティングになります。DRはパケットが発生した地点からなるべく近い場所でルーティングを処理します。これにより物理ネットワークへ流れるパケットは抑制されます。その結果、行きと戻りのパケットは異なる経路を辿ります。
Tier-0 SRを経由した通信もDR観点では非対称ルーティングでした。SRを通過しなくても非対称ルーティングは発生します。
例えば、次のような行きの通信があります。仮想マシンが稼働するESXiホストのDRでルーティングして、相手の通信先へパケットが届きます。

戻りの通信は以下のようになります。これは通信先の仮想マシンが稼働しているESXiホストでルーティングして、パケットは戻されます。パケットを生成した仮想マシンにもっとも近いDRで常にルーティングが処理されます。

各ESXiホストで分散ルーティング処理がなされるため、行きと戻りで通過するDRが異なる結果となります。つまり、DRはステートフルサービスを構成できるような仕様にはなっていないということです。そのため、上記の例のように、DRで接続した仮想マシン同士の通信をNSX Edgeのファイアウォールで制御することはできません。DRは分散ルーティングだけを処理し、その経路にステートフルサービスを処理するSRが介在しないためです。
では同じDR配下にある仮想マシン同士のアクセス制御はどうすればいいのかと疑問が出てきます。
こちらは同じく分散サービスである、分散ファイアウォール機能と併用することになります。分散ファイアウォール機能は仮想マシンのvNIC単位でアクセス制御ができるため、SR/DRの構成に依存せずに動作します。
Tier-1を加えた構成
Tier-1における分散ルーティングの挙動も基本的には同じです。Tier-0のSRとDRがあり、さらにそこへTier-1のSRとDRがぶら下がります。(Tier-1のSRは必須ではありません)
ここでは構成上の注意を一点補足します。以下の構成例をご覧ください。

Tier-1が複数構成されていますが、どれもTier-0のDRへ接続されています。ここで注意が必要なのは、Tier-1間の通信はTier-0のDRのみを通過するという点です。Tier-0のファイアウォールでTier-1間の通信を制御しようとしても、Tier-0のSRを通過しないため制御できません。

この場合は各Tier-1のSRでファイアウォールを構成するか、分散ファイアウォール機能で制御を行う必要があります。
まとめ
今回は分散ルーティングの基本的な挙動についてご説明しました。
SR、DRや分散ルーティングの設定については、NSXの管理画面上ではそれほど意識しなくても設定自体は出来てしまいます。それだけに、その挙動を理解していないと、不可解な挙動となり理解に苦しむことになります。本記事が少しでも理解の助けになれば幸いです。
是非次回の更新もご覧ください。ありがとうございました。