CiscoルータでのBGP AS番号変更:Local-ASと各オプションの解説

音声で聞く

読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとに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 の各オプションの動きを確認します。

この記事でわかること
  1. local-as で、古い AS 番号のままネイバーを張る
  2. no-prepend で、受信する経路に local-as の番号を付けない
  3. replace-as で、送る経路の実際の AS 番号を local-as の番号に置き換える
  4. dual-as で、新旧どちらの AS 番号でもネイバーを張れるようにする
  5. 相手の設定を新しい AS 番号に切り替える

検証構成

次の構成で、R1 の AS 番号を、もともとの AS 1 から AS 100 に変えたいとします。ただし、R2 の設定はすぐには変えられません。そこで R1 で local-as を使い、R1 の実際の AS 番号は 100 にしたまま、R2 とのネイバーには AS 1 を使い続けます。

AS 100(実際の AS) AS 2 local-as 1 R1 Lo 1.1.1.1 R2 Lo 2.2.2.2 .1 .2 192.168.12.0/24 eBGP R2 から見ると R1 は AS 1
図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 番号へ切り替える、という段階的な移行ができます。

R1 の設定 R1 の 2.2.2.2/32 R2 の 1.1.1.1/32 local-as 1 12 1100 + no-prepend 2 1100 + replace-as 2 1 + dual-as(R2 は remote-as 100) 2 100 塗りつぶしの枠:local-as で指定した AS 1
図2 各オプションでの AS_PATH の変化
注意
  • local-as は、本当の eBGP ネイバーにだけ設定できます。コンフェデレーションの別のサブ AS のピアには設定できません。
  • BGP は、通った AS を AS_PATH に積み上げてループを防いでいます。no-prepend や replace-as で AS_PATH を短くすると、その情報が減るので、移行が終わったら外すことも考えてください。
  • オプションを変えるとネイバーが張り直されるので、運用中のネットワークでは作業時間に注意してください。

まとめ

オプション動きR1 の 2.2.2.2/32R2 の 1.1.1.1/32
local-as 1AS 1 でネイバーを張る1 21 100
+ no-prepend受け取った経路に AS 1 を付けない21 100
+ replace-as送る経路の AS 100 を AS 1 に置き換える21
+ dual-asAS 1 と AS 100 のどちらでもネイバーを張れる2100(R2 が remote-as 100 のとき)

local-as を使うと、相手の設定を変えずに AS 番号を移行できます。no-prepend、replace-as、dual-as を組み合わせると、AS_PATH の見え方を調整しながら、段階的に新しい AS 番号へ切り替えられます。

コメント