第12回 L3領域の仮想化技術 VRF

## VRFとは

ネットワークを構築していく際に、必ず使用する技術である仮想化。よく目にするのはデータリンク層(L2)のVLANですが、ネットワーク層(L3)にも仮想化技術があります。それがVRF(Virtual Routing and Forwarding)です。
このVRFはルーターが所有するルーティングテーブルを論理的に切り分け1つの物理ルーターの中に複数のルーティングテーブルを所有させる技術となります。

## イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/9ee795aa-b722-4e3c-a1a9-7eccf40cfa11.png)

今回の記事ではVRLを中心に使用したネットワークに関して説明していきます。

## 構築ネットワーク構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/3f6e87ca-4bdf-4c6f-8fe5-9797bf48603b.png)

## 各ルーターの所有するルートテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/e0a9e9e9-3f68-47d4-90e3-d1eb39b66aac.png)

## 投入コンフィグ VRF.TEST01設定
```ruby:Router_A設定
hostname Router_A
ip vrf TEST01
 description TEST01
 rd 65000:1
exit
!
router ospf 1 vrf TEST01
 router-id 1.0.0.1
network 192.168.2.0 0.0.0.3 area 0
exit
!
interface GigabitEthernet0/0
 ip vrf forwarding TEST01
 ip address 192.168.2.2 255.255.255.252
 ip ospf 1 area 0
no shutdown
exit
!
ip route vrf TEST01 192.168.0.0 255.255.255.0 192.168.2.1
ip route vrf TEST01 192.168.1.0 255.255.255.0 192.168.2.1
!
```

```ruby:Router_B設定
hostname Router_B
!
ip vrf TEST01
 description TEST01
 rd 65000:1
exit
!
router ospf 1 vrf TEST01
 router-id 0.0.1.1
 network 192.168.0.0 0.0.0.255 area 0
 network 192.168.2.0 0.0.0.3 area 0
exit
!
interface GigabitEthernet0/0
 description TEST01
 ip vrf forwarding TEST01
 ip address 192.168.2.1 255.255.255.252
 ip ospf 1 area 0
no shutdown
exit
!
interface GigabitEthernet0/1
 ip vrf forwarding TEST01
 ip address 192.168.0.1 255.255.255.0
 ip ospf 1 area 0
no shutdown
exit
!
ip route vrf TEST01 192.168.1.0 255.255.255.0 192.168.0.2
!
```
```ruby:Router_C設定
hostname Router_C
!
ip vrf TEST01
 description TEST01
 rd 65000:1
exit
!
router ospf 1 vrf TEST01
 router-id 0.0.2.2
 network 192.168.0.0 0.0.0.255 area 0
 network 192.168.1.0 0.0.0.3 area 0
!
interface GigabitEthernet0/0
 ip vrf forwarding TEST01
 ip address 192.168.1.5 255.255.255.252
 ip ospf 1 area 0
no shutdown
exit
!
interface GigabitEthernet0/1
 ip vrf forwarding TEST01
 ip address 192.168.0.2 255.255.255.0
 ip ospf 1 area 0
no shutdown
exit
!
ip route vrf TEST01 192.168.2.0 255.255.255.0 192.168.0.1
!
```
```ruby:Router_D設定
hostname Router_D
!
ip vrf TEST01
 description TEST01
 rd 65000:1
exit
!
router ospf 1 vrf TEST01
 router-id 1.1.1.2
 network 192.168.1.0 0.0.0.3 area 0
!
interface GigabitEthernet0/0
 ip vrf forwarding TEST01
 ip address 192.168.1.6 255.255.255.252
 ip ospf 1 area 0
no shutdown
!
ip route vrf TEST01 192.168.0.0 255.255.255.0 192.168.1.5
ip route vrf TEST01 192.168.2.0 255.255.255.0 192.168.1.5
!
```
## RouterB_CのVRFでのルーティングテーブル情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559536/b5d71051-34a1-4b61-8deb-6fe8feeb0329.png)

```ruby:Router_BのVRF情報
Router_B#show ip vrf 
  Name      Default RD            Interfaces
  TEST01    65000:1               Gi0/0<Router_A向け>
                                  Gi0/1　
  TEST02    333:3                 Gi0/3<Router_E向け>
Router_B#
---------
・Router_A向けのTEST01
・Router_E向けのTEST02
上記２つのルーティングテーブルが別々に登録されていることを確認
```

```ruby:Router_Cの所有VRF
Router_C#show ip vrf 
  Name      Default RD            Interfaces
  TEST01    65000:1              Gi0/0<Router_D向け>
                                 Gi0/1
  TEST03    666:6                Gi0/3<Router_F向け>
Router_C#
---------
・Router_D向けのTEST01
・Router_F向けのTEST03
上記２つのルーティングテーブルが別々に登録されていることを確認
```

## ルーティングテーブル情報
全てを記載すると数が多すぎるのでRouter_Bのルーティングテーブルを記載

```ruby:Router_Bの通常のルーティングテーブル
Router_B#show ip route 
Gateway of last resort is not set

      172.16.0.0/16 is variably subnetted, 4 subnets, 2 masks
C        172.16.0.1/32 is directly connected, Loopback0
O        172.16.0.2/32 [110/2] via 172.16.12.2, 02:45:35, GigabitEthernet0/2
C        172.16.12.0/24 is directly connected, GigabitEthernet0/2
L        172.16.12.1/32 is directly connected, GigabitEthernet0/2
```

```ruby:Router_BのTEST01のルーティングテーブル
Router_B#show ip route vrf TEST01

Routing Table: TEST01
Gateway of last resort is not set

      192.168.0.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.0.0/24 is directly connected, GigabitEthernet0/1
L        192.168.0.1/32 is directly connected, GigabitEthernet0/1
      192.168.1.0/24 is variably subnetted, 2 subnets, 2 masks
S        192.168.1.0/24 [1/0] via 192.168.0.2
O        192.168.1.4/30 [110/2] via 192.168.0.2, 03:57:25, GigabitEthernet0/1
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/30 is directly connected, GigabitEthernet0/0
L        192.168.2.1/32 is directly connected, GigabitEthernet0/0
```
```ruby:Router_BのTEST02のルーティングテーブル
Router_B#show ip route vrf TEST02

Routing Table: TEST02
Gateway of last resort is not set

      10.0.0.0/24 is subnetted, 2 subnets
B        10.3.1.0 [20/0] via 172.16.13.3, 02:44:36
B        10.3.2.0 [20/0] via 172.16.13.3, 02:44:36
      172.16.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        172.16.13.0/24 is directly connected, GigabitEthernet0/3
L        172.16.13.1/32 is directly connected, GigabitEthernet0/3
Router_B#
```
## VRF_TEST01間のping疎通結果
```ruby:Router_AからD間の疎通確認
Router_A#ping vrf TEST01 192.168.1.6
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.6, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 7/8/12 ms
Router_A#
```

```ruby:Router_DからA間の疎通確認
Router_D#ping vrf TEST01 192.168.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 9/10/12 ms
Router_D#
```

RouterA_Dの間でpingの疎通が帰ってきたので通信成功です。

# 参考サイト
[VRFとは]
(https://www.infraexpert.com/study/mpls5.html)
[CCIE Blog]
(https://ccieblog.co.uk/mpls/inter-vrf-routing)
[Virtual routing and forwarding (VRF) on GNS3]
(https://www.youtube.com/watch?v=NPbbKBYCsjM)
[ネットワークのおべんきょしませんか　VRFとtunnelインタフェース]
(https://www.n-study.com/vrftunnel/)