初めに
SP網を使って、顧客ネットワークをL3レベルで接続する方法はいくつか存在する。その方法は、RFC 4364によってInter-AS Option A, B, Cと定義されている。今回はOption Aについて解説する。
Inter-AS Option Aとは
全てのオプションの中で最も簡単に構築出来るL3VPNであり、別名『Back-to-Back VRF』という。
ASBR間に顧客毎のVRFを設定し、ASBR間にルーティングプロトコルを動作させる。そのため、ASBRから見ると、他のサービスプロバイダー以降のネットワークが巨大な顧客ネットワークとみなせる。
サービスプロバイダーで導入されるL3VPNは、MPLSやSegment-Routing等のようにIPを別のプロトコルでカプセル化して接続するのが一般的であるが、Inter-AS Option Aでは、ASBR間はIPでのやり取りとなる。
InterAS Option Aを使うメリットとデメリット
メリット
- デプロイが簡単であり、トラブルシューティングが簡単
- サービスプロバイダー間のSLAが明確になる
- VRF毎にポリシングやフィルタリング定義できる
- ASBR間やAS毎のプロトコル選択の柔軟性がある
デメリット
- VPN毎にVRFを設定する必要がある
- VRFを都度設定しなければならないので、拡張性に欠ける
- 一貫したQoSをサポートするのが難しい
検証
目的
Inter-AS Option Aの設定方法、設定確認方法を学ぶ。
顧客2社 (CustAとCustB)に対して、それぞれの拠点1と拠点2間にL3VPNを提供する事を考える。
物理構成図
ダウンロードはこちら
論理構成図
IGP

注意点
- IS-IS及びOSPFは物理IFとLoopback0を含むものとする
- IS-ISのみFlexible CLIを使用する
- IS-ISのインスタンスIDは”1″、エリアIDは”49.0000″、システムIDは”X.X.X.X”とする (Xはルータの添え字)
また、エリアはL2-onlyとする - IS-ISはWide Metricとする
- OSFPのプロセスIDは”1″とする
また、エリア0のシングルエリアとする - OSPFのルータIDはX.X.X.Xとする (Xはルータの添え字)
ただし、CustA-1はX=7, CustA-2はX=8とする - OSPFのLoopback0はPassive IFとする
- OSPFのネットワークタイプはP-to-Pとする
BGP

注意点
- Service Provider 1に所属するR1, R2, R3のAS番号は”100″、Service Provider 2に所属するR4, R5, R6のAS番号は”200″とする
- iBGPはLoopback0でネイバーを指定する
- eBGPは物理IFのアドレスでネイバーを指定する
- SP1ーSP2間は各Cust用VRF(CustA, CustB)にて、eBGPネイバーを指定する
- ルータIDはX.X.X.Xと明示する (Xはルータの添え字)
ただし、CustB-1はX=9, CustB-2はX=10とする - CustB-1とCustB-2はLoopback0のアドレスをBGPで配布する
L3VPN

注意点
- CustAのVRF名は”CustA”、CustBのVRF名は”CustB”とする
- CustAのRoute Distinguisherは100:100、CustBのRoute Distinguisherは200:200とする
- CustAのRoute Targetは”100:100″、CustBのRoute Targetは”200:200″とする
アドレス設計

注意点
- 物理IFのアドレスは紙面の都合上、顧客ーPEルータ間のみを記載する
- 全ルータはLoopback0を持っており、アドレスはX.X.X.X/32とする (Xはルータの添え字)
ただし、CustA-1はX=7, CustA-2はX=8, CustB-1はX=9, CustB-2はX=10とする - R1及びR6は各顧客向けLoopbackを持っており、CustA向けをLoopback10、CustB向けをLoopback20とする
また、Loopback10のアドレスはX0.X0.X0.X0/32とし、Loopback20のアドレスはXX.XX.XX.XX/32とする (Xはルータの添え字)
※R1のLoopback10はCustB-2のLoopback0と重複 (10.10.10.10/32)するが、無視すること
初期コンフィグ
R1
conf t
!
hostname R1
!
group CCIE-ISIS
router isis '.*'
is-type level-2-only
add ipv4 uni
metric-style wide
mpls ldp auto-config
!
int 'Lo.*'
add ipv4 uni
passive
!
!
int 'Gi.*'
point-to-point
add ipv4 uni
!
root
!
!
!
vrf CustA
add ipv4 uni
import route-target
100:100
!
export route-target
100:100
!
!
!
vrf CustB
add ipv4 uni
import route-target
200:200
!
export route-target
200:200
!
!
!
int lo 0
ipv4 add 1.1.1.1/32
!
int lo 10
description /// Loopback at CustA ///
vrf CustA
ipv4 add 10.10.10.10/32
!
int lo 20
description /// Loopback at CustB ///
vrf CustB
ipv4 add 11.11.11.11/32
!
int gi0/0/0/0
ipv4 add 10.10.12.1/24
no sh
!
int gi0/0/0/1
description /// CustA-1 ///
vrf CustA
ipv4 add 192.168.1.1/24
no sh
!
int gi0/0/0/2
description /// CustB-1 ///
vrf CustB
ipv4 add 172.16.1.1/24
no sh
!
router isis 1
apply-group CCIE-ISIS
net 49.0000.1.1.1.1.00
int lo 0
!
int gi0/0/0/0
!
router ospf 10
vrf CustA
redis bgp 100
area 0
int lo 10
passive
!
int gi0/0/0/1
net point-to-point
!
!
!
!
router bgp 100
bgp router-id 1.1.1.1
add vpnv4 uni
!
neighbor 3.3.3.3
remote-as 100
update-source lo0
add vpnv4 uni
!
!
vrf CustA
rd 100:100
add ipv4 uni
redis ospf 10
!
!
vrf CustB
rd 200:200
bgp unsafe-ebgp-policy
add ipv4 uni
net 11.11.11.11/32
!
neighbor 172.16.1.2
remote-as 65000
add ipv4 uni
as-override
!
!
!
!
mpls ldp
!
R2
conf t
!
hostname R2
!
group CCIE-ISIS
router isis '.*'
is-type level-2-only
add ipv4 uni
metric-style wide
mpls ldp auto-config
!
int 'Lo.*'
add ipv4 uni
passive
!
!
int 'Gi.*'
point-to-point
add ipv4 uni
!
root
!
!
!
int lo 0
ipv4 add 2.2.2.2/32
!
int gi0/0/0/0
ipv4 add 10.10.12.2/24
no sh
!
int gi0/0/0/1
ipv4 add 10.10.23.2/24
no sh
!
router isis 1
apply-group CCIE-ISIS
net 49.0000.2.2.2.2.00
int lo 0
!
int gi0/0/0/0
int gi0/0/0/1
!
mpls ldp
!
R3
conf t
!
hostname R3
!
group CCIE-ISIS
router isis '.*'
is-type level-2-only
add ipv4 uni
metric-style wide
mpls ldp auto-config
!
int 'Lo.*'
add ipv4 uni
passive
!
!
int 'Gi.*'
point-to-point
add ipv4 uni
!
root
!
!
!
vrf CustA
add ipv4 uni
import route-target
100:100
!
export route-target
100:100
!
!
!
vrf CustB
add ipv4 uni
import route-target
200:200
!
export route-target
200:200
!
!
!
int lo 0
ipv4 add 3.3.3.3/32
!
int lo 10
description /// Loopback at CustA ///
vrf CustA
ipv4 add 30.30.30.30/32
!
int lo 20
description /// Loopback at CustB ///
vrf CustB
ipv4 add 33.33.33.33/32
!
int gi0/0/0/1
ipv4 add 10.10.23.3/24
no sh
!
int gi0/0/0/2
description /// Inter-AS OptionA ///
no sh
!
int gi0/0/0/2.100
description /// CustA-1 ///
vrf CustA
encapsulation dot1q 100
ipv4 add 10.10.134.3/24
no sh
!
int gi0/0/0/2.200
description /// CustB-1 ///
vrf CustB
encapsulation dot1q 200
ipv4 add 10.10.234.3/24
no sh
!
router isis 1
apply-group CCIE-ISIS
net 49.0000.3.3.3.3.00
int lo 0
!
int gi0/0/0/1
!
router bgp 100
bgp router-id 3.3.3.3
add vpnv4 uni
!
neighbor 1.1.1.1
remote-as 100
update-source lo0
add vpnv4 uni
next-hop-self
!
!
vrf CustA
rd 100:100
bgp unsafe-ebgp-policy
add ipv4 uni
net 30.30.30.30/32
!
neighbor 10.10.134.4
remote-as 200
add ipv4 uni
!
!
!
vrf CustB
rd 200:200
bgp unsafe-ebgp-policy
add ipv4 uni
net 33.33.33.33/32
!
neighbor 10.10.234.4
remote-as 200
add ipv4 uni
!
!
!
!
mpls ldp
!
R4
conf t
!
hostname R4
!
group CCIE-OSPF
router ospf '.*'
area '.*'
mpls ldp auto-config
int 'Lo.*'
passive
!
!
int 'Gi.*'
net point-to-point
!
root
!
!
!
vrf CustA
add ipv4 uni
import route-target
100:100
!
export route-target
100:100
!
!
!
vrf CustB
add ipv4 uni
import route-target
200:200
!
export route-target
200:200
!
!
!
int lo 0
ipv4 add 4.4.4.4/32
!
int lo 10
description /// Loopback at CustA ///
vrf CustA
ipv4 add 40.40.40.40/32
!
int lo 20
description /// Loopback at CustB ///
vrf CustB
ipv4 add 44.44.44.44/32
!
int gi0/0/0/1
ipv4 add 10.10.45.4/24
no sh
!
int gi0/0/0/2
description /// Inter-AS OptionA ///
no sh
!
int gi0/0/0/2.100
description /// CustA-1 ///
vrf CustA
encapsulation dot1q 100
ipv4 add 10.10.134.4/24
no sh
!
int gi0/0/0/2.200
description /// CustB-1 ///
vrf CustB
encapsulation dot1q 200
ipv4 add 10.10.234.4/24
no sh
!
router ospf 1
apply-group CCIE-OSPF
router-id 4.4.4.4
area 0
int lo 0
!
int gi0/0/0/1
!
!
router bgp 200
bgp router-id 4.4.4.4
add vpnv4 uni
!
neighbor 6.6.6.6
remote-as 200
update-source lo0
add vpnv4 uni
next-hop-self
!
!
vrf CustA
rd 100:100
bgp unsafe-ebgp-policy
add ipv4 uni
net 40.40.40.40/32
!
neighbor 10.10.134.3
remote-as 100
add ipv4 uni
!
!
!
vrf CustB
rd 200:200
bgp unsafe-ebgp-policy
add ipv4 uni
net 44.44.44.44/32
!
neighbor 10.10.234.3
remote-as 100
add ipv4 uni
!
!
!
!
mpls ldp
!
R5
conf t
!
hostname R5
!
group CCIE-OSPF
router ospf '.*'
area '.*'
mpls ldp auto-config
int 'Lo.*'
passive
!
!
int 'Gi.*'
net point-to-point
!
root
!
!
!
int lo 0
ipv4 add 5.5.5.5/32
!
int gi0/0/0/0
ipv4 add 10.10.56.5/24
no sh
!
int gi0/0/0/1
ipv4 add 10.10.45.5/24
no sh
!
router ospf 1
apply-group CCIE-OSPF
router-id 5.5.5.5
area 0
int lo 0
!
int gi0/0/0/0
int gi0/0/0/1
!
!
mpls ldp
!
R6
conf t
!
hostname R6
!
group CCIE-OSPF
router ospf '.*'
area '.*'
mpls ldp auto-config
int 'Lo.*'
passive
!
!
int 'Gi.*'
net point-to-point
!
root
!
!
!
vrf CustA
add ipv4 uni
import route-target
100:100
!
export route-target
100:100
!
!
!
vrf CustB
add ipv4 uni
import route-target
200:200
!
export route-target
200:200
!
!
!
int lo 0
ipv4 add 6.6.6.6/32
!
int lo 10
description /// Loopback at CustA ///
vrf CustA
ipv4 add 60.60.60.60/32
!
int lo 20
description /// Loopback at CustB ///
vrf CustB
ipv4 add 66.66.66.66/32
!
int gi0/0/0/0
ipv4 add 10.10.56.6/24
no sh
!
int gi0/0/0/1
description /// CustA-1 ///
vrf CustA
ipv4 add 192.168.2.1/24
no sh
!
int gi0/0/0/2
description /// CustB-1 ///
vrf CustB
ipv4 add 172.16.2.1/24
no sh
!
router ospf 1
apply-group CCIE-OSPF
router-id 6.6.6.6
area 0
int lo 0
!
int gi0/0/0/0
!
!
router ospf 10
vrf CustA
redis bgp 200
!
area 0
int lo 10
passive
!
int gi0/0/0/1
net point-to-point
!
!
!
!
router bgp 200
bgp router-id 6.6.6.6
add vpnv4 uni
!
neighbor 4.4.4.4
remote-as 200
update-source lo0
add vpnv4 uni
!
!
vrf CustA
rd 100:100
bgp unsafe-ebgp-policy
add ipv4 uni
redis ospf 10
!
!
vrf CustB
rd 200:200
bgp unsafe-ebgp-policy
add ipv4 uni
net 66.66.66.66/32
!
neighbor 172.16.2.2
remote-as 65000
add ipv4 uni
as-override
!
!
!
!
mpls ldp
!
CustA-1
conf t
!
hostname CustA-1
!
int lo 0
ipv4 add 7.7.7.7/32
!
int gi0/0/0/1
ipv4 add 192.168.1.2/24
no sh
!
router ospf 1
router-id 7.7.7.7
area 0
int lo 0
passive
!
int gi0/0/0/1
net point-to-point
!
!
!
CustA-2
conf t
!
hostname CustA-2
!
int lo 0
ipv4 add 8.8.8.8/32
!
int gi0/0/0/1
ipv4 add 192.168.2.2/24
no sh
!
router ospf 1
router-id 8.8.8.8
area 0
int lo 0
passive
!
int gi0/0/0/1
net point-to-point
!
!
!
CustB-1
conf t
!
hostname CustB-1
!
int lo 0
ipv4 add 9.9.9.9/32
!
int gi0/0/0/2
ipv4 add 172.16.1.2/24
no sh
!
router bgp 65000
bgp unsafe-ebgp-policy
bgp router-id 9.9.9.9
add ipv4 uni
net 9.9.9.9/32
!
neighbor 172.16.1.1
remote-as 100
add ipv4 uni
!
!
!
CustB-2
conf t
!
hostname CustB-2
!
int lo 0
ipv4 add 10.10.10.10/32
!
int gi0/0/0/2
ipv4 add 172.16.2.2/24
no sh
!
router bgp 65000
bgp unsafe-ebgp-policy
bgp router-id 10.10.10.10
add ipv4 uni
net 10.10.10.10/32
!
neighbor 172.16.2.1
remote-as 200
add ipv4 uni
!
!
!
ダウンロードはこちら
検証結果
基本的なMPLS-L3VPNと差分はほぼないので、個別で必要な設定はない。
それぞれのtracerouteの結果を以下に記載する。
- CustA-1⇒CustA-1へのtraceroute

- CustB-1⇒CustB-2へのtraceroute

それぞれ4ホップ目でMPLSではなく物理IFのアドレスになっているが、ASBR間でBack-to-Back VRFで繋がっているのである
コメント