BGP プライベートAS削除の動作確認(Ciscoルータ)

BGP でプライベート AS 番号を使っている場合、インターネットなど外部へ経路を広告するときに、AS_PATH からプライベート AS 番号を取り除くことがあります。この記事では、Cisco ルータの neighbor remove-private-as コマンドでプライベート AS を削除する動きを、設定と show ip bgp の出力で確認します。

この記事でわかること
  1. remove-private-as で、プライベート AS だけの AS_PATH から削除する
  2. remove-private-as all で、グローバル AS が混在していても削除する
  3. remove-private-as all replace-as で、自分の AS 番号に置き換える

BGP のプライベート AS 番号とは

プライベート AS 番号は、組織の中など、インターネットに直接見せないネットワークで使うために予約された AS 番号です(RFC 6996)。IP アドレスでいうプライベートアドレスのようなもので、誰でも自由に使えます。

AS 番号の長さプライベート AS の範囲
2 バイト64512〜65534
4 バイト4200000000〜4294967294

プライベート AS 番号はインターネット上で一意ではないため、インターネットへ経路を広告する前に AS_PATH から取り除く必要があります。たとえば、プライベート AS で ISP に接続しているお客さまの経路を、ISP が上位へ広告するときに削除する、といった使い方をします。

補足

65535 はプライベート AS ではなく、予約された番号です(RFC 7300)。2 バイトのプライベート AS として使えるのは 65534 までです。

検証構成

R2、R3、R4 を直列に接続し、それぞれ eBGP のピアを張ります。R2 だけプライベート AS 番号の 65000 を使い、Loopback0 の 2.2.2.2/32 を広告します。

AS 65000 AS 3 AS 4 Lo0 2.2.2.2/32 Lo0 3.3.3.3/32 Lo0 4.4.4.4/32 R2 R3 R4 .2 .3 .3 .4 192.168.23.0/24 192.168.34.0/24 eBGP eBGP
図1 検証構成

R2

R2(config)# router bgp 65000
R2(config-router)#  network 2.2.2.2 mask 255.255.255.255
R2(config-router)#  neighbor 192.168.23.3 remote-as 3

R3

R3(config)# router bgp 3
R3(config-router)#  neighbor 192.168.23.2 remote-as 65000
R3(config-router)#  neighbor 192.168.34.4 remote-as 4

R4

R4(config)# router bgp 4
R4(config-router)#  neighbor 192.168.34.3 remote-as 3

R3 の BGP テーブルを確認すると、2.2.2.2/32 を AS_PATH「65000」で学習しています。

R3

R3# show ip bgp 
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.23.2             0             0 65000 i

R4 の BGP テーブルでは、2.2.2.2/32 の AS_PATH は「3 65000」です。R3 が自分の AS 番号 3 を先頭に付けて広告しているためです。

R4

R4# show ip bgp 
BGP table version is 2, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.34.3                           0 3 65000 i

この 65000 を、R3 から R4 へ広告するときに AS_PATH から取り除きます。設定ごとの AS_PATH の変化は、次の図のとおりです(STEP 2 以降の検証では、R2 で AS 2 を付け足しています)。

R3 が R2 から受け取った AS_PATH 650002 R3 の設定(R4 向け) R4 が受け取る AS_PATH 設定なし/remove-private-as 3650002 プライベート AS が残る remove-private-as all 32 65000 を削除 remove-private-as all replace-as 332 65000 を 3 に置き換え 太枠:R3 の AS 3(先頭に付けたもの・置き換えたもの) 点線:プライベート AS
図2 R3 の設定と、R4 が受け取る AS_PATH

プライベート AS を削除する

remove-private-as

R3 で、R4 へ経路を広告するときにプライベート AS を削除するよう、remove-private-as を設定します。削除はネイバーごと、送る方向(アウトバウンド)で行われます。

R3

R3(config)# router bgp 3
R3(config-router)# neighbor 192.168.34.4 remove-private-as

設定を反映するため、BGP セッションをクリアします。

R3

R3# clear ip bgp *

R3 の BGP テーブルを確認すると、2.2.2.2/32 の AS_PATH は「65000」のままです。R3 が受け取った経路は変わらず、R4 へ送るときだけ書き換わります。

R3

R3# show ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.23.2             0             0 65000 i

R4 の BGP テーブルを確認すると、設定前は「3 65000」だった AS_PATH から 65000 が削除され、「3」だけになっています。R4 からは、AS 3 から出た経路のように見えます。

R4

R4# show ip bgp
BGP table version is 4, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.34.3                           0 3 I
remove-private-as が使える条件(Cisco)
  • eBGP のネイバーにだけ設定できます。
  • all を付けない場合、AS_PATH がプライベート AS だけのときに削除します。グローバル AS が混在していると削除しません。
  • 古いソフトウェアでは、AS_PATH に送り先のネイバーの AS 番号が入っていると削除しない、といった制限もあります。動きはバージョンによって変わるので、使うバージョンのドキュメントで確認してください。

remove-private-as all

AS_PATH にプライベート AS とグローバル AS が混在していると、remove-private-as ではプライベート AS が削除されません。確かめるため、remove-private-as を設定したまま、R2 から広告する経路にグローバル AS(ここでは AS 2)をプリペンドします。検証のために AS_PATH を混在させる設定で、実際のネットワークで他人の AS 番号を付けることはありません。

R2

R2(config)# route-map ASPREPEND permit 10
R2(config-route-map)# set as-path prepend 2
R2(config-route-map)# exit
R2(config)# router bgp 65000
R2(config-router)# neighbor 192.168.23.3 route-map ASPREPEND out

BGP セッションをクリアします。

R2

R2# clear ip bgp *

R3 の BGP テーブルを見ると、AS_PATH は「65000 2」になっています。

R3

R3# show ip bgp
BGP table version is 4, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.23.2             0             0 65000 2 I

次に R4 の BGP テーブルを確認すると、AS_PATH にプライベート AS の 65000 が残っています。R3 が R4 に広告しようとした経路の AS_PATH が「65000 2」で、プライベート AS とグローバル AS が混在しているためです。

R4

R4# show ip bgp
BGP table version is 6, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.34.3                           0 3 65000 2 i

混在している AS_PATH からもプライベート AS を削除するには、remove-private-as all を設定します。

R3

R3(config)# router bgp 3
R3(config-router)# neighbor 192.168.34.4 remove-private-as all

BGP セッションをクリアします。

R3

R3# clear ip bgp *

R3 の BGP テーブルでは、AS_PATH は「65000 2」のままで、プライベート AS とグローバル AS が混在しています。

R3

R3# show ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.23.2             0             0 65000 2 i

R4 の BGP テーブルを確認すると、AS_PATH のうち 65000 だけが削除され、「3 2」になっています。

R4

R4# show ip bgp
BGP table version is 8, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.34.3                           0 3 2 i

remove-private-as all replace-as

remove-private-as all では、プライベート AS 番号を削除した分だけ AS_PATH が短くなります。AS_PATH の長さはベストパスの選択に使われるため、長さを変えたくない場合は、プライベート AS 番号を自分(ローカル)の AS 番号に置き換えます。コマンドは remove-private-as all replace-as です。

R3

R3(config)# router bgp 3
R3(config-router)# neighbor 192.168.34.4 remove-private-as all replace-as

BGP セッションをクリアします。

R3

R3# clear ip bgp *

R3 の BGP テーブルでは、AS_PATH は「65000 2」のままです。

R3

R3# show ip bgp
BGP table version is 2, local router ID is 3.3.3.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.23.2             0             0 65000 2 i

R4 の BGP テーブルを確認すると、AS_PATH の 65000 が R3 のローカル AS 番号である 3 に置き換わり、「3 3 2」になっています。AS_PATH の長さは、設定前の「3 65000 2」と同じ 3 のままです。

R4

R4# show ip bgp
BGP table version is 10, local router ID is 4.4.4.4
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, 
              r RIB-failure, S Stale, m multipath, b backup-path, f RT-Filter, 
              x best-external, a additional-path, c RIB-compressed, 
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found

     Network          Next Hop            Metric LocPrf Weight Path
 *>  2.2.2.2/32       192.168.34.3                           0 3  3  2  i
補足

この記事では検証のため clear ip bgp *(ハードリセット)で反映していますが、運用中のネットワークではセッションを切らないソフトリセットを使います。ここでは R3 から R4 へ送る経路を変えたので、R3 で clear ip bgp * out を実行すれば反映できます。詳しくは ルートリフレッシュ機能の記事 を参考にしてください。

うまくいかないとき

状態よくある原因確認すること
相手の AS_PATH にプライベート AS が残るAS_PATH にグローバル AS が混在している自分の BGP テーブルで AS_PATH を見る。混在していれば remove-private-as all にする
設定しても AS_PATH が変わらない設定後にリセットしていない広告する側で clear ip bgp * out などのリセットをしたか
自分の BGP テーブルで AS_PATH が変わらない正常な動き。削除されるのは送る経路だけ相手のルータの BGP テーブルで確認する

まとめ

コマンド動きR4 が受け取る AS_PATH
(R3 が 65000 2 で受信)
remove-private-asAS_PATH がプライベート AS だけのときに削除する3 65000 2(削除されない)
remove-private-as allグローバル AS が混在していても、プライベート AS を削除する3 2
remove-private-as all
replace-as
削除したプライベート AS を、自分の AS 番号に置き換える3 3 2

どのコマンドも、相手(ネイバー)へ送るときに AS_PATH を書き換えます。自分の BGP テーブルの AS_PATH は変わらないので、結果は相手のルータで確認します。

コメント