Cisco VRF間のルーティングが可能になるVASIについて

VRFCisco,VASI,VRF

VASI(VRF-Aware Software インフラストラクチャ)とは

VASIはCiscoルータ内の複数のVRF間に仮想的なリンクを作成しVRF間でIP通信が可能になる技術のことです。以下、CiscoサイトからのVASIの概要です。

-VASI の概要-

VRF-Aware Software インフラストラクチャ(VASI)を使用すると、ファイアウォール、IPsec、ネットワーク アドレス変換(NAT)などのサービスを、異なる仮想ルーティングおよび転送(VRF)インスタンスを通過するトラフィックに適用できます。 VASI は、仮想インターフェイスのペアを使用して実装され、ペアの各インターフェイスは異なる VRF インスタンスに関連付けられます。 VASI 仮想インターフェイスは、これら 2 つの VRF インスタンス間で交換される必要があるパケットのネクスト ホップ インターフェイスです。 VASI インターフェイスは、VRF インスタンス間のファイアウォールまたは NAT を設定するためのフレームワークを提供します。

各インターフェイス ペアは、異なる 2 つの VRF インスタンスに関連付けられています。 ペアリングの関連付けは、vasileft x が自動的に vasiright x へのペアを取得するという方法で、2 つのインターフェイスのインデックスに基づいて自動的に行われます。 たとえば、vasileft1 および vasiright1 は自動的にペアとなり、vasileft1 に入るパケットは、vasiright1 に内部的に渡されます。

VASI インターフェイス上で内部ボーダー ゲートウェイ プロトコル(iBGP)、Enhanced Interior Gateway Routing Protocol(EIGRP)、または Open Shortest Path First(OSPF)によるスタティック ルーティングまたはダイナミック ルーティングを設定できます。 iBGP ダイナミック ルーティング プロトコルの制約事項とコンフィギュレーションは、VASI インターフェイス間の iBGP ルーティング コンフィギュレーションに有効です。 

セキュリティ コンフィギュレーション ガイド:ゾーンベース ポリシー ファイアウォール、Cisco IOS XE Release 3S(ASR 1000)

要約すると、ルータでvasileftとvasirightのペアとなるインタフェースを作成します。各インタフェースをそれぞれVRF-AとVRF-Bに紐づけし、同サブネットのIPアドレスを設定すると、vasileftとvasirightの間でIP通信ができるようになります。つまり別々のVRFに橋渡しのセグメントを作ることが可能になります。また、VASIのインタフェースでNATやIPsecの終端、スタティックルーティングやダイナミックルーティングを可能にすることができます。

今回は簡易なBGPネットワークを構築し、VRF-AとVRF-BでiBGPを形成します。

なお、VASIはルータ系のOSであるIOS XE(ASRやCSR1000v等)で実装可能です。

※補足
VRF間ルーティングをするにあたり、VASI以外の代表的な技術として、ルート漏洩(Route Leaking)という方法があります。ルート漏洩を使うと、VRF-AがVRF-Bのルート情報を学習することができ、VRF-Aで着信したパケットをVRF-Bに転送しVRF-Bが持つルーティングテーブル(Nexthop)に従ってパケットを送出することができるようになります。

つまり、本来VRF間でパケットの行き来は起こり得ませんが、ルート漏洩を使うと、VRF-Bのルート情報をVRF-Aに漏洩させることが可能になります。

VASIの検証

VASIの構成と環境

CSR1000v-01はVASIでiBGP接続を行い、後ほど動作確認をします。CSR1000v-02/03はBGPピアと172.16.0.0/24を広報する設定をします。

検証で使用する機器はESXi上で動作している仮想ルータCSR1000vです。

機器OS Version
CSR1000v-01~0315.5(3)S6

コンフィグ

VASIを形成するにはCSR1000v-01で「interface vasileft10」「interface vasiright10」でそれぞれ紐づけるVRFを指定します。VASIの設定は以上です。その他はVRFやBGPの基本的な設定となります。

hostname CSR1000v-01
<省略>
ip vrf VRF-A
 rd 1:1
!
ip vrf VRF-B
 rd 1:2
<省略>
interface Loopback1
 ip vrf forwarding VRF-A
 ip address 1.1.1.1 255.255.255.255
!
interface Loopback2
 ip vrf forwarding VRF-B
 ip address 1.1.1.2 255.255.255.255
<省略>
interface GigabitEthernet6.101
 encapsulation dot1Q 101
 ip vrf forwarding VRF-A
 ip address 192.168.1.1 255.255.255.252
!
interface GigabitEthernet6.102
 encapsulation dot1Q 102
 ip vrf forwarding VRF-B
 ip address 192.168.2.1 255.255.255.252
<省略>
interface vasileft10
 ip vrf forwarding VRF-A
 ip address 192.168.0.1 255.255.255.252
 no keepalive
!
interface vasiright10
 ip vrf forwarding VRF-B
 ip address 192.168.0.2 255.255.255.252
 no keepalive
<省略>
router bgp 100
 bgp log-neighbor-changes
 !
 address-family ipv4 vrf VRF-A
  bgp router-id 1.1.1.1
  network 10.0.0.0 mask 255.255.255.252
  neighbor 192.168.0.2 remote-as 100
  neighbor 192.168.0.2 activate
  neighbor 192.168.0.2 soft-reconfiguration inbound
  neighbor 192.168.1.2 remote-as 200
  neighbor 192.168.1.2 activate
 exit-address-family
 !
 address-family ipv4 vrf VRF-B
  bgp router-id 1.1.1.2
  neighbor 192.168.0.1 remote-as 100
  neighbor 192.168.0.1 activate
  neighbor 192.168.0.1 soft-reconfiguration inbound
  neighbor 192.168.2.2 remote-as 200
  neighbor 192.168.2.2 activate
 exit-address-family
hostname CSR1000v-02
<省略>
interface GigabitEthernet6.101
 encapsulation dot1Q 101
 ip address 192.168.1.2 255.255.255.252
!
interface GigabitEthernet6.103
 encapsulation dot1Q 103
 ip address 192.168.3.1 255.255.255.252
!
interface GigabitEthernet6.172
 encapsulation dot1Q 172
 ip address 172.16.0.253 255.255.255.0
<省略>
router bgp 200
 bgp log-neighbor-changes
 network 172.16.0.0 mask 255.255.255.0
 neighbor 192.168.1.1 remote-as 100
 neighbor 192.168.3.2 remote-as 200
hostname CSR1000v-03
<省略>
interface GigabitEthernet6.102
 encapsulation dot1Q 102
 ip address 192.168.2.2 255.255.255.252
!
interface GigabitEthernet6.103
 encapsulation dot1Q 103
 ip address 192.168.3.2 255.255.255.252
!
interface GigabitEthernet6.172
 encapsulation dot1Q 172
 ip address 172.16.0.252 255.255.255.0
<省略>
router bgp 200
 bgp log-neighbor-changes
 network 172.16.0.0 mask 255.255.255.0
 neighbor 192.168.2.1 remote-as 100
 neighbor 192.168.3.1 remote-as 200

設定は以上です。次にステータスを確認します。

ステータス確認(BGP)

まずはBGPネイバー情報を確認します。VASIインタフェースは192.168.0.1(VRF-A)と192.168.0.2(VRF-B)です。正常にVASIインタフェース同士てBGPネイバーが張れていることが確認できます。(4,12行目)

CSR1000v-01#show ip bgp vpnv4 vrf VRF-A summary
<省略>
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.0.2     4          100     107     108       23    0    0 01:29:53        1
192.168.1.2     4          200      69      71       23    0    0 00:58:29        1
CSR1000v-01#


CSR1000v-01#show ip bgp vpnv4 vrf VRF-B summary
<省略>
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.0.1     4          100     108     107       23    0    0 01:30:06        1
192.168.2.2     4          200     104     106       23    0    0 01:30:06        1
CSR1000v-01#

次にVRF-AがVRF-Bから「172.16.0.0/24」のルート情報を受信していることを確認します。

CSR1000v-01#show ip bgp vpnv4 vrf VRF-A neighbors 192.168.0.2 received-routes
<省略>
     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:1 (default for vrf VRF-A) VRF Router ID 1.1.1.1
 * i 172.16.0.0/24    192.168.0.2              0    100      0 200 i

Total number of prefixes 1
CSR1000v-01#

今度はVRF-BがVRF-Aから受信していることを確認します。

CSR1000v-01#show ip bgp vpnv4 vrf VRF-B neighbors 192.168.0.1 received-routes
<省略>
     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:2 (default for vrf VRF-B) VRF Router ID 1.1.1.2
 * i 172.16.0.0/24    192.168.0.1              0    100      0 200 i

Total number of prefixes 1
CSR1000v-01#

ルート情報の確認をします。6行目と8行目のようにNexthopがVASIインタフェースになっている候補が挙がってきてます。

CSR1000v-01#show ip bgp vpnv4 all
<省略>
     Network          Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 1:1 (default for vrf VRF-A) VRF Router ID 1.1.1.1
 *>  172.16.0.0/24    192.168.1.2              0             0 200 i
 * i                  192.168.0.2              0    100      0 200 i
Route Distinguisher: 1:2 (default for vrf VRF-B) VRF Router ID 1.1.1.2
 * i 172.16.0.0/24    192.168.0.1              0    100      0 200 i
 *>                   192.168.2.2              0             0 200 i
CSR1000v-01#

ここまででVASIインタフェース間でBGPネイバーが正常に張れていること。及びルート情報の交換ができていることが確認できました。

ステータス確認(ルーティングテーブル)

最後にルーティングテーブルも確認します。

現状の構成だと『172.16.0.0』のNexthopはeBGPの「192.168.1.2」になってしまっています(6行目)。これはiBGPとeBGPで同プレフィックス(ルート情報)の場合、BGPはeBGPを優先する仕組みだからです。

CSR1000v-01#show ip route vrf VRF-A
<省略>
      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback1
      172.16.0.0/24 is subnetted, 1 subnets
B        172.16.0.0 [20/0] via 192.168.1.2, 01:07:54
      192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.0.0/30 is directly connected, vasileft10
L        192.168.0.1/32 is directly connected, vasileft10
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/30 is directly connected, GigabitEthernet6.101
L        192.168.1.1/32 is directly connected, GigabitEthernet6.101
CSR1000v-01#

なので、一度、eBGPのピアを切断します。切断すると10行目のように「Idle (Admin)」と表示されます。

CSR1000v-01#configure terminal
CSR1000v-01(config)#router bgp 100
CSR1000v-01(config-router)# address-family ipv4 vrf VRF-A
CSR1000v-01(config-router-af)#neighbor 192.168.1.2 shutdown

CSR1000v-01#show ip bgp vpnv4 vrf VRF-A summary
<省略>
Neighbor        V           AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
192.168.0.2     4          100     124     125       24    0    0 01:45:24        1
192.168.1.2     4          200       0       0        1    0    0 00:00:40 Idle (Admin)
CSR1000v-01#

切断後、再度ルーティングテーブルを確認すると、『172.16.0.0』のNexthopが「192.168.0.2」となっており(6行目)、VASIインタフェースでもBGPによるルーティングが可能だと分かります。

CSR1000v-01#show ip route vrf VRF-A
<省略>
      1.0.0.0/32 is subnetted, 1 subnets
C        1.1.1.1 is directly connected, Loopback1
      172.16.0.0/24 is subnetted, 1 subnets
B        172.16.0.0 [200/0] via 192.168.0.2, 00:01:12
      192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.0.0/30 is directly connected, vasileft10
L        192.168.0.1/32 is directly connected, vasileft10
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.1.0/30 is directly connected, GigabitEthernet6.101
L        192.168.1.1/32 is directly connected, GigabitEthernet6.101
CSR1000v-01#

まとめ

今回実施したことのまとめです。

  • VASIの技術概要を説明しました。
  • 簡易的なBGP環境を構築し、iBGPのネイバーをVASIインタフェースで形成しました。
  • 最後にVASIのIPアドレスをNexthopにするルーティングテーブルが作成されることを確認しました。

以上です。