本記事は、Cisco Modeling Labs(CML)無償版を用いて
MPLS L3VPN環境での VRF間ルートリーク(片方向VPNv4配布) を再現した学習記録です。ソフトウェア著作権および商標はすべて Cisco Systems, Inc. に帰属します。
本記事は個人の非商用検証を目的としたもので、Cisco社の正式な見解を示すものではありません。
⚠️ 構文に関する注記
注記:前回の記事(CMLでVRFの基礎学習を行った回)では、
以下のような 旧構文(ip vrf
形式) を使用していました:ip vrf VRF-A rd 100:1 description VRF-A-Department interface Ethernet0/0 ip vrf forwarding VRF-A
しかし、本記事では IOS-XE (17.x 系) 環境に基づく新構文
(vrf definition
/router ospf <proc> vrf <VRF>
) で設定しました。vrf definition VRF-A rd 100:1 address-family ipv4 route-target export 100:100 route-target import 100:100 exit-address-family router ospf 20 vrf VRF-A network 10.1.1.0 0.0.0.255 area 0
旧構文も理解の助けになりますが、
今回は、新しめのIOS-XE環境での構文形式で設定してみました。
🧩 トポロジ構成
- ルータ構成:5台(CML無償版制限内)
- 各ノード:IOL
- 接続:Ethernet インターフェース
- PE1 ↔ PE2 は Loopback経由で VPNv4ピアリング
- MPLS + LDP + OSPF + MP-BGP
- MPLS + OSPF + MP-BGP 構成
- PE1 → PE2 のみ VPNv4 経路配布(片方向リーク)
- CE1/CE2 は VRFを持たない(グローバルルーティング)
PE1(経路広告側)
hostname PE1
!
vrf definition VRF-A
rd 100:1
address-family ipv4
route-target export 100:100
route-target import 100:100
exit-address-family
!
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
vrf forwarding VRF-A
ip address 10.1.1.1 255.255.255.0
no shut
!
interface Ethernet0/1
ip address 192.0.12.1 255.255.255.252
mpls ip
no shut
!
router ospf 10
router-id 1.1.1.1
network 1.1.1.1 0.0.0.0 area 0
network 192.0.12.0 0.0.0.3 area 0
!
router ospf 20 vrf VRF-A
router-id 10.1.1.1
network 10.1.1.0 0.0.0.255 area 0
!
mpls ldp router-id Loopback0 force
!
router bgp 65000
bgp router-id 1.1.1.1
neighbor 2.2.2.2 remote-as 65000
neighbor 2.2.2.2 update-source Loopback0
!
address-family vpnv4
neighbor 2.2.2.2 activate
neighbor 2.2.2.2 send-community extended
exit-address-family
!
address-family ipv4 vrf VRF-A
redistribute ospf 20
exit-address-family
PE2(経路受信側)
hostname PE2
!
vrf definition VRF-B
rd 100:2
address-family ipv4
route-target export 200:200
route-target import 100:100
exit-address-family
!
interface Loopback0
ip address 2.2.2.2 255.255.255.255
!
interface Ethernet0/0
vrf forwarding VRF-B
ip address 10.2.2.1 255.255.255.0
no shut
!
interface Ethernet0/1
ip address 192.0.23.2 255.255.255.252
mpls ip
no shut
!
router ospf 10
router-id 2.2.2.2
network 2.2.2.2 0.0.0.0 area 0
network 192.0.23.0 0.0.0.3 area 0
!
router ospf 20 vrf VRF-B
router-id 10.2.2.1
network 10.2.2.0 0.0.0.255 area 0
!
mpls ldp router-id Loopback0 force
!
router bgp 65000
bgp router-id 2.2.2.2
neighbor 1.1.1.1 remote-as 65000
neighbor 1.1.1.1 update-source Loopback0
!
address-family vpnv4
neighbor 1.1.1.1 activate
neighbor 1.1.1.1 send-community extended
exit-address-family
MPLS L3VPN 片方向ルートリーク構成
① CE1 → PE1(顧客側ネットワーク内の転送)
CE1 が CE2 宛パケット(10.2.2.2)を送信。
CE1 はスタティックルートで「10.2.2.0/24 → 10.1.1.1(PE1)」を指定。
確認コマンド
CE1# show ip route
② PE1(VRF-Aで経路検索 → MPLSラベル付加)
- PE1は「送信側」なので、BGP経路(受信)は存在せず、VPNv4広告側としての動作確認
- VPNv4経路情報をもとに MPLSラベルを付加して Core へ送信。
確認コマンド
show ip route vrf VRF-A
show bgp vpnv4 unicast all
show mpls forwarding-table 2.2.2.2 32
出力例
⚠️「B」(BGP経路) が無いのは正しい。
片方向リークのため VRF-B側の経路は受信していない。
出力例
PE1 は自身のVRF-A経路をVPNv4として広告中。
「Path」欄の「?」は、OSPF→BGPへの再配布で経路の起点が不明(incomplete)として扱われるため。networkコマンドで明示広告した場合は「i」と表示されます。
出力例
✅ MPLSラベル付加済みで、Coreへ転送準備完了。
③ Pノード(MPLSラベルスイッチ)
- Pノードは MPLSラベルを見て転送。IPヘッダは見ない。
確認コマンド
P# show mpls forwarding-table
④ PE2(MPLS Core → VRF-B)
- PE2 は受信ラベルを POP し、VRF-B を識別してルーティング。
- VRF-B は
RT:100:100
を import しているため、PE1(VRF-A) の経路を取り込む。
確認コマンド
PE2# show vrf detail VRF-B
PE2# show ip route vrf VRF-B
PE2# show bgp vpnv4 unicast all
出力例
Import RT:100:100
が設定されていれば、PE1(VRF-A)からの経路を受信。
B 10.1.1.0/24 [200/0] via 1.1.1.1 ※VPNv4経路の次ホップ(PE1のLoopback)
✅PE2がPE1からVPNv4経路を正常に受信している状態
- Route Distinguisher: 100:1 は、PE1側(VRF-A)から受信したVPNv4経路を表します。
→ *>i の「i」は iBGP(MP-BGP)経由で受信 したことを意味します。 - Route Distinguisher: 100:2 (default for vrf VRF-B) は、PE2自身のVRF-Bを表します。
→ 同一の 10.1.1.0/24 がVRF-BのRIB(ルーティングテーブル)にもインポート済み。
これにより、PE2はPE1(1.1.1.1)からVPNv4経路を受信し、自身のVRF-Bに 10.1.1.0/24 (VRF-A側ネットワーク) を取り込んでいることが確認できます。 - 片方向リーク構成では、PE1→PE2方向のみ VPNv4経路が存在するため、逆方向(PE2→PE1)にはこのエントリが表示されません。
⑤ CE2(VPN外ネットワーク内で受信)
- CE2 は PE2 からのルーティング情報を基にローカルで転送。
確認コマンド
CE2# show ip route
⚠️ 戻り経路がないため、CE2 から CE1 へのルートは存在しない。
✅ まとめ:片方向VPNv4リーク構成の確認ポイント
本構成は、PE1 → PE2 方向のみ VPNv4 経路が配布される「片方向リーク構成」 です。
各プロセスで確認すべきコマンドと、出力に現れるポイントを以下に整理します。
段階 | 動作内容 | 主確認コマンド | 出力に現れるポイント |
---|---|---|---|
① CE1 → PE1 | CE1がスタティックルートを使用し、VRF-A側のPE1へパケット転送 |
show ip route (CE1) |
S 10.2.2.0/24 via 10.1.1.1 が表示される |
② PE1(VRF-A) | VRF-Aルーティングテーブルを検索し、VPNv4経路として広告 |
show ip route vrf VRF-A show bgp vpnv4 unicast all
|
VRF-A内に C 10.1.1.0/24 のみ。? 付きの経路がVPNv4に広告されている |
③ Pノード(コア) | MPLSラベルを用いて単純転送(ラベルスイッチング) | show mpls forwarding-table |
IP非参照、Local → Outgoing ラベル変換を確認 |
④ PE2(VRF-B) | PE1から受信したVPNv4経路をVRF-Bへインポート |
show vrf detail VRF-B show ip route vrf VRF-B show bgp vpnv4 unicast all
|
VRF-Bに B 10.1.1.0/24 [200/0] via 1.1.1.1 が存在し、経路受信を確認 |
⑤ CE2 | VRF-B経由でパケットを受信(戻り経路なし) |
show ip route (CE2) |
C 10.2.2.0/24 のみ存在(片方向到達) |
あと、調べていくうちに「特定prefixだけ許可したい」「経路数を絞りたい」というroute-map方式を使うのもあるようですが、ちょっと複雑なので!またの機会にやってみます!
机上の勉強だけでは、理解進みにくかったVRFでしたが、CMLで設定コンフィグ投入して、想定した出力結果になるように、何度も入れ直してみることで学習進められました!