BGP でプライベート AS 番号を使っている場合、インターネットなど外部へ経路を広告するときに、AS_PATH からプライベート AS 番号を取り除くことがあります。この記事では、Cisco ルータの neighbor remove-private-as コマンドでプライベート AS を削除する動きを、設定と show ip bgp の出力で確認します。
remove-private-asで、プライベート AS だけの AS_PATH から削除するremove-private-as allで、グローバル AS が混在していても削除する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 を広告します。
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 を付け足しています)。
プライベート 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
- 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-as | AS_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 は変わらないので、結果は相手のルータで確認します。
コメント