ルータ2台で始めるVRF入門(1)

はじめに

ネットワークの仮想化ごにょごにょとか言われちゃったりする昨今、皆様いかがお過ごしでしょうか。

ネットワークの仮想化と言えばまずまっさきに出てくるのが VLAN なのですが、これは L2 broadcast domain の仮想化と分離なわけです。キャンパスネットワークなんかだともう VLAN アタリマエでどこに行っても必ず使われているでしょうおそらく。で、もう少し最近になって使われている技術に VRF (VRF-Lite) があります。これは L3 Routing/Forwarding の仮想化ってことで、今回取り上げるのはこれ。こいつを、自宅 Lab の定番、Cisco 1812J を 2台つかって、基本設定と経路操作の話を見ていこうと思っています。

ちなみに、ざっと内容書いてみたらたぶん全6回くらいになります なりました。

[追記 2013-01-06]

VRFとは

  • MPLS/IP-VPN で使われている技術。
    • でも MPLS と一緒に使わなくても、単純に VRF によるルーティングテーブルの分離(L3の環境分離)ができるだけでもいろいろやれるので、MPLS 非対応の機器でも VRF が使えるようになっています。このように、MPLS/IP-VPN 機能がなく L3 仮想化機能として使う VRF を VRF-Lite と呼んでいるようです。
  • 細かく書くときりがないので書きませんが、下記記載のキーワードはある程度みておかないと、後々わからなくなります。*1
    • MP-BGP
    • Route Distinguisher (RD) と vpnv4 (VPN IPv4) address family
    • Route Target 拡張コミュニティ
  • 参照

物理構成

用意する物:

  • Cisco 1812J 2台
    • まあ ipservices 以上のIOSだと最近のであれば大概 VRF 使えるのでそのへんがあればいいです。
  • LANケーブル1本(最低)

物理構成は上図の通り。必要な構成は全部 VLAN で作るので、物理構成はルータ 2 台を 1 本の線でつなぐだけ。今回は Fa2 を選択。これを trunk port として設定しておきます。

interface FastEthernet2
 switchport mode trunk
 no ip address
end                            

Fa0 は管理用のリモートアクセスなので全部シリアルでやるなら要りません。今回、管理系の接続は vrf "mgmt" というのを作ってチュートリアル上は見えないようにしてあります。(この辺はまた別途。)

VRF 基礎の基礎

論理構成

とりあえず1台からスタート。


設定

単純に、VRF をつくってみます。

  • GRT (Global Routing Table: デフォルトで存在する規定のルーティングテーブルです。)
interface Loopback0
 ip address 10.0.0.0 255.255.255.255
!
interface Vlan720
 ip address 10.2.0.1 255.255.255.0
!
interface Vlan800
 ip address 10.1.0.1 255.255.255.0
!
  • expvrf01
exprtr1#sh run vrf expvrf01

ip vrf expvrf01
 rd 64601:1
 route-target export 64601:1
 route-target import 64601:1
!
!
interface Loopback1
 ip vrf forwarding expvrf01
 ip address 10.0.0.1 255.255.255.255
!
interface Vlan801
 ip vrf forwarding expvrf01
 ip address 10.1.1.1 255.255.255.0
!
end
  • expvrf02
exprtr1#sh run vrf expvrf02

ip vrf expvrf02
 rd 64601:2
 route-target export 64601:2
 route-target import 64601:2
!
!
interface Loopback2
 ip vrf forwarding expvrf02
 ip address 10.0.0.2 255.255.255.255
!
interface Vlan722
 ip vrf forwarding expvrf02
 ip address 10.2.2.1 255.255.255.0
!
interface Vlan802
 ip vrf forwarding expvrf02
 ip address 10.1.2.1 255.255.255.0
!
end
  • expvrf03
exprtr1#sh run vrf expvrf03
ip vrf expvrf03
 rd 64601:3
 route-target export 64601:3
 route-target import 64601:3
!
!
interface Loopback3
 ip vrf forwarding expvrf03
 ip address 10.0.0.3 255.255.255.255
!
interface Vlan723
 ip vrf forwarding expvrf03
 ip address 10.2.3.1 255.255.255.0
!
interface Vlan803
 ip vrf forwarding expvrf03
 ip address 10.1.3.1 255.255.255.0
!
end
確認

各 VRF のパラメータの確認:

exprtr1#sh ip vrf
  Name                             Default RD          Interfaces
  expvrf01                         64601:1             Lo1
                                                       Vl801
  expvrf02                         64601:2             Lo2
                                                       Vl722
                                                       Vl802
  expvrf03                         64601:3             Lo3
                                                       Vl723
                                                       Vl803
  mgmt                             65535:1             Fa0
exprtr1#

各 VRF の持っている経路情報の確認:

  • Route/GRT
exprtr1#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C        10.0.0.0/32 is directly connected, Loopback0
C        10.1.0.0/24 is directly connected, Vlan800
L        10.1.0.1/32 is directly connected, Vlan800
C        10.2.0.0/24 is directly connected, Vlan720
L        10.2.0.1/32 is directly connected, Vlan720
exprtr1#
  • Route/expvrf01
exprtr1#sh ip route vrf expvrf01

Routing Table: expvrf02
(略)
Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
C        10.0.0.1/32 is directly connected, Loopback1
C        10.1.1.0/24 is directly connected, Vlan801
L        10.1.1.1/32 is directly connected, Vlan801
exprtr1#
  • Route/expvrf02
exprtr1#sh ip route vrf expvrf02

Routing Table: expvrf03
(略)
Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C        10.0.0.2/32 is directly connected, Loopback2
C        10.1.2.0/24 is directly connected, Vlan802
L        10.1.2.1/32 is directly connected, Vlan802
C        10.2.2.0/24 is directly connected, Vlan722
L        10.2.2.1/32 is directly connected, Vlan722
exprtr1#
  • Route/expvrf03
exprtr1#sh ip route vrf expvrf03

Routing Table: expvrf03
(略)
Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 5 subnets, 2 masks
C        10.0.0.3/32 is directly connected, Loopback3
C        10.1.3.0/24 is directly connected, Vlan803
L        10.1.3.1/32 is directly connected, Vlan803
C        10.2.3.0/24 is directly connected, Vlan723
L        10.2.3.1/32 is directly connected, Vlan723
exprtr1#

どの VRF の経路も、VRF に直接ひもづけられた L3 インタフェースの情報だけで、他の VRF が持つ経路は見えないことがわかります。

まとめ
  • VRF をつくることで VRF ごとに経路情報を分離することができます。
    • VLAN(L2 broadcast domain) -- Routed Interface -- VRF という対応になります。
    • VRF によって分離された環境は、そのままでは相互に通信することはありまさん。なぜなら、自分のルーティングテーブルの中には自分が持っている経路しかないからです。たとえば宛先の経路が他所の VRF が持っている経路であっても、自分のルーティングテーブルに経路情報がなければ、パケットが入ってきたところで転送しようがありません。
    • だからこそ「分離している」と言っているので当然なのですが。ただ、分離するだけでは柔軟性がないので、VRF 間通信を実現するための方法があります。それは今後説明していきます。
  • 今回は説明とか後の話の都合、各 VRF が持っている IP アドレスは重複していなません。が、VRF が持つ経路情報は、他の VRF が持つアドレス空間として重複していてもかまわないです。
    • ただし、ブロードキャストドメインは VLAN で分離しているので、同一機器(同一のブロードキャストドメインを持つ機器群)の中では VLAN ID は一意にする必要があります。

*1:実際自分がそうなってます。動作としてはだいたいわかるんだけど、何がどういう仕掛けでそうなっているのかとか見えないと何ともね。というのもあってここで整理し直していたり。