概要

neighbor allowas-inコマンドによって、特定のネイバーから受信するBGPルートについて、AS_PATHによるループ防止を無効化します。neighbor allowas-inコマンドについて解説します。

neighbor allowas-inコマンドとは

BGPルートのループ防止のために、AS_PATHアトリビュートを利用しています。BGPルートに付加されているAS_PATHアトリビュートに自AS番号が含まれていると、ルートはループしているとみなして、受信しません。これによりルートのループ防止を行っています。

neighbor allowas-inコマンドは、特定のネイバーから受信するBGPルートについて、AS_PATHによるループ防止を無効化するための設定です。

neighbor allowas-inコマンドを利用する主なケースは、MPLS-VPNで拠点間を接続しているときです。MPLS-VPNで拠点間を接続して、PE-CE間でBGPを利用するとき、CEルータのAS番号は同じにすることがあります。すると、AS_PATHによるループ防止によってBGPルートは無効になってしまいます。

図 MPLS-VPNでの拠点間の接続 その1
図 MPLS-VPNでの拠点間の接続 その1

そこで、CEルータでneighbor allowas-inコマンドを利用します。BGPルートのAS_PATHアトリビュートに自AS番号が含まれていても、ループしているとみなさずにルートを受信できるようにします。

 図 MPLS-VPNでの拠点間の接続 その2
図 MPLS-VPNでの拠点間の接続 その2

neighbor allowas-inの設定と確認コマンド

コマンドフォーマット

BGPのコンフィグレーションモードでneighbor allowas-inコマンドを設定します。以下のコマンドフォーマットです。

neighbor allowas-in コマンドフォーマット

(config)#router bgp <AS>
(config-router)#neighbor <ip-address> allowas-in [<count>]

<AS> : AS番号
<ip-address> : ネイバーのIPアドレス
<count> : 自AS番号を許容する数。

指定したネイバーから受信したBGPルートについて、<count>までの自AS番号が含まれていても許可します。

確認コマンド

show ip bgp neighborコマンドでネイバーの詳細を見ると、neighbor allowas-inコマンドが設定されていることを確認できます。

show ip bgp neighbor

R3#show ip bgp neighbors 10.1.3.1
BGP neighbor is 10.1.3.1,  remote AS 65001, external link
  BGP version 4, remote router ID 1.1.1.1
  BGP state = Established, up for 00:02:31
  Last read 00:00:31, last write 00:00:31, hold time is 180, keepalive interval is 60 seconds
  Neighbor capabilities:
    Route refresh: advertised and received(old & new)
    Address family IPv4 Unicast: advertised and received
  Message statistics:
    InQ depth is 0
    OutQ depth is 0
                         Sent       Rcvd
    Opens:                  1          1
    Notifications:          0          0
    Updates:                1          6
    Keepalives:             5          5
    Route Refresh:          2          0
    Total:                  9         12
  Default minimum time between advertisement runs is 30 seconds

 For address family: IPv4 Unicast
  BGP table version 3, neighbor version 3/0
  Output queue size: 0
  Index 1, Offset 0, Mask 0x2
  1 update-group member
  My AS number is allowed for 3 number of times
~省略~

neighbor allowas-inコマンドの設定例

ネットワーク構成

以下のネットワーク構成で、neighbor allowas-inコマンドの設定を考えます。

図 neighbor allowas-in 設定例
図 neighbor allowas-in 設定例

初期設定

各ルータの初期設定の抜粋です。R1-R2間およびR1-R3間でBGPネイバーを確立しています。R2は192.168.1.0/24をBGPでアドバタイズしています。R3は192.168.3.0/24をBGPでアドバタイズしています。

R1 初期設定抜粋(Click)

hostname R1
!
interface FastEthernet0/0
 ip address 10.1.2.1 255.255.255.0
!
interface FastEthernet0/1
 ip address 10.1.3.1 255.255.255.0
!
router bgp 65001
 no synchronization
 bgp router-id 1.1.1.1
 bgp log-neighbor-changes
 neighbor 10.1.2.2 remote-as 65100
 neighbor 10.1.3.3 remote-as 65100
 no auto-summary

R2 初期設定抜粋(Click)

hostname R2
!
interface Loopback0
 ip address 192.168.2.2 255.255.255.0
!
interface FastEthernet0/0
 ip address 10.1.2.2 255.255.255.0
!
router bgp 65100
 no synchronization
 bgp router-id 2.2.2.2
 bgp log-neighbor-changes
 network 192.168.2.0
 neighbor 10.1.2.1 remote-as 65001
 no auto-summary

R3 初期設定抜粋(Click)

hostname R3
!
interface Loopback0
 ip address 192.168.3.3 255.255.255.0
!
interface FastEthernet0/0
 ip address 10.1.3.3 255.255.255.0
router bgp 65100
 no synchronization
 bgp router-id 3.3.3.3
 bgp log-neighbor-changes
 network 192.168.3.0
 neighbor 10.1.3.1 remote-as 65001
 no auto-summary

設定と確認

Step1:AS_PATHによるループ防止の確認

AS_PATHアトリビュートに自AS番号が含まれていると、ループとみなされていることを確認します。R3でBGP UPDATEメッセージのデバッグを有効にして、BGPルートを再度受信します。

R3 AS_PATHによるループ防止の確認

R3#debug ip bgp updates
BGP updates debugging is on for address family: IPv4 Unicast
R3#clear ip bgp * in
R3#
*Mar  1 00:25:46.339: BGP(0): 10.1.3.1 rcv UPDATE w/ attr: nexthop 10.1.3.1, origin i, originator 0.0.0.0, path 65001 65100, community , extended community
*Mar  1 00:25:46.343: BGP(0): 10.1.3.1 rcv UPDATE about 192.168.3.0/24 -- DENIED due to: AS-PATH contains our own AS;
*Mar  1 00:25:46.347: BGP(0): 10.1.3.1 rcv UPDATE w/ attr: nexthop 10.1.3.1, origin i, originator 0.0.0.0, path 65001 65100, community , extended community
*Mar  1 00:25:46.351: BGP(0): 10.1.3.1 rcv UPDATE about 192.168.2.0/24 -- DENIED due to: AS-PATH contains our own AS;
R3#undebug all
All possible debugging has been turned off

ループとみなされた192.168.2.0/24のBGPルートは受信せずにBGPテーブルにも入っていません。

R3 show ip bgp

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
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.3.0      0.0.0.0                  0         32768 i
図 AS_PATHによるループ防止
図 AS_PATHによるループ防止

Step2:R3 neighbor allowas-inコマンドの設定

R3で192.168.2.0/24のBGPルートをループしているとみなさないように、neighbor allowas-inコマンドを設定します。

R3 neighbor allowas-in

router bgp 65100
 neighbor 10.1.3.1 allowas-in

Step3:R3 BGPルートの確認

neighbor allowas-inコマンドの設定によって、R3は192.168.2.0/24のBGPルートを受信してベストパスにします。そして、ルーティングテーブルに登録しています。

R3 BGPルートの確認

R3#show ip bgp
BGP table version is 5, 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
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.2.0      10.1.3.1                               0 65001 65100 i
*  192.168.3.0      10.1.3.1                               0 65001 65100 i
*>                  0.0.0.0                  0         32768 i
R3#show ip route
~省略~

Gateway of last resort is not set

     10.0.0.0/24 is subnetted, 1 subnets
C       10.1.3.0 is directly connected, FastEthernet0/0
B    192.168.2.0/24 [20/0] via 10.1.3.1, 00:03:07
C    192.168.3.0/24 is directly connected, Loopback0
図 neighbor allowas-in
図 neighbor allowas-in

Step4:R2 neighbor allowas-inコマンドの設定

R2でもR3と同様に、neighbor allowas-inコマンドの設定が必要です。

R2 neighbor allowas-in

router bgp 65100
 neighbor 10.1.2.1 allowas-in

Step5:通信確認

ここまでの設定によって、同じAS番号の離れたAS間のネットワークで通信できます。R2/R3のBGPテーブルとルーティングテーブルを確認します。

R2/R3 BGPテーブル ルーティングテーブル

R2#show ip bgp
BGP table version is 3, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  192.168.2.0      10.1.2.1                               0 65001 65100 i
*>                  0.0.0.0                  0         32768 i
*> 192.168.3.0      10.1.2.1                               0 65001 65100 i
R2#show ip route bgp
B    192.168.3.0/24 [20/0] via 10.1.2.1, 00:00:09
R3#show ip bgp
BGP table version is 5, 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
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.2.0      10.1.3.1                               0 65001 65100 i
*  192.168.3.0      10.1.3.1                               0 65001 65100 i
*>                  0.0.0.0                  0         32768 i
R3#show ip route bgp
B    192.168.2.0/24 [20/0] via 10.1.3.1, 00:06:37

そして、192.168.2.0/24と192.168.3.0/24間で通信できることを確認します。R2からR3へPingします。

R2からR3へPing

R2#ping 192.168.3.3 source 192.168.2.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.2
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 32/38/44 ms

まとめ

ポイント

  • neighbor allowas-inコマンドは、特定のネイバーから受信するBGPルートについて、AS_PATHによるループ防止を無効化します。
  • BGPのコンフィグレーションモードで次のコマンドを入力します。
    • (config-router)#neighbor <ip-address> allowas-in [<count>]

BGPの仕組み