こんにちは。NETCON委員のizuminです。
JANOG53では問題を作成したので解説します!
ここでは私が作成した4問のうちLevel 3-3を解説します。
その他の3問はこちら。
問題
あなたはコンテンツ事業者 NETCON(AS64500) のAS運用担当です。
下記の図のような構成のネットワークを運用しています。
トラフィックを眺めていたところ下記の対応が必要なようです。設定しましょう。
1. Outbaundの調整
IX-AのOutboundトラフィックが多いようです。
AS64502向けのトラフィックををIX-Bのみになるように設定しましょう。
IX-A, IX-B ECMP → IX-B
2. Inboundの調整
IX-BのInboundトラフィックが多いようです。
調べたところ、AS64502からのInトラフィックはIX-A / IX-Bで分散されています。
IX-Aが優先されるようにコントロールしてください。
AS64502以外のInboundは変わらないようにしてください。
3. ピアリング
AS64503向けの一部の経路がTransit経由のようです。
担当者に確認するとAS64503はRouteServerには広報していない経路があるようなのでバイラテラルピアを張ることになりました。
IX-A / IX-Bにてピアリングして全経路向けのOutboundがIX経由になるようにしましょう
解説-設定例
+ ip as-path access-list AS64502-PATH seq 10 permit "_64502$"
+ route-map BGP-AS64502-CONTROL-IN deny 10
+ match ip address prefix-list BOGON_ROUTE DEFAULT_ROUTE LONGPREFIX_ROUTE SHORTPREFIX_ROUTE
+ route-map BGP-AS64502-CONTROL-IN deny 20
+ match as-path ORIGIN-AS-PATH
+ route-map BGP-AS64502-CONTROL-IN permit 30
+ match as-path AS64502-PATH
+ set metric 100
+ set local-preference 400
+ route-map BGP-AS64502-CONTROL-IN permit 40
+ match ip address prefix-list ALL_ROUTE
+ set metric 100
+ set local-preference 300
+ route-map BGP-IX-B-OUT deny 10
+ match ip address prefix-list BOGON_ROUTE DEFAULT_ROUTE LONGPREFIX_ROUTE SHORTPREFIX_ROUTE
+ route-map BGP-IX-B-OUT permit 20
+ match ip address prefix-list ORIGIN_ROUTE
+ set metric 100
+ set community 65001:64502
router bgp 64500
neighbor 192.168.2.1
+ address-family ipv4 unicast
+ send-community
+ route-map BGP-AS64502-CONTROL-IN in
+ route-map BGP-IX-B-OUT out
+ soft-reconfiguration inbound always
+ neighbor 192.168.1.5
+ inherit peer PEER
+ remote-as 64503
+ description ### ISP-C via IX-A ###
+ neighbor 192.168.2.5
+ inherit peer PEER
+ remote-as 64503
+ description ### ISP-C via IX-B ###
解説-概要
今回の問題はAS運用者がBGPのアトリビュートを用いてさまざまな制御を実施する問題でした。
制御の仕方は一つではないので経路のベストパスが正しければOKとしています。(Staticは流石にNG)
解説-詳細
1. Outbaundの調整
IX-AのOutboundトラフィックが多いようです。
AS64502向けのトラフィックををIX-Bのみになるように設定しましょう。
IX-A, IX-B ECMP → IX-B
まずは1つ目のOutboundから実施します。
CORE1にBGP Table及びRouting Tableを確認し、AS64502がどのような状況か確認します。
BGP Tableには4つのパスがあります。見ての通りIXから受信している2経路が強いため、multipathとなっています。
このパスをIX-Bだけが勝つように設定しようというのが1つ目の課題です。設定方法は自由です。MEDを変えてもよし、LPを変えてもよしです。
CORE1# show ip bgp regexp "_64502$"
BGP routing table information for VRF default, address family IPv4 Unicast
BGP table version is 167, Local Router ID is 9.9.9.9
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist, I-injected
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath, & - backup, 2 - best2
Network Next Hop Metric LocPrf Weight Path
*|e2.2.1.0/24 192.168.2.4 100 300 0 64502 i
*>e 192.168.1.4 100 300 0 64502 i
* i 9.9.1.2 100 300 0 64502 i
* e 1.1.1.1 200 200 0 64501 64502 i
*|e2.2.2.0/24 192.168.2.4 100 300 0 64502 i
*>e 192.168.1.4 100 300 0 64502 i
* i 9.9.1.2 100 300 0 64502 i
* e 1.1.1.1 200 200 0 64501 64502 i
*|e2.2.3.0/24 192.168.2.4 100 300 0 64502 i
*>e 192.168.1.4 100 300 0 64502 i
* i 9.9.1.2 100 300 0 64502 i
* e 1.1.1.1 200 200 0 64501 64502 i
-snip-
ここでは、LPを上げる方法で設定を実施します。
デフォルトのポリシーでは
IX: LP 300 / MED 100
Transit: LP 200 / MED 200
に設定されています。IX-BにLP400を適用変更します。
LPを変更するに当たり考えることが2つあります。
1つ目はRouteServerなので1つのピアから複数のASの経路を受信していること。
2つ目はBGP設定が共通のPeer Templateを利用していることです。
1つ目のRouteServerについては、AS_PATHをroute-mapで引っ掛けることによってAS64502生成の経路だけにLPを適用します。
2つ目のPeer templateについては、新しくgroupを作成して継承するもよし、
Neighbor配下に直接書くことでGroupより優先されるのでその方法でもOKです。
ただし、Neighbor配下に設定する場合は、その階層以下はtemplateに書いた内容が適用されないことに注意します。
ここではNeighborに直接記載する方法で設定します。
+ ip as-path access-list AS64502-PATH seq 10 permit "_64502$"
+ route-map BGP-AS64502-CONTROL-IN deny 10
+ match ip address prefix-list BOGON_ROUTE DEFAULT_ROUTE LONGPREFIX_ROUTE SHORTPREFIX_ROUTE
+ route-map BGP-AS64502-CONTROL-IN deny 20
+ match as-path ORIGIN-AS-PATH
+ route-map BGP-AS64502-CONTROL-IN permit 30
+ match as-path AS64502-PATH
+ set metric 100
+ set local-preference 400
+ route-map BGP-AS64502-CONTROL-IN permit 40
+ match ip address prefix-list ALL_ROUTE
+ set metric 100
+ set local-preference 300
router bgp 64500
neighbor 192.168.2.1
+ address-family ipv4 unicast
+ route-map BGP-AS64502-CONTROL-IN in
設定を変更したあとでBGP Tableを確認します。
LPを400にあげたためベストパスが一つになっています。
AS64503に変化がないこと、Routing Tableも確認して問題がないことを確認して1つ目の課題は達成です。
CORE1# show ip bgp regexp "_64502$"
BGP routing table information for VRF default, address family IPv4 Unicast
BGP table version is 187, Local Router ID is 9.9.9.9
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist, I-injected
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath, & - backup, 2 - best2
Network Next Hop Metric LocPrf Weight Path
* i2.2.1.0/24 9.9.1.2 100 400 0 64502 i
*>e 192.168.2.4 100 400 0 64502 i
* e 192.168.1.4 100 300 0 64502 i
* e 1.1.1.1 200 200 0 64501 64502 i
* i2.2.2.0/24 9.9.1.2 100 400 0 64502 i
*>e 192.168.2.4 100 400 0 64502 i
* e 192.168.1.4 100 300 0 64502 i
* e 1.1.1.1 200 200 0 64501 64502 i
* i2.2.3.0/24 9.9.1.2 100 400 0 64502 i
*>e 192.168.2.4 100 400 0 64502 i
* e 192.168.1.4 100 300 0 64502 i
* e 1.1.1.1 200 200 0 64501 64502 i
-snip-
CORE1# show ip bgp regexp "_64503$"
BGP routing table information for VRF default, address family IPv4 Unicast
BGP table version is 187, Local Router ID is 9.9.9.9
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist, I-injected
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath, & - backup, 2 - best2
Network Next Hop Metric LocPrf Weight Path
*|e3.3.1.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
*|e3.3.2.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
*|e3.3.3.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
-snip-
CORE1# show ip route
IP Route Table for VRF "default"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>
-snip-
2.2.1.0/24, ubest/mbest: 1/0
*via 192.168.2.4, [20/100], 00:03:44, bgp-64500, external, tag 64502
2.2.2.0/24, ubest/mbest: 1/0
*via 192.168.2.4, [20/100], 00:03:44, bgp-64500, external, tag 64502
2.2.3.0/24, ubest/mbest: 1/0
*via 192.168.2.4, [20/100], 00:03:44, bgp-64500, external, tag 64502
-snip-
3.3.1.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:31:27, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:31:26, bgp-64500, external, tag 64503
3.3.2.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:31:27, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:31:26, bgp-64500, external, tag 64503
3.3.3.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:31:27, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:31:26, bgp-64500, external, tag 64503
-snip-
2. Inboundの調整
IX-BのInboundトラフィックが多いようです。
調べたところ、AS64502からのInトラフィックはIX-A / IX-Bで分散されています。
IX-Aが優先されるようにコントロールしてください。
AS64502以外のInboundは変わらないようにしてください。
次にInboundの調整を実施します。
Inboundの制御は受信側のポリシーではどうすることもできません。
相手に対して広報する際のOutbound側のroute-mapに設定を追加する必要があります。
ですが、今回はそのようなこともできません。なぜならRoute-ServerによるPublic Peerのため、
route-mapを設定するNeighborはRoute-Serverになるからです。これでは、全てのPeerに影響してしまいます。
そこで問題にあるIXが対応しているコミュニティを確認します。
コミュニティを見るとPrependや広報の停止に対応しているようです。今回はそのコミュニティを利用して制御します。
対応しているコミュニティの制御は2種類です。
- Prepend
- 広報停止
今回はベストパスをIX-Aに変更したいだけで、IX-B側の広報停止は強すぎます。
ただし、相手側でLPなどを設定している場合はPrependは無視されます。
今回の問題ではLookingGlassなる最低限のコマンドが許可された状態でISP機器にログインが可能です。
そこで確認することでLPが同一であることがわかるのでPrependすれば良いことがわかります。
今回はAS64502のInをIX-Aに移したいため、IX-Bに対して `65001:64502` を付与して広報してあげればよいです。
まずはISP-Bの経路を確認してみます。ECMP状態です。
ISP-B>show ip bgp regex _64500$ | no-more
BGP routing table information for VRF default
Router identifier 2.2.2.2, local AS number 64502
Route status codes: s - suppressed contributor, * - valid, > - active, E - ECMP head, e - ECMP
S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast
% - Pending BGP convergence
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop
Network Next Hop Metric AIGP LocPref Weight Path
* >Ec 9.9.1.0/24 192.168.1.3 100 - 300 0 64500 i
* ec 9.9.1.0/24 192.168.2.2 100 - 300 0 64500 i
* 9.9.1.0/24 1.1.1.9 100 - 200 0 64501 64500 i
* >Ec 9.9.2.0/24 192.168.1.3 100 - 300 0 64500 i
* ec 9.9.2.0/24 192.168.2.2 100 - 300 0 64500 i
* 9.9.2.0/24 1.1.1.9 100 - 200 0 64501 64500 i
* >Ec 9.9.3.0/24 192.168.1.3 100 - 300 0 64500 i
* ec 9.9.3.0/24 192.168.2.2 100 - 300 0 64500 i
* 9.9.3.0/24 1.1.1.9 100 - 200 0 64501 64500 i
-snip-
実際に設定を投入します。
+ route-map BGP-IX-B-OUT deny 10
+ match ip address prefix-list BOGON_ROUTE DEFAULT_ROUTE LONGPREFIX_ROUTE SHORTPREFIX_ROUTE
+ route-map BGP-IX-B-OUT permit 20
+ match ip address prefix-list ORIGIN_ROUTE
+ set metric 100
+ set community 65001:64502
router bgp 64500
neighbor 192.168.2.1
address-family ipv4 unicast
+ route-map BGP-IX-B-OUT out
+ send-community standard
上記の設定を投入したら再度ISP-B/ISP-Cで確認してみます。
ISP-BだけIX-Bから受信した経路がPrependされたことがわかります。LPは同一ですがAS_PATHでIX-Aが優先になりました。
これにて2つ目の対応も完了です。
ISP-B>show ip bgp regex _64500$ | no-more
BGP routing table information for VRF default
Router identifier 2.2.2.2, local AS number 64502
Route status codes: s - suppressed contributor, * - valid, > - active, E - ECMP head, e - ECMP
S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast
% - Pending BGP convergence
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop
Network Next Hop Metric AIGP LocPref Weight Path
* > 9.9.1.0/24 192.168.1.3 100 - 300 0 64500 i
* 9.9.1.0/24 192.168.2.2 100 - 300 0 64500 64500 i
* 9.9.1.0/24 1.1.1.9 100 - 200 0 64501 64500 i
* > 9.9.2.0/24 192.168.1.3 100 - 300 0 64500 i
* 9.9.2.0/24 192.168.2.2 100 - 300 0 64500 64500 i
* 9.9.2.0/24 1.1.1.9 100 - 200 0 64501 64500 i
* > 9.9.3.0/24 192.168.1.3 100 - 300 0 64500 i
* 9.9.3.0/24 192.168.2.2 100 - 300 0 64500 64500 i
* 9.9.3.0/24 1.1.1.9 100 - 200 0 64501 64500 i
-snip-
ISP-B>show ip route 9.9.1.0/24
-snip-
B E 9.9.1.0/24 [200/100] via 192.168.1.3, Ethernet2
ISP-C>show ip bgp regex _64500$ | no-more
BGP routing table information for VRF default
Router identifier 3.3.3.3, local AS number 64503
Route status codes: s - suppressed contributor, * - valid, > - active, E - ECMP head, e - ECMP
S - Stale, c - Contributing to ECMP, b - backup, L - labeled-unicast
% - Pending BGP convergence
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI Origin Validation codes: V - valid, I - invalid, U - unknown
AS Path Attributes: Or-ID - Originator ID, C-LST - Cluster List, LL Nexthop - Link Local Nexthop
Network Next Hop Metric AIGP LocPref Weight Path
* >Ec 9.9.1.0/24 192.168.1.3 100 - 300 0 64500 i
* ec 9.9.1.0/24 192.168.2.2 100 - 300 0 64500 i
* 9.9.1.0/24 1.1.1.13 100 - 200 0 64501 64500 i
* >Ec 9.9.2.0/24 192.168.1.3 100 - 300 0 64500 i
* ec 9.9.2.0/24 192.168.2.2 100 - 300 0 64500 i
* 9.9.2.0/24 1.1.1.13 100 - 200 0 64501 64500 i
* >Ec 9.9.3.0/24 192.168.1.3 100 - 300 0 64500 i
* ec 9.9.3.0/24 192.168.2.2 100 - 300 0 64500 i
* 9.9.3.0/24 1.1.1.13 100 - 200 0 64501 64500 i
-snip-
3. ピアリング
AS64503向けの一部の経路がTransit経由のようです。
担当者に確認するとAS64503はRouteServerには広報していない経路があるようなのでバイラテラルピアを張ることになりました。
IX-A / IX-Bにてピアリングして全経路向けのOutboundがIX経由になるようにしましょう
最後にピアリングを実施する対応が必要です。
Routing Tableを見てAS64503からの3.3.6.0/24 ~ 3.3.3.9.0/24の経路がTransitであるISP-Aに向いていることがわかります。
CORE1# show ip bgp regexp "_64503$"
BGP routing table information for VRF default, address family IPv4 Unicast
BGP table version is 201, Local Router ID is 9.9.9.9
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist, I-injected
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath, & - backup, 2 - best2
Network Next Hop Metric LocPrf Weight Path
*|e3.3.1.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
*|e3.3.2.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
*|e3.3.3.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
*|e3.3.4.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
*|e3.3.5.0/24 192.168.2.5 100 300 0 64503 i
*>e 192.168.1.5 100 300 0 64503 i
* i 9.9.1.2 100 300 0 64503 i
* e 1.1.1.1 200 200 0 64501 64503 i
*>e3.3.6.0/24 1.1.1.1 200 200 0 64501 64503 i
* i 9.9.1.2 200 200 0 64501 64503 i
*>e3.3.7.0/24 1.1.1.1 200 200 0 64501 64503 i
* i 9.9.1.2 200 200 0 64501 64503 i
*>e3.3.8.0/24 1.1.1.1 200 200 0 64501 64503 i
* i 9.9.1.2 200 200 0 64501 64503 i
*>e3.3.9.0/24 1.1.1.1 200 200 0 64501 64503 i
* i 9.9.1.2 200 200 0 64501 64503 i
*>e3.3.10.0/24 1.1.1.1 200 200 0 64501 64503 i
* i 9.9.1.2 200 200 0 64501 64503 i
AS64503はRouteServerには広報していない経路があったようです。話し合いの結果、双方のメリットがあったようでバイラテラルピアを用意することになりました。
AS64503側はすでに設定中のようなのでCORE1/CORE2でピアの設定をします。
ここで必要になる設定は
- ASN
- route-map
- IPアドレス
です。IPアドレスはIX-A/IX-Bのアドレス表に記載されています。これを利用して設定しましょう。
route-mapは他のポリシーと揃えてよしなに設定しましょう。ここでは既存のtempleteのPEERを利用します。
# CORE1/CORE2で設定
router bgp 64500
+ neighbor 192.168.1.5
+ inherit peer PEER
+ description ### ISP-C via IX-A ###
+ remote-as 64503
+ neighbor 192.168.2.5
+ inherit peer PEER
+ description ### ISP-C via IX-B ###
+ remote-as 64503
設定が完了したらBGPのStatusや経路を確認します。
CORE1# show ip bgp summary
Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
1.1.1.1 4 64501 99 81 228 0 0 01:17:45 30
9.9.1.2 4 64500 92 82 228 0 0 01:17:48 42
9.9.1.6 4 65000 98 81 228 0 0 01:17:42 1
192.168.1.1 4 64504 159 159 228 0 0 01:17:42 15
192.168.1.5 4 64503 5 4 228 0 0 00:00:32 10
192.168.2.1 4 64505 159 165 228 0 0 01:17:41 15
192.168.2.5 4 64503 5 4 228 0 0 00:00:31 10
CORE1# show ip route
-snip-
3.3.1.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.2.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.3.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.4.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.5.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.6.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.7.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.8.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.9.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
3.3.10.0/24, ubest/mbest: 2/0
*via 192.168.1.5, [20/100], 00:02:08, bgp-64500, external, tag 64503
*via 192.168.2.5, [20/100], 00:02:07, bgp-64500, external, tag 64503
-snip-