【図解】VRF の概要や仕組み、構成例、設定例について

VRFとは?

VRFとはVirtual Routing and Fowardingの略で、物理ルータ(もしくはL3スイッチ)の中に仮想ルータを作成し、独立したルーティングテーブルを保持する機能です。つまり、1台の物理ルータの中に複数の仮想ルータを作ることができる機能です。

VLANは、L2の世界で物理スイッチの中に仮想スイッチを作成する、L2の仮想化技術と考えることができますが、VRFは、L3の世界で物理ルータ(もしくはコアスイッチ)の中に仮想ルータを作成する、L3の仮想化技術です。つまり、VLANとVRFの違いは、L2の仮想化技術かL3の仮想化技術か、という点です。

また、サーバの世界で言えば、物理サーバの中に(Redhat KVMやWindows hyper-V等の)ハイパーバイザ型仮想サーバを作成するのに似ています。

FortiGate の VDOM も VRF と全く同じ考え方をしています。

VRFの構成

VRFを構成するにはまずルータ上で「VRFインスタンス」を作成します。これは仮想ルータのことです。TestVRF1という名前のVRFインスタンスを作成する場合、名前以外に「Route Distinguisher(RD)」というVRFの識別子も必要になります。RDは[0-65535]:[0-4294967295]の間で設定することができます。

VRFでRDが必要となる理由は単純で、VRFではルーティングテーブル情報をVRF名ではなくRDで管理しているためです。VRF名とIPアドレスをセットにする、ということもできたと思いますが、VRF名は文字列なので、それよりも数値であるRDとIPアドレスを並べることが適切だと考えたのでしょう。

以下の例ではRD=10:10 という設定にしています。

(config)# ip vrf TestVRF1
(config-vrf)# rd 10:10

スポンサーリンク

これにより仮想ルータが1台できます。しかしインタフェースを1つも持たない状態なので何もできません。

次に、L3インタフェースに、先程作成したVRFインスタンスを割り当てます。これは物理インタフェースでもサブインタフェースでも、L3スイッチであればVLANインタフェースでも構いません。IPアドレスの設定ができるインタフェースです。

(config)# interface gi 1/0
(config-if)# ip vrf forwarding TestVRF1
(config-if)# ip address 10.100.100.1 255.255.255.0
(config)# interface gi 1/1
(config-if)# ip vrf forwarding TestVRF1
(config-if)# ip address 10.100.200.1 255.255.255.0

この設定により、gi1/0およびgi1/1インタフェースが「TestVRF1」という仮想ルータのConnectedインタフェースとして認識されるようになります

すると、そのインタフェースは物理ルータ(Globalインスタンスと言います)からは見えなくなります。そして、10.100.100.0/24はGlobalインスタンスのルーティングテーブル(Globalルーティングテーブルと言います)には見えない状態になります。

このことからも分かりますが、インスタンス間ではIPアドレスを重複させることができます

ただし、インスタンス間でのルーティングも設定することができますが、IP重複の際は設計がややこしくなるため、注意が必要です。なお、VRF上でルーティングを書く場合は下記のような設定になりますが、

[VRF上のStaticルート追加]

(config)# ip route vrf TestVRF1 192.168.0.0 255.255.0.0 10.100.100.2

VRF間のルーティングの書き方は以下のようになります

[TestVRF1インスタンスからGlobalインスタンスへのルーティング追加]

(config)# ip route vrf TestVRF1 192.168.0.0 255.255.0.0 gi 0/0 10.1.1.254

※gi 0/0 は Globalインスタンスに所属しているインタフェースで、IPアドレスは10.1.1.0/24のレンジから払い出されているものとします。

[GlobalインスタンスからTestVRF1インスタンスへのルーティング追加]

(config)# ip route 192.168.0.0 255.255.0.0 gi 1/0 10.100.100.254

このように、NextHopの指定に出力インタフェースとIPアドレスの両方を書く必要があります。

スポンサーリンク

VRFを利活用したベストプラクティス

ファイアウォールは便利な反面、費用が高く、あちこちに置くわけにはいきません。そこで、VRFを利用して論理設計を柔軟にすることが重要です。

コアスイッチとファイアウォールを接続し、コアスイッチのVRFによりVLANで経路を分け、ファイアウォールを通る経路と通らない経路に分離することもできます。これはPBRでも実現できますが、それよりも設計が楽になり、管理しやすくなります。

その際、スタックやLink Aggregationでの冗長化との相性も良いです。

L3スイッチをスタック(集約)し、VRFで分離(分散)、Link Aggregationでバンドル(集約)し、VLANで分離(分散)、といった集約と分散を繰り返す構成で、信頼性を高めながら柔軟性も確保することができます

VRFの制約

仮想ルータといっても、あくまでインタフェースやルーティングテーブルを他から分離するものであり、いくつかのリソースはルータ全体で管理しなければなりません。どこまで全体設定でどこから個別設定になるかは実装によりますが、ciscoの場合、例えばプロセス管理はルータ全体で行われます(その点では仮想サーバとは大きく異なります)。

なので、OSPFのプロセスIDは、全体で重複してはなりません。また、同様にOSPF等のルータIDも重複できません

また、『VRF間でIPアドレスは重複できるが、VLAN IDは重複できない』ということが機器の実装としてしばしば見られます。これはVLAN IDというよりはVLANインタフェース(SVI)が重複できない、と解釈すべきです。VRFでは『IPアドレスを持つ物理および論理インタフェースをどのVRFに所属させるか』を設定するものなので、VLAN(論理)インタフェースはVRF間で共有できないのです。

MPLS-VPNでのVRFの実装

また、VRFはMPLS-VPNを構成する重要なコンポーネントで、上記とは異なる、特殊な使われ方になります。

詳細はこちらのページをご参照下さい。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする