VRFの設定の流れ

VRFで1台のルータを仮想的に分割して、ルーティングを行うための設定の流れは以下のようになります。

  1. VRFの作成
  2. VRFにインタフェースの割り当て
  3. VRFごとのルーティングの設定

「VRFごとにルーティングテーブルを作成する」ということを明確にイメージしながら設定してください。

VRFの設定コマンド

VRFの作成

VRFを作成するためには、グローバルコンフィグレーションモードで次のコマンドを入力します。

VRFの作成

(config)#ip vrf <vrf-name>
(config-vrf)#rd <rd>

<vrf-name> : VRF名
<rd> : RDの値

VRFは任意の名前を設定します。そして、RD(Route Distinguisher)でグローバルおよび他のVRFとのアドレス体系が重複しないようにします。RDは64ビットで、VRFを利用しているとRD:IPアドレスのフォーマットでアドレスを認識します。RD:IPアドレスとして96ビットのアドレスフォーマットをVPNv4アドレスと呼びます。RDの値として<AS番号>:<任意の値>とする設定が一般的です。

Notice

  • MPLS-VPNにおいては、さらにRT(Route Target)の設定が必要です。

VRFにインタフェースを割り当てる

作成したVRFにインタフェースを割り当てます。割り当てたいインタフェースのインタフェースコンフィグレーションモードで次のコマンドを入力します。

VRFにインタフェースを割り当てる

(config)#interface <interface-name>
(config-if)#ip vrf forwarding <vrf-name>
(config-if)#ip address <address> <subnetmask>

<interfane-name> : インタフェース名
<vrf-name> : VRF名
<address> <subnetmask> : IPアドレス サブネットマスク

VRFにインタフェースを割り当てるとそのインタフェースは該当のVRFに含まれるようになり、もともとのルータのインタフェースではなくなってしまいます。インタフェースにすでにIPアドレスが設定されている場合は、IPアドレスの設定が削除されます。そのため、再度、IPアドレスを設定してください。

VRFに割り当てたインタフェースにIPアドレスを設定すると、VRFのルーティングテーブル上に直接接続のルート情報が登録されます。本来のグローバルルーティングテーブルにはVRFに割り当てたインタフェースのルート情報は出てこなくなります。

VRFごとのルーティングの設定

VRFごとのルーティングの設定を行って、ルーティングテーブルを作成します。VRFに割り当てたインタフェースにIPアドレスを設定すると、VRFのルーティングテーブルに直接接続のルート情報が登録されます。通常のルーティングと同じように直接接続ではないリモートネットワークのルート情報をVRFのルーティングテーブルに登録します。VRFのルーティングテーブルにリモートネットワークのルート情報を登録するための方法は、以下の2つです。通常のルーティングと考え方は同じです。以下の設定でVRFのルーティングテーブルにリモートネットワークのルート情報を登録してください。

  • スタティックルート
  • ルーティングプロトコル

スタティックルート

VRFのルーティングテーブルにスタティックルートを登録するためには、ip routeコマンドでVRFを指定します。

VRFのスタティックルート

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

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

ルーティングプロトコル

ルーティングプロトコルは、設定の考え方が2つにわかれます。1つのルーティングプロセスで複数のVRFを扱うことができるルーティングプロトコルと、VRFごとに複数のルーティングプロセスを設定しなければいけないルーティングプロトコルがあります。1つのルーティングプロセスで複数のVRFを扱うためにはaddress-familyとしてVRFを指定します。

1つのルーティングプロセスRIP、EIGRP、BGP
複数のルーティングプロセスOSPF
表 ルーティングプロセスの違い

Notice

OSPFv3では、1つのルーティングプロセス上でaddress-familyによってVRFを扱うことができるようになっています。このページでは、address-familyに対応していない従来のOSPFv2プロセスの設定について解説します。

RIP

VRFでRIPを有効化するには、RIPのコンフィグレーションモードでaddress-familyコマンドによってVRFを指定します。address-familyの中では、通常のRIPの設定と同様です。

VRFごとのRIPの設定

(config)#router rip
(config-router)#address-family ipv4 vrf <vrf-name>
(config-router-af)#network <network>
(config-router-af)#version 2
(config-router-af)#no auto-summary

<vrf-name> : VRF名
<network> : ネットワークアドレス

EIGRP

VRFでEIGRPを有効化するには、EIGRPのコンフィグレーションモードでaddress-familyコマンドによってVRFを指定します。address-familyの中では、AS番号を指定してnetworkコマンドでEIGRPを有効化するインタフェースを決めます。

VRFごとのEIGRPの設定

(config)#router eigrp <AS1>
(config-router)#address-family ipv4 vrf <vrf-name>
(config-router-af)#autonomous-system <AS2>
(config-router-af)#network <address> [<wildcard>]
(config-router-af)#no auto-summary

<AS1> : グローバルのルーティングプロセスのAS番号
<vrf-name> : VRF名
<AS2> : VRFのAS番号
<network> : ネットワークアドレス
<wildcard> : ワイルドカードマスク

IOSのバージョンによっては、以下のようにVRFごとのAS番号の指定のコマンドが違います。

(config)#router eigrp <AS1>
(config-router)#address-family ipv4 vrf <vrf-name> autonomous-system <AS2>

このコマンドフォーマットになっているIOSバージョンでも、(config-router-af)#autonomous-systemコマンドも認識はされます。ただ、ヘルプで表示されなくなっています。

BGP

VRFでBGPを有効化するには、BGPのコンフィグレーションモードでaddress-familyコマンドによってVRFを指定します。address-familyの中では、ネイバーのIPアドレスを指定して、そのネイバーをアクティベイト(有効化)します。また、networkコマンドでBGPルートとしてアドバタイズするネットワークアドレスを指定します。

VRFごとのBGPの設定

(config)#router bgp <AS1>
(config-router)#address-family ipv4 vrf <vrf-name>
(config-router-af)#neighbor <ip-address> remote-as <AS2>
(config-router-af)#neighbor <ip-address> activate
(config-router-af)#network <network> [mask <subnetmask>]

<AS1> : 自AS番号
<vrf-name> : VRF名
<ip-address> : ネイバーのIPアドレス
<AS2> : ネイバーのAS番号
<network> : ネットワークアドレス
<subnetmask> : サブネットマスク

OSPF

OSPFでは、ルーティングプロセスを有効化する際にVRFを指定します。あとは通常のOSPFの設定と同様です。

VRFごとのOSPFの設定

(config)#router ospf <process> vrf <vrf-name>
(config-router)#network <network> <wildcard> area <area>

<process> : プロセス番号
<vrf-name> : VRF名
<network> : ネットワークアドレス
<wildcard> : ワイルドカードマスク
<area> : エリア番号

VRF間の通信

VRFごとのルーティングテーブルは分離しています。そのため、VRFが異なると通信できません。異なるVRF間で通信する必要があれば、VRFルートリークの設定を行います。VRFルートリークによって、あるVRFのルーティングテーブルに他のVRFのルート情報を登録できます。ルーティングテーブルに他のVRFのルート情報を登録すれば、VRF間の通信ができるようになります。

VRFの確認

VRFの設定と動作を確認するための主なコマンドを以下の表にまとめています。

コマンド概要
#show ip vrf [detail]VRFの状態を確認します。detailをつけると、より詳細なVRFの状態がわかります。
#show ip route vrf <vrf-name>VRFのルーティングテーブルを表示します。
#ping vrf <vrf-name> <ip-address>指定したVRFのルーティングテーブルに基づいてPingを実行します。
#traceroute vrf <vrf-name> <ip-address>指定したVRFのルーティングテーブルに基づいてTracerouteを実行します。
#telnet <ip-address> /vrf <vrf-name>指定したVRFのルーティングテーブルに基づいてTelnetを実行します。
表 VRFの主な確認コマンド

show ip vrf [detail]

show ip vrfコマンドでVRFの状態を表示します。VRFのRD値や割り当てているインタフェースを確認してください。また、detailをつけると詳細な情報がわかります。MPLS-VPNで利用するときは、RT(Route Target)も確認します。

show ip vrf/show ip vrf detail

P1#show ip vrf
  Name                             Default RD          Interfaces
  VRF-A                            10:10               Et0/1
                                                       Lo1
                                                       Et0/0.10
  VRF-B                            20:20               Et0/2
                                                       Lo2
                                                       Et0/0.20
P1#show ip vrf detail
VRF VRF-A; default RD 10:10; default VPNID 
  Interfaces:
    Et0/1                    Lo1                      Et0/0.10
  Connected addresses are not in global routing table
  No Export VPN route-target communities
  No Import VPN route-target communities
  No import route-map
  No export route-map
  VRF label distribution protocol: not configured
VRF VRF-B; default RD 20:20; default VPNID 
  Interfaces:
    Et0/2                    Lo2                      Et0/0.20
  Connected addresses are not in global routing table
  No Export VPN route-target communities
  No Import VPN route-target communities
  No import route-map
  No export route-map
  VRF label distribution protocol: not configured

show ip route vrf <vrf-name>

VRFごとのルーティングテーブルを表示するには、show ip route vrf <vrf-name>コマンドを利用します。

show ip route vrf <vrf-name>

P1#show ip route vrf VRF-A
 
Routing Table: VRF-A
~省略~
 
Gateway of last resort is not set
 
C    192.168.0.0/24 is directly connected, Ethernet0/0.10
C    192.168.1.0/24 is directly connected, Ethernet0/1
     192.168.100.0/32 is subnetted, 1 subnets
C       192.168.100.1 is directly connected, Loopback1
P1#show ip route vrf VRF-B
 
Routing Table: VRF-B
~省略~
 
Gateway of last resort is not set
 
C    192.168.0.0/24 is directly connected, Ethernet0/0.20
C    192.168.1.0/24 is directly connected, Ethernet0/2
     192.168.100.0/32 is subnetted, 1 subnets
C       192.168.100.1 is directly connected, Loopback2

ping vrf <vrf-name> <ip-address>

VRFでの通信を確認するためには、それぞれのVRFのルーティングテーブルに基づいてPingを実行します。ping vrf <vrf-name>コマンドで指定したVRFのルーティングテーブルに基づいてPingを実行します。

ping vrf <vrf-name>

P1#ping vrf VRF-A 192.168.10.101 source loopback 1
 
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.101, timeout is 2 seconds:
Packet sent with a source address of 192.168.100.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/29/40 ms

traceroute vrf <vrf-name> <ip-address>

VRFのルーティングテーブルに基づいてトレースルートを実行するために、traceroute vrf <vrf-name>コマンドを利用してください。

traceroute vrf <vrf-name>

P1#traceroute vrf VRF-A 192.168.10.101 source loopback 1

Type escape sequence to abort.
Tracing the route to 192.168.10.101

  1 192.168.1.11 8 msec 28 msec 20 msec
  2 192.168.10.101 24 msec 44 msec 36 msec

telnet <ip-address> /vrf <vrf-name>

VRFのルーティングテーブルに基づいてTelnetを行うには、/vrfのオプションでVRF名を指定してください。

telnet <ip-address> /vrf <vrf-name>

P1#telnet 192.168.100.11 /vrf VRF-A
Trying 192.168.100.11 ... Open

A1#exit

[Connection to 192.168.100.11 closed by foreign host]
P1#

PingやTraceroute、Telnetを実行するときにはVRFの指定を忘れないように注意してください。VRFの指定をしなければグローバルルーティングプロセスのルーティングテーブルに基づいてコマンドを実行してしまいます。その場合、VRFの通信の確認はできません。

Multi AF modeのVRF設定(新しいコマンドフォーマット)

VRFでIPv4だけでなくIPv6のAddress-familyも扱えるようになっています。複数のAddress-familyに対応したMulti AF mode VRFの作成とインタフェースの割り当ては、IPv4のみのVRFの設定と若干コマンドが異なります。Multi AF modeでIPv4用のVRFを作成するには、グローバルコンフィグレーションモードで次のコマンドを入力します。

Multi AF mode VRFの作成

(config)#vrf definition <vrf-name>
(config-vrf)#rd <RD>
(config-vrf)#address-family ipv4
(config-vrf-af)#

<vrf-name> : VRF名
<RD> : RDの値

そして、VRFにインタフェースを割り当てます。インタフェースコンフィグレーションモードで次のコマンドを入力します。

Multi AF mode VRFにインタフェースを割り当てる

(config)#interface <interface-name>
(config-if)#vrf forwarding <vrf-name>
(config-if)#ip address <address> <subnetmask>

<interfane-name> : インタフェース名
<vrf-name> : VRF名
<address> <subnetmask> : IPアドレス サブネットマスク

VRFにインタフェースを割り当てると、そのインタフェースのIPアドレスは削除されます。再度、IPアドレスを設定してください。

VRFごとのルーティングプロトコルの設定は、Multi AF modeでもIPv4のみのVRFと同様です。

Multi AF mode VRFの設定コマンドの変換

IPv4 VRFの設定コマンドを新しいMulti AF mode VRFの設定コマンドへ変換できます。グローバルコンフィグレーションモードで次のコマンドを入力します。

Multi AF mode VRFの設定コマンドの変換

(config)#vrf upgrade-cli multi-af-mode common-policies

以下は、vrf upgrade-cliコマンドでIPv4 VRFの設定コマンドをMulti AF mode VRFの設定コマンドを変換している例です。

Multi AF mode VRFの設定コマンドの変換例

IOU3#show run | section vrf|interface Ethernet0/0
ip vrf TEST
 rd 65001:100
interface Ethernet0/0
 ip vrf forwarding TEST
 ip address 192.168.1.1 255.255.255.0
IOU3#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
IOU3(config)#vrf upgrade-cli multi-af-mode common-policies
You are about to upgrade to the multi-AF VRF syntax commands.
You will lose any IPv6 addresses configured on interfaces
belonging to upgraded VRFs.

Are you sure ? [yes]: yes
Number of VRFs upgraded: 1
IOU3(config)#end
IOU3#show run | section vrf|interface Ethernet0/0
vrf definition TEST
 rd 65001:100
 !
 address-family ipv4
 exit-address-family
interface Ethernet0/0
 vrf forwarding TEST
 ip address 192.168.1.1 255.255.255.0

IPルーティング応用