概要

VRFによって1台のルータを仮想的に分割します。VRF同士は独立しているので、基本的にVRF間の通信はできなくなります。異なるVRFのネットワーク間で通信したいという場合に、VRFルートリークの設定を行います。

スタティックルートでのVRFルートリークについて解説します。

VRF間の通信を可能にするルートリーク

VRFは、独立した仮想的なルータです。各VRFは、独立したルーティングテーブルなどのルーティングコンテキストを持っています。そして、VRF同士は相互接続されていないので、VRF間の通信は原則としてできません。

異なるVRF間であっても、通信を可能にするためにVRFルートリークの設定を行います。VRFルートリークとは、他のVRFのネットワークのルート情報をルーティングテーブルに登録することです。それにより、VRF間の通信を可能にします。

VRFルートリークの例

以下のシンプルなネットワーク構成でVRFルートリークについて考えます。R1でVRF「AAA」とVRF「BBB」を設定しています。R1の内部で、VRF「AAA」とVRF「BBB」は相互接続されていないため、VRF間の通信はできません。

図 VRFルートリークの例 その1
図 VRFルートリークの例 その1

VRF「AAA」とVRF「BBB」間で通信できるようにVRFルートリークの設定を行います。ただ、無制限にVRF間の通信をできるようにすると、VRFを利用する意味がありません。たいていは、異なるVRFの特定のネットワーク間だけに限定することが多いです。そこで、VRF「AAA」の192.168.1.0/24とVRF「BBB」の172.16.1.0/24間のみ通信可能にする例を考えます。

図 VRFルートリークの例 その2
図 VRFルートリークの例 その2

VRFルートリークの考え方はとてもシンプルです。ルーティングの原則を思い出しましょう。「ルーティングテーブルに登録されていないネットワーク宛ての通信はできない」ということです。これは、逆にいえば「ルーティングテーブルに登録されているネットワーク宛ての通信はできる」わけです。とても基本的な、なおかつ、大事な原則です。

それぞれのVRFのルーティングテーブルには、他のVRFのネットワークのルート情報は登録されません。だから、VRF間の通信ができないのです。そして、VRFルートリークとは、「VRFのルーティングテーブルに他のVRFのルートを登録する」ことです。ルーティングテーブルに載せれれば、他のVRFのネットワークでもパケットをルーティングできるようになります。

R1のVRF「AAA」のルーティングテーブルに、通信させたいVRF「BBB」の172.16.1.0/24を登録すればOKです。通信は双方向なので、VRF「BBB」のルーティングテーブルにはVRF「AAA」の192.168.1.0/24を登録することも必要です。

 図 VRFルートリークの例 その3
図 VRFルートリークの例 その3

なお、VRFルートリークでVRF間の通信を行うには、IPアドレスが重複していてはいけません。

VRFルートリーク(スタティックルート)の設定と確認コマンド

VRFのルーティングテーブルに通信させたい他のVRFのルートをスタティックルートで登録します。ネクストホップのIPアドレスへの到達性と出力インタフェースをどのように決めるかによって2通りの設定ができます。

  1. グローバルルーティングテーブルを参照する
  2. ネクストホップと出力インタフェースを指定する

グローバルルーティングテーブルを参照する

ネクストホップのIPアドレスへの到達性をグローバルルーティングテーブルによって確保するためにはグローバルコンフィグレーションモードで次のコマンドを入力します。

VRFルートリーク スタティックルート その1

(config)#ip route vrf <vrf-name> <network> <subnetmask> <next-hop> global

<vrf-name> : VRF名
<network> <subnetmask> : 他のVRFのネットワークアドレス/サブネットマスク
<next-hop> : ネクストホップアドレス

ポイントは「global」でネクストホップをグローバルルーティングテーブルを見るように設定することです。

ルート情報はネクストホップへ到達できない状態では有効になりません。スタティックルートのネクストホップへの到達性は、通常はルーティングテーブルの直接接続のルート情報を見ます。ですが、ネクストホップのIPアドレスは他のVRFのものです。VRF内の直接接続のルート情報ではネクストホップの到達性がありません。

そこで、ネクストホップの到達性と出力インタフェースを決めるためにグローバルルーティングテーブルを参照するように「global」を指定します。そして、グローバルルーティングテーブルにネクストホップのIPアドレスのホストルートを設定します。

グローバルルーティングテーブル ネクストホップの指定

(config)#ip route <ip-address> <subnetmask> <interface>

<ip-address> <subnetmask> : ネクストホップのIPアドレスに対するホストルート
<interface> : ネクストホップに対する出力インタフェース

ホストルートでなくてもOKではありますが、ネクストホップへの到達性を確保するための設定なので個人的にはいつもホストルートで設定しています。ネクストホップのIPアドレスのスタティックルートを出力インタフェースで指定することで、directly connected扱いになります。その結果、ネクストホップに対する出力インタフェースがわかります。

ネクストホップと出力インタフェースを指定する

もっとシンプルな設定もできます。他のVRFのルートをスタティックルートで設定するときに出力インタフェースの指定を追加してもOKです。

VRFルートリーク スタティックルート その2

(config)#ip route vrf <vrf-name> <network> <subnetmask> <interface> <next-hop>

<vrf-name> : VRF名
<network> <subnetmask> : 他のVRFのネットワークアドレス/サブネットマスク
<interface> : 出力インタフェース
<next-hop> : ネクストホップアドレス

出力インタフェースは他のVRFに割り当てられているのですが、とりあえず、出力インタフェースがわかればパケットを出力できます。

VRFルートリーク(スタティックルート)の確認コマンド

VRFルートリーク(スタティックルート)の設定を確認するための主なコマンドは次の通りです。

コマンド概要
#show ip route vrf <vrf-name>VRFのルーティングテーブルを表示します。
#show ip routeグローバルルーティングテーブルを表示します。
#ping vrf <vrf-name> <ip-address>VRFを指定したPingを実行します。
表 VRFルートリーク(スタティックルート)の確認コマンド

まとめ

  • VRFが異なると原則として通信はできなくなります。
  • VRF間で通信できるようにするために、VRFルートリークの設定を行います。
  • VRFルートリークとは、VRFのルーティングテーブルに通信させたい他のVRFのルートを登録することです。
  • スタティックルートでのVRFルートリークの設定は、ネクストホップへの到達性をどのように確保するかによって2通りの設定ができます。
    • グローバルルーティングテーブルを参照する
    • ネクストホップと出力インタフェースを指定する

IPルーティング応用