読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。
ISP の統合や接続先の変更などで、自分の AS 番号を変えたい場面があります。BGP では、neighbor ... remote-as で相手の AS 番号を固定で設定しているので、AS 番号を変えると、ネイバーになっている相手のルータの設定も変える必要があります。
相手の設定をすぐに変えられない場合に使えるのが、Cisco ルータの local-as です。local-as を使うと、本来の AS 番号とは違う AS 番号で、ネイバーを張れます。この記事では、local-as と、no-prepend、replace-as、dual-as の各オプションの動きを確認します。
local-asで、古い AS 番号のままネイバーを張るno-prependで、受信する経路に local-as の番号を付けないreplace-asで、送る経路の実際の AS 番号を local-as の番号に置き換えるdual-asで、新旧どちらの AS 番号でもネイバーを張れるようにする- 相手の設定を新しい AS 番号に切り替える
検証構成
次の構成で、R1 の AS 番号を、もともとの AS 1 から AS 100 に変えたいとします。ただし、R2 の設定はすぐには変えられません。そこで R1 で local-as を使い、R1 の実際の AS 番号は 100 にしたまま、R2 とのネイバーには AS 1 を使い続けます。
local-as を設定する
R1 では、router bgp で実際の AS 番号 100 を指定し、ネイバーの local-as で古い AS 番号 1 を設定します。R2 は、R1 を AS 1 として eBGP のネイバーを設定します。
R1
R1(config)# router bgp 100
R1(config-router)# network 1.1.1.1 mask 255.255.255.255
R1(config-router)# neighbor 192.168.12.2 remote-as 2
R1(config-router)# neighbor 192.168.12.2 local-as 1
R2
R2(config)# router bgp 2
R2(config-router)# network 2.2.2.2 mask 255.255.255.255
R2(config-router)# neighbor 192.168.12.1 remote-as 1
これで、R1 と R2 の間で eBGP のネイバーが張れます。
R1 の BGP テーブルを見ると、2.2.2.2/32 の AS_PATH は「1 2」です。R2 から受け取った経路に、local-as で指定した AS 1 が付け足されています。
R1
R1# show ip bgp 2.2.2.2
BGP routing table entry for 2.2.2.2/32, version 5
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1 2
192.168.12.2 from 192.168.12.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external, best
R2 の BGP テーブルでは、1.1.1.1/32 の AS_PATH は「1 100」です。R1 が送る経路には、local-as の AS 1 と、実際の AS 100 の両方が入ります。
R2
R2# show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 2
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1 100
192.168.12.1 from 192.168.12.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external, best
no-prepend オプション
local-as に no-prepend を付けると、R1 は R2 から受け取った経路に、local-as の AS(ここでは AS 1)を付け足さなくなります。設定すると、ネイバーが一度切れて張り直されます。
R1
R1(config)# router bgp 100
R1(config-router)# neighbor 192.168.12.2 local-as 1 no-prepend
R1(config-router)#
%BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down Local AS change
%BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.2 IPv4 Unicast topology base
removed from session Local AS change
%BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up
R1 で BGP テーブルを確認します。
R1
R1# show ip bgp 2.2.2.2
BGP routing table entry for 2.2.2.2/32, version 7
Paths: (1 available, best #1, table default)
Flag: 0x820
Not advertised to any peer
Refresh Epoch 1
2
192.168.12.2 from 192.168.12.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external, best
AS_PATH が「2」だけになり、AS 1 がなくなっています。
R2 の BGP テーブルは、no-prepend の有無で変わりません。no-prepend は、R1 が受け取る経路にだけ効きます。
R2
R2#show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 9
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1 100
192.168.12.1 from 192.168.12.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external, best
no-prepend + replace-as オプション
no-prepend に加えて replace-as を設定すると、R1 が R2 に送る経路で、実際の AS 番号(AS 100)を local-as の AS 番号に置き換えます。R2 からは、AS 100 が見えなくなります。設定すると、ネイバーが一度切れて張り直されます。
R1
R1(config)# router bgp 100
R1(config-router)# neighbor 192.168.12.2 local-as 1 no-prepend replace-as
%BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down Local AS change
%BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.2 IPv4 Unicast topology base
removed from session Local AS change
R1(config-router)#
%BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up
R1 の BGP テーブルは、no-prepend だけのときと変わりません。
R1
R1# show ip bgp 2.2.2.2
BGP routing table entry for 2.2.2.2/32, version 9
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
2
192.168.12.2 from 192.168.12.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external, best
R2 の BGP テーブルを見ると、1.1.1.1/32 の AS_PATH から実際の AS 100 が消え、local-as の AS 1 だけになっています。
R2
R2# show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 11
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1
192.168.12.1 from 192.168.12.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external, best
no-prepend + replace-as + dual-as オプション
さらに dual-as を設定すると、R2 は、R1 の local-as の AS 1 と実際の AS 100 の、どちらを指定してもネイバーを張れるようになります。設定すると、ネイバーが一度切れて張り直されます。
R1
R1(config)# router bgp 100 R1(config-router)# neighbor 192.168.12.2 local-as 1 no-prepend replace-as dual-as %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Down Local AS change %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.2 IPv4 Unicast topology base removed from session Local AS change %BGP-3-NOTIFICATION: received from neighbor 192.168.12.2 active 2/2 (peer in wrong AS) 2 bytes 0064 R1(config-router)# %BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.2 IPv4 Unicast topology base removed from session BGP Notification received R1(config-router)# %BGP-5-ADJCHANGE: neighbor 192.168.12.2 Up
| 表示 | 意味 |
|---|---|
| NOTIFICATION … 2/2 (peer in wrong AS) | R2 から、OPEN メッセージのエラー(エラーコード 2)のうち「相手の AS 番号が違う」(サブコード 2)が返された |
| 2 bytes 0064 | エラーになった AS 番号。16 進数の 0064 は 10 進数で 100。R2 は AS 1 を待っているので、AS 100 での接続は受け付けない |
| Up | その後、AS 1 でネイバーが張れた |
R1 と R2 の BGP テーブルは、no-prepend + replace-as のときと変わりません。
R1
R1# show ip bgp 2.2.2.2
BGP routing table entry for 2.2.2.2/32, version 11
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
2
192.168.12.2 from 192.168.12.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external, best
R2
R2# show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 13
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
1
192.168.12.1 from 192.168.12.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external, best
R2 を新しい AS 番号に切り替える
今は、R2 は R1 を AS 1 としてネイバーを張っています。これを、実際の AS 番号 100 でネイバーを張るように、R2 の設定を変えます。
R2
R2(config)# router bgp 2
R2(config-router)# no neighbor 192.168.12.1 remote-as 1
R2(config-router)#
%BGP_SESSION-5-ADJCHANGE: neighbor 192.168.12.1 IPv4 Unicast topology base
removed from session Neighbor deleted
%BGP-5-ADJCHANGE: neighbor 192.168.12.1 Down Neighbor deleted
R2(config-router)# neighbor 192.168.12.1 remote-as 100
R2(config-router)#
%BGP-5-ADJCHANGE: neighbor 192.168.12.1 Up
R1 は dual-as を設定しているので、AS 100 でもネイバーが張れました。R1、R2 の BGP テーブルを確認します。
R1
R1# show ip bgp 2.2.2.2
BGP routing table entry for 2.2.2.2/32, version 13
Paths: (1 available, best #1, table default)
Flag: 0x820
Not advertised to any peer
Refresh Epoch 1
2
192.168.12.2 from 192.168.12.2 (2.2.2.2)
Origin IGP, metric 0, localpref 100, valid, external, best
R2
R2# show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 15
Paths: (1 available, best #1, table default)
Not advertised to any peer
Refresh Epoch 1
100
192.168.12.1 from 192.168.12.1 (1.1.1.1)
Origin IGP, metric 0, localpref 100, valid, external, best
R2 の BGP テーブルで、1.1.1.1/32 の AS_PATH が AS 1 から AS 100 に変わりました。このように dual-as を使うと、R1 の設定を先に済ませておき、相手のルータは都合のよいときに新しい AS 番号へ切り替える、という段階的な移行ができます。
local-asは、本当の eBGP ネイバーにだけ設定できます。コンフェデレーションの別のサブ AS のピアには設定できません。- BGP は、通った AS を AS_PATH に積み上げてループを防いでいます。
no-prependやreplace-asで AS_PATH を短くすると、その情報が減るので、移行が終わったら外すことも考えてください。 - オプションを変えるとネイバーが張り直されるので、運用中のネットワークでは作業時間に注意してください。
まとめ
| オプション | 動き | R1 の 2.2.2.2/32 | R2 の 1.1.1.1/32 |
|---|---|---|---|
| local-as 1 | AS 1 でネイバーを張る | 1 2 | 1 100 |
| + no-prepend | 受け取った経路に AS 1 を付けない | 2 | 1 100 |
| + replace-as | 送る経路の AS 100 を AS 1 に置き換える | 2 | 1 |
| + dual-as | AS 1 と AS 100 のどちらでもネイバーを張れる | 2 | 100(R2 が remote-as 100 のとき) |
local-as を使うと、相手の設定を変えずに AS 番号を移行できます。no-prepend、replace-as、dual-as を組み合わせると、AS_PATH の見え方を調整しながら、段階的に新しい AS 番号へ切り替えられます。
コメント