J55 Level2-3

level2-3_topology

問題文

あなたはAS55を運用するNW担当です。

お客様よりSV-01(172.16.0.0.2/24)が属するサーバー群から外部との接続が急になくなったと申告を受けた。

AS92のRT-92はあなたがアクセスできるマネージドルーターであり、172.16.0.0/24のアドレス帯は正式にお客様へ割り当てられているという情報がある。

172.16.0.0/24以外のNWで影響はない。

暫定でも至急なにかしら復旧措置を実施してほしいとのこと。

達成条件(2段階)

RT-01からSV-01(172.16.0.2)までPing到達すること

制約

アクセスできる装置:RT-01, RT-02, RT-92, SV-01

解説

障害サマリー

お客様のSV-01へ到達するための経路と競合する経路情報が2Hop先のAS83から広告されている。
SV-01は172.16.0.0/24のアドレス帯に属しているが、172.16.0.0/20の集約経路でAS55に広告している。
AS83から172.16.0.0/21の経路広告がAS55に伝搬され、Longest Matchで172.16.0.2宛の通信で優先されてしまう。
AS55に不正経路が流入しないように抑止は掛けられるが、その際復旧されるのはあくまでもAS55網内からSV-01への疎通になる。
最終的にRT-92へ向かうより優先な経路を追加・伝搬させたらAS55を超えた外部との接続も復旧できる。
RT-02のeBGP route-policyでは/25以上に細かい経路を広告しないように破棄し、受信経路は/22以上に細かいものも破棄している。

経路調査

RT-01からPing確認。

 SV-01(172.16.0.2)宛はNG

SV-02(81.10.0.1)宛はOK

RT-01の下記ルーティングテーブルを参照すると、172.16.0.2が含まれるBGP prefixが二つあることが分かる。採用されるのはより細かく切られている172.16.0.0/21

 ①172.16.0.0/20 next-hop 2.2.2.2

 ②172.16.0.0/21 next-hop 2.2.2.2 (Longest Match)

パケットの転送先はBGP Next Hop(2.2.2.2)を参照し、ルーティングテーブルの再起検索でOSPFでRT-02向けのGi0/0/0/0から送出されることがわかる。

RT-02に入って改めてPingすると結果は相変わらずNG。

RT-02でshow ip routeをたたくと、今度は①と②でnext-hopが異なることが分かる。※RT-02からiBGPで広報されたときはLo0(2.2.2.2)だった。

 ①172.16.0.0/20 next-hop 10.2.92.2
 next-hopは10.2.92.0/30のConnected経路がGi0/0/0/2を向いている。NW図またはIF description見るとRT-92と記載。

 ②172.16.0.0/21 next-hop 10.1.81.2
 next-hopは10.1.81.0/30のConnected経路がGi0/0/0/1を向いている。NW図またはIF description見るとRT-81と記載。

RT-02でルーティングテーブル等を確認
RT-02で採択経路の再確認

RT-02のBGPテーブルを見ると10.1.81.2はAS81、10.2.92.2はAS92のBGP Peerだと分かる。

本来はAS92に向かっているはずの通信がAS81に吸い込まれていることが分かる。

一応RT-92にログインすれば172.16.0.2向けのPingはちゃんと届くことも確認できるので根本原因はやはり経路がLongest MatchでHijackされていることが分かる。

対策について検討

RT-02から不正な経路に向かうので、AS81からの受信経路を詳しく見てみよう。

  • 172.16.0.0/21のAS Pathを確認すると、2Hop先から不正経路が広告されている模様。
  • 到達性のある81.10.0.1(SV-02)の経路もここで見ると二つそれらしきものがある。
    妙なことにより81.10.0.0/24の経路も受信しているが「>」のbestと示すマークが付いていない。
  • また81.10.0.0/16はAS81から広告されている。
    不正経路をRT-02でフィルターしてもAS81配下にある81.10.0.1からは抑止されない

RT-02でAS92から受けている経路は172.16.0.0/20のただ一つ。172.16.0.0/24を広告に足せばよい?

RT-92のルーティングテーブルを確認すると172.16.0.0/21の範囲では172.16.0.0/24だけが影響されると推定できる。

 172.16.0.0/21でその他細かい経路は/20の集約経路でNull0に向かう。

 172.16.8.0/22または172.16.12.0/22のStatic経路を利用。

RT-92はなぜ172.16.0.0/20の経路しか広告していないか探ってみる。

 RT-02(10.2.92.1)に広告している経路情報を見ると、「Local Aggregate」と記載がある。
 経路を集約して細かいものをRT-92側で抑止しているんだと想定。

RT-92のコンフィグを見てみよう。

 aggregate-address 172.16.0.0/20 summary-onlyで細かい経路を抑止している

RT-92でsummary-onlyを外せば良いか?

抑止されている経路はBGPテーブルで「s」フラグのものを見るが、172.16.0.2が含まれるより細かい経路がない。

RT-92のコンフィグをもう少しみると172.16.8.0/22等はstatic経路としてstatic-to-BGPでBGPテーブルに入っているが、172.16.0.0/24はConnected経路なので対象外。

  「summary-only」を外して「redistribute connected」を追加すべきか?

 何かしらの方法で172.16.0.0/24を広告させるのは検討するも、いじらないといけないものが多い。

RT-92のルーティングコンフィグ

一旦RT-02に戻って状況を改めてみよう。81.10.0.0/24の受信経路がなぜかbest pathに選定されなかったことも気になるのでコンフィグをみる。

RT-02の経路ポリシー

RT-02の経路ポリシーを踏まえて対策検討

RT-02のInbound Policy

 AS81とAS92のeBGPピアで共通。

  • RT-81でSV-02向けの81.10.0.0/24経路も抑止されるから、81.10.0.0/16が採択されている。
  • RT-92で仮に/24/23/22のより長いPrefix長を広告させられても、RT-02ではそのまま受けられない。

 /22より細かい経路を抑止。/21のHijack経路は通してしまう

  • RT-92から同じ/22を広告させたらその他BGP属性の勝負になるが、SV-02が外部にあるので制御不可。

RT-02のOutbound Policy

 ここでは/25以上のPrefixは抑止されるが、/24は広告できるはず。

 戻り通信のためにRT-81に対して広告する経路をみると/24の経路も存在する。

RT-02からRT-81に対する経路広告
ネタバレ(正解回答例)

正解回答例

複数ありえるが、以下がおそらく一番簡単な方法

1)RT-02で172.16.0.0/24のstatic経路を書くとLongest matchで勝てる。またnetworkコマンドでBGP経路として網内に伝搬し、外部にあるSV-02にも経路を伝搬させる。

コメント:network上記設定よりAS55網内には伝搬されなくても、RT-01は不正経路を元にRT-02に向かい、RT-02のstatic経路のみでPerHopのルーティング仕様より到達可能。ただし、SV-02から172.16.0.2/24との疎通問題は解消しない。

2)RT-92にログインして経路ポリシー変更し、RT-02でも受信フィルターを緩和。難易度高くなるが可能。

この問題に対して筆者の感想

約10年前にISPのNW設備保守をやっていた際、実は経路ハイジャックの問題があれば基本エスカレして直接対処することがなかったので、勉強のためにどうやるんだっけと思いながら作門しました。

実は今回は最初に手掛けたラバ環境で動かせるノード数が限られていたので、少なくするように心がけていました。

結果、RT-02を不正経路および正常な経路を両方受ける対外ルーターにしてしまい、Static経路等を網内に伝搬させなくてもRT-01からの疎通が復旧できるとに後になって気づいちゃった。そこで「あ〜、失敗した!」と思いながら達成基準2を追加しました。

ISPによってポリシー等が違うと思うが、網外まで考慮して救済措置をとるのかな?より細かく経路を書く対策も限度があるのでやはりRPKI等の普及が大事だな。

コンフィグ

詳細トポロジー図

j552-3topologydetails
RT-01

hostname RT-01
username clab
group root-lr
group cisco-support
secret 10 XXXX
grpc
port 9339
no-tls
address-family dual
!
line default
transport input ssh
!
netconf-yang agent
ssh
!
interface Loopback0
ipv4 address 1.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0/0/0
description to-RT-02-internal
ipv4 address 192.168.0.1 255.255.255.252
!
router static
address-family ipv4 unicast
0.0.0.0/0 MgmtEth0/RP0/CPU0/0 172.20.20.1
!
address-family ipv6 unicast
::/0 MgmtEth0/RP0/CPU0/0 3fff:172:20:20::1
!
!
router ospf 55
router-id 1.1.1.1
area 0
interface Loopback0
!
interface GigabitEthernet0/0/0/0
network point-to-point
!
!
!
router bgp 55
address-family ipv4 unicast
!
neighbor 2.2.2.2
remote-as 55
description iBGP-to-RT-02
update-source Loopback0
address-family ipv4 unicast
next-hop-self
!
!
!
ssh server v2
ssh server netconf vrf default
end

RT-02

hostname RT-02
username clab
group root-lr
group cisco-support
secret 10 XXX
grpc
port 9339
no-tls
address-family dual
!
line default
transport input ssh
!
netconf-yang agent
ssh
!
interface Loopback0
ipv4 address 2.2.2.2 255.255.255.255
!
interface GigabitEthernet0/0/0/0
description to-RT-01-internal
ipv4 address 192.168.0.2 255.255.255.252
!
interface GigabitEthernet0/0/0/1
description to-RT-81-external
ipv4 address 10.1.81.1 255.255.255.252
!
interface GigabitEthernet0/0/0/2
description to-RT-92-external
ipv4 address 10.2.92.1 255.255.255.252
!
route-policy AS81_INBOUND
if destination in (0.0.0.0/0 ge 22) then
drop
else
pass
endif
end-policy
!
route-policy AS92_INBOUND
if destination in (0.0.0.0/0 ge 22) then
drop
else
pass
endif
end-policy
!
route-policy AS81_OUTBOUND
if destination in (0.0.0.0/0 ge 25) then
drop
else
pass
endif
end-policy
!
route-policy AS92_OUTBOUND
if destination in (0.0.0.0/0 ge 25) then
drop
else
pass
endif
end-policy
!
router static
address-family ipv4 unicast
0.0.0.0/0 MgmtEth0/RP0/CPU0/0 172.20.20.1
192.168.0.0/24 Null0
!
address-family ipv6 unicast
::/0 MgmtEth0/RP0/CPU0/0 3fff:172:20:20::1
!
!
router ospf 55
router-id 2.2.2.2
area 0
interface Loopback0
!
interface GigabitEthernet0/0/0/0
network point-to-point
!
!
!
router bgp 55
address-family ipv4 unicast
network 192.168.0.0/24
!
neighbor 1.1.1.1
remote-as 55
description iBGP-to-RT-01
update-source Loopback0
address-family ipv4 unicast
next-hop-self
!
!
neighbor 10.1.81.2
remote-as 81
description to-RT-81-external
address-family ipv4 unicast
next-hop-self
route-policy AS81_INBOUND in
route-policy AS81_OUTBOUND out
soft-reconfiguration inbound always
!
!
neighbor 10.2.92.2
remote-as 92
description to-RT-92-external
address-family ipv4 unicast
next-hop-self
route-policy AS92_INBOUND in
route-policy AS92_OUTBOUND out
soft-reconfiguration inbound always
!
!
!
ssh server v2
ssh server netconf vrf default
end

RT-92

hostname RT-92
username clab
group root-lr
group cisco-support
secret 10 XXXX
grpc
port 9339
no-tls
address-family dual
!
line default
transport input ssh
!
netconf-yang agent
ssh
!
interface Loopback0
ipv4 address 92.92.92.92 255.255.255.255
!
interface GigabitEthernet0/0/0/0
description to-RT-02
ipv4 address 10.2.92.2 255.255.255.252
!
interface GigabitEthernet0/0/0/1
description to-SV-01
ipv4 address 172.16.0.1 255.255.255.0
!
prefix-set STATIC-to-BGP
172.16.0.0/16 ge 16
end-set
!
route-policy REDIST
if destination in STATIC-to-BGP then
pass
else
drop
endif
end-policy
!
route-policy OTHERAS_INBOUND
pass
end-policy
!
route-policy OTHERAS_OUTBOUND
if destination in (172.16.0.0/16 ge 22) then
drop
else
pass
endif
end-policy
!
router static
address-family ipv4 unicast
0.0.0.0/0 MgmtEth0/RP0/CPU0/0 172.20.20.1
0.0.0.0/1 GigabitEthernet0/0/0/0 10.2.92.1
128.0.0.0/1 GigabitEthernet0/0/0/0 10.2.92.1
172.16.8.0/22 GigabitEthernet0/0/0/1 172.16.0.2
172.16.12.0/22 GigabitEthernet0/0/0/1 172.16.0.2
!
address-family ipv6 unicast
::/0 MgmtEth0/RP0/CPU0/0 3fff:172:20:20::1
!
!
router bgp 92
address-family ipv4 unicast
aggregate-address 172.16.0.0/20 summary-only
redistribute static route-policy REDIST
!
neighbor 10.2.92.1
remote-as 55
description to-RT-02
address-family ipv4 unicast
next-hop-self
route-policy OTHERAS_INBOUND in
route-policy OTHERAS_OUTBOUND out
soft-reconfiguration inbound always
!
!
!
ssh server v2
ssh server netconf vrf default
end

RT-81

hostname RT-81
username clab
group root-lr
group cisco-support
secret 10 XXXX
grpc
port 9339
no-tls
address-family dual
!
line default
access-class ingress SSH-ACL
!
netconf-yang agent
ssh
!
ipv4 access-list SSH-ACL
10 deny ipv4 any any
!
interface Loopback0
ipv4 address 81.81.81.81 255.255.255.255
!
interface GigabitEthernet0/0/0/0
description to-RT-02
ipv4 address 10.1.81.2 255.255.255.252
!
interface GigabitEthernet0/0/0/1
description to-RT-83
ipv4 address 10.83.0.1 255.255.255.252
!
interface GigabitEthernet0/0/0/2
description to-SV-02
ipv4 address 81.10.0.254 255.255.255.0
!
route-policy AS55_INBOUND
pass
end-policy
!
route-policy AS83_INBOUND
pass
end-policy
!
route-policy AS55_OUTBOUND
pass
end-policy
!
route-policy AS83_OUTBOUND
pass
end-policy
!
router static
address-family ipv4 unicast
0.0.0.0/0 MgmtEth0/RP0/CPU0/0 172.20.20.1
13.12.0.0/20 Null0
14.13.0.0/16 Null0
15.16.0.0/20 Null0
81.10.0.0/16 Null0
!
address-family ipv6 unicast
::/0 MgmtEth0/RP0/CPU0/0 3fff:172:20:20::1
!
!
router bgp 81
address-family ipv4 unicast
network 13.12.0.0/20
network 14.13.0.0/16
network 15.16.0.0/20
network 81.10.0.0/16
network 81.10.0.0/24
!
neighbor 10.1.81.1
remote-as 55
description to-RT-02
address-family ipv4 unicast
next-hop-self
route-policy AS55_INBOUND in
route-policy AS55_OUTBOUND out
!
!
neighbor 10.83.0.2
remote-as 83
description to-RT-83
address-family ipv4 unicast
next-hop-self
route-policy AS83_INBOUND in
route-policy AS83_OUTBOUND out
!
!
!
ssh server v2
ssh server netconf vrf default
end

RT-83

hostname RT-83
username clab
group root-lr
group cisco-support
secret 10 XXXX
grpc
port 9339
no-tls
address-family dual
!
line default
access-class ingress SSH-ACL
!
netconf-yang agent
ssh
!
ipv4 access-list SSH-ACL
10 deny ipv4 any any
!
interface Loopback0
ipv4 address 83.83.83.83 255.255.255.255
!
interface GigabitEthernet0/0/0/0
description to-RT-81
ipv4 address 10.83.0.2 255.255.255.252
!
route-policy AS81_INBOUND
pass
end-policy
!
route-policy AS81_OUTBOUND
pass
end-policy
!
router static
address-family ipv4 unicast
0.0.0.0/0 MgmtEth0/RP0/CPU0/0 172.20.20.1
10.83.0.0/16 Null0
172.16.0.0/21 Null0
!
address-family ipv6 unicast
::/0 MgmtEth0/RP0/CPU0/0 3fff:172:20:20::1
!
!
router bgp 83
address-family ipv4 unicast
network 10.83.0.0/16
network 172.16.0.0/21
!
neighbor 10.83.0.1
remote-as 81
description to-RT-81
address-family ipv4 unicast
next-hop-self
route-policy AS81_INBOUND in
route-policy AS81_OUTBOUND out
!
!
!
ssh server v2
ssh server netconf vrf default
end

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です