以下の内容はhttps://yokohama539.hatenablog.com/entry/2024/08/31/155409より取得しました。


(主に)JUNOSでL3VPNをしてみた。

JUNOSで(CE間はBGPによる)L3VPNを設定する機会があり、イイ感じにネットや書籍に整理されていないのでまとめてみました。
せっかくなのでOverlayのconfigurationからやっていきます。

トポロジーは以下の通りです。
R1だけはCiscoルーターとなっています。
(色々流用してるので「R1 - R2 - R4 - R3」という並びだったりポート番号も飛び飛びで構築しています…)

■物理結線/IPアドレスアサイ

■ルーティング構成

まず前提として(UnderlayなIGPであるOSPFでR2とR4のLoopback間のIP疎通性を確保しておき)
疑似Service Provider網のPE(R2とR4)のLoopback間でMPLS Label Switchingできるようにしておきます。
今回はRSVP-TEを使ってLabel Switchingをしています。
気を付けるべきはOSPFでtraffic-engineeringのconfigurationをしないといけないところでしょうか。

//R2
set interfaces ge-0/0/2 unit 0 family mpls
set protocols mpls interface ge-0/0/2.0
set protocols mpls label-switched-path R2_to_R4 to 4.4.4.4
set protocols rsvp interface ge-0/0/2.0
set protocols ospf traffic-engineering

//R4
set interfaces ge-0/0/0 unit 0 family mpls
set protocols mpls interface ge-0/0/0.0
set protocols mpls label-switched-path R4_to_R2 to 2.2.2.2
set protocols rsvp interface ge-0/0/0.0
set protocols ospf traffic-engineering

//確認
lab@R2# run show route table inet.3
//snip
4.4.4.4/32         *[RSVP/7/1] 01:59:55, metric 1
                    >  to 24.24.24.4 via ge-0/0/2.0, label-switched-path R2_to_R4

lab@R4# run show route table inet.3
//snip
2.2.2.2/32         *[RSVP/7/1] 01:58:33, metric 1
                    >  to 24.24.24.2 via ge-0/0/0.0, label-switched-path R4_to_R2


続いてCEのBGP周りをconfigurationします。
それぞれ自身のLoopbackを広報する様にしています。

//R1
ip prefix-list LOOP1 seq 11 permit 1.1.1.1/32
!
route-map ONLY_LOOP1 permit 10
 match ip address prefix-list LOOP1
!
route-map ONLY_LOOP1 deny 65000
!
router bgp 64699
 neighbor 12.12.12.2 remote-as 24
 address-family ipv4
  network 1.1.1.1 mask 255.255.255.255
  neighbor 12.12.12.2 activate
  neighbor 12.12.12.2 soft-reconfiguration inbound
  neighbor 12.12.12.2 route-map ONLY_LOOP1 out
 exit-address-family
!

//R3
set policy-options policy-statement EXPORT_BGP term 0011 from protocol direct
set policy-options policy-statement EXPORT_BGP term 0011 from route-filter 3.3.3.3/32 exact
set policy-options policy-statement EXPORT_BGP term 0011 then accept
set policy-options policy-statement EXPORT_BGP term 9991 then reject
set routing-options autonomous-system 64699
set protocols bgp group EBGP type external
set protocols bgp group EBGP neighbor 34.34.34.4 export EXPORT_BGP
set protocols bgp group EBGP neighbor 34.34.34.4 peer-as 24


続いてPE側のconfigurationをしていきます。
内容としては大きく3つあります。

・PE間のMP-BGP設定
・routing-instance設定
・CE向けBGP設定

//R2
set routing-options autonomous-system 24
set protocols bgp group IBGP type internal
set protocols bgp group IBGP local-address 2.2.2.2
set protocols bgp group IBGP family inet-vpn unicast
set protocols bgp group IBGP neighbor 4.4.4.4
set routing-instances VPN_A instance-type vrf
set routing-instances VPN_A interface ge-0/0/0.0
set routing-instances VPN_A route-distinguisher 24:2
set routing-instances VPN_A vrf-target target:24:24
set routing-instances VPN_A protocols bgp group EBGP type external
set routing-instances VPN_A protocols bgp group EBGP neighbor 12.12.12.1 peer-as 64699

//R4
set routing-options autonomous-system 24
set protocols bgp group IBGP type internal
set protocols bgp group IBGP local-address 4.4.4.4
set protocols bgp group IBGP family inet-vpn unicast
set protocols bgp group IBGP neighbor 2.2.2.2
set routing-instances VPN_A instance-type vrf
set routing-instances VPN_A interface ge-0/0/1.0
set routing-instances VPN_A route-distinguisher 24:4
set routing-instances VPN_A vrf-target target:24:24
set routing-instances VPN_A protocols bgp group EBGP type external
set routing-instances VPN_A protocols bgp group EBGP neighbor 34.34.34.3 peer-as 64699

//確認
lab@R2# run show bgp summary
//snip
bgp.l3vpn.0
                       2          2          0          0          0          0
Peer                     AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
4.4.4.4                  24        101        101       0       0       43:51 Establ
  bgp.l3vpn.0: 2/2/2/0
  VPN_A.inet.0: 2/2/2/0
12.12.12.1            64699        102        101       0       0       44:56 Establ
  VPN_A.inet.0: 1/1/1/0

lab@R4# run show bgp summary
//snip
bgp.l3vpn.0
                       2          2          0          0          0          0
Peer                     AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
2.2.2.2                  24        104        101       0       0       45:02 Establ
  bgp.l3vpn.0: 2/2/2/0
  VPN_A.inet.0: 2/2/2/0
34.34.34.3            64699        104        101       0       0       45:08 Establ
  VPN_A.inet.0: 1/1/1/0


他にCEがいる時、VRF Instance(VPN_A)にてvrf-import / vrf-exportでfilterする必要がありますが、今回は割愛します。
興味ある方は調べてみてください。

ルーター間でEstablished状態だからR1-R3のLoopback間で通信できる!…と思いきやこれでは通信できません。
R1とR3は同じAS番号なのでR2からR1、R4からR3に広報した際、経路Loopとみなされ受信した経路を破棄します。
(JUNOSの場合は、そもそも対向Peerに対して重複しているAS番号があった場合、経路情報を広報しません)

解決策は3つあります。1つずつ検証していきたいと思います。

■解決策①
1つ目はPEでプライベートAS番号を上書きして経路情報を広報する方法です。
個人的にはこれが一番わかりやすいと思ったり。

//R2
set routing-instances VPN_A protocols bgp group EBGP neighbor 12.12.12.1 as-override

//R4
set routing-instances VPN_A protocols bgp group EBGP neighbor 34.34.34.3 as-override

//R3で確認
lab@R3# run show route 1.1.1.1
//snip
1.1.1.1/32         *[BGP/170] 00:01:31, localpref 100
                      AS path: 24 24 I, validation-state: unverified
                    >  to 34.34.34.4 via ge-1/0/1.0
//AS Pathで64699が24に上書きされている


■解決策②
2つ目は重複しているAS番号があってもPEで経路を広報&CEで受信する方法です。
IOSはallowas-in、JUNOSはloopsオプションでAS番号が重複しても設定値によって受信を許容します。
ネット上ではこれが一番よく紹介されてます(当社調べ)

//R1
router bgp 64699
 address-family ipv4
 neighbor 12.12.12.2 allowas-in 5
 exit-address-family
 
//R2
set routing-instances VPN_A protocols bgp group EBGP neighbor 12.12.12.1 advertise-peer-as

//R4
set routing-instances VPN_A protocols bgp group EBGP neighbor 34.34.34.3 advertise-peer-as

//R3
set routing-options autonomous-system loops 2

//R3で確認
lab@R3#run clear bgp neighbor 34.34.34.4
//session clearが必要
lab@R3# run show route 1.1.1.1
//snip
1.1.1.1/32         *[BGP/170] 00:00:14, localpref 100
                      AS path: 24 64699 I, validation-state: unverified
                    >  to 34.34.34.4 via ge-1/0/1.0
//AS Pathで自身の64699があるがルーティングテーブルに登録されている。


■解決策③
3つ目はプライベートAS番号を消去する方法です。
PE間で経路情報を広報する際に消去します。

//R2
set protocols bgp group IBGP neighbor 4.4.4.4 remove-private

//R4
set protocols bgp group IBGP neighbor 2.2.2.2 remove-private

//R3で確認
lab@R3# run show route 1.1.1.1
//snip
1.1.1.1/32         *[BGP/170] 01:17:47, localpref 100
                      AS path: 24 I, validation-state: unverified
                    >  to 34.34.34.4 via ge-1/0/1.0
//AS Pathで64699の情報が無くなっている。


この3つの(いずれかの)解決策でCE間で通信ができるようになりました!

lab@R3# run ping 1.1.1.1 source 3.3.3.3
PING 1.1.1.1 (1.1.1.1): 56 data bytes
64 bytes from 1.1.1.1: icmp_seq=0 ttl=253 time=3.063 ms
64 bytes from 1.1.1.1: icmp_seq=1 ttl=253 time=3.189 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=253 time=3.307 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=253 time=3.267 ms

それぞれの解決策でAS Pathの付き方が変わるので、ケースバイケースでどの解決策を使うか検討する必要がありそうです。
長くなりましたが、今回は以上です!!




以上の内容はhttps://yokohama539.hatenablog.com/entry/2024/08/31/155409より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14