2022年6月25日土曜日

同一セグメントにおいてルーティングが必要な場合の対処方法 (ロンゲストマッチはAD値よりも優先される話)

ネットワーク機器やサーバなどにおいては、直接属しているネットワークを「Connected」という状態で認識する。Connectedのネットワークは同一セグメントとなることから、ルーティングはされることなく直接通信することが可能となる。

ただし、同一セグメントにおいても、ネクストホップを指定してルーティングを実施したい場合がある。

本記事では、同一セグメントにおいてもルーティングが必要なケースを例として挙げ、それを解決するための方法について記載する。

Connectedネットワークにおいてもルーティングが必要なケース

例として、負荷分散装置が存在するような以下ネットワーク構成で考えてみよう。負荷分散装置の仮想IP間で通信するサーバが2セット(サーバA-1・A-2とB-1・B-2)ある場合を想定する。すべてのサーバは同一セグメントではあるが、負荷分散装置を経由して通信させたい場合を考える。

この場合、各サーバはConnectedとなっているネットワークとなることから、負荷分散装置経由で通信を受け取っても、戻りの通信を負荷分散装置ではなくサーバに直接返そうとする。これにより、行きと戻りで非対称のルーティングとなるため通信に失敗する。

解消方法①:負荷分散装置でSource NATする

本方法はルーティングによる解決ではないく、負荷分散装置でSource NAT (送信元NAT) をすることで、同一セグメント間の通信として戻り通信を負荷分散装置に戻す方法となる。

Source NATすることで通信は必ず負荷分散装置に戻るため、非対称ルーティングとならない。ただし、通信元のIPアドレスがすべて負荷分散装置のIPアドレスとなってしまうため、通信元のIPアドレスを特定するためには、アプリケーション側で何らかの考慮をする必要がある。

解消方法②:Connectedのネットワークよりもプレフィックス長が長いスタティックルートを設定する

通信元のIPアドレスを必ず実IPで受け取りたい場合など、Source NAT使えない場合がある。そのような場合、あるルールを満たせばスタティックルートをConnectedより優先させることができる。

通常ルーティングには、優先順位として「AD値 (Administrative Distance)」が設定されている。AD値は低いほど優先順位が高く、Cisco機器を例として記載すると、Connectedのネットワークは0、スタティックルートは1、それ以外のダイナミックルーティングは1より大きい数で設定されている。

したがって、一見するとConnectedのネットワークは最優先で処理されてしまい、スタティックルートで制御することは困難であると考えてしまう。しかし、もう一つルーティングの優先順位を決めるルールとして、「ロンゲストマッチ (Longest match)」がある。

ロンゲストマッチとは、同じIPアドレス宛てのルーティングルールが複数ある場合、もっともサブネットのプレフィックス長が長いものを優先するというルールである。例えば、以下のような2つのスタティックルートがある場合は、よりプレフィックス長が長い/28のルートが採用される。

種類 ネットワーク ネクストホップ
Static route 192.168.10.0/24 192.168.20.254
Static route 192.168.10.0/28 192.168.20.201

重要な点は、ロンゲストマッチはAD値よりも優先されて処理されることである。そのため、Connectedのネットワークよりもプレフィックス長が長いスタティックルートを作れば、スタティックルートを優先させることができる

今回の例では、以下の通りサーバB-1およびサーバB-2に/32のスタティックルートを設定すればよい。これによって、サーバA-1およびサーバB-2あての通信は、必ず負荷分散装置のIPアドレスを経由させることができる。

種類 ネットワーク ネクストホップ
Connected 192.168.10.0/24 -
Static route [サーバA-1のIP]/32 [負荷分散装置のIP]
Static route [サーバA-2のIP]/32 [負荷分散装置のIP]

ただし、もしサーバA-1とサーバB-1間で負荷分散装置を経由せず、直接通信させる要件などもある場合はこの方法では対処できない。そのような場合は、解消方法①のSource NATによる対応を検討しよう。

以上。

0 件のコメント:

コメントを投稿

人気の投稿