概要

BGPのAS_PATHアクセスリストによるルートフィルタについて、設定ミスの切り分けと修正を行います。

ネットワーク構成

下記のネットワーク構成で、BGPを利用してAS123のルートをAS4、AS5にアドバタイズします。

図 BGP 設定ミスの切り分けと修正 Part5 ネットワーク構成
図 BGP 設定ミスの切り分けと修正 Part5 ネットワーク構成

AS123内ではコンフェデレーションを利用しています。R1、R2、R3がそれぞれコンフェデレーションASを構成しています。また、R1、R3のOutでAS_PATHアクセスリストによるルートフィルタを行い、AS123内のルートのみをAS4、AS5にアドバタイズしています。

設定概要

各ルータのBGPに関する設定は次の通りです。これらの設定には一部設定ミスがあります。

R1

interface Loopback0
 ip address 192.168.0.1 255.255.255.255
!
interface Loopback1
 ip address 123.1.1.1 255.255.255.0
!
interface Ethernet0/0
 ip address 172.16.14.1 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.12.1 255.255.255.0
!
router ospf 1
 log-adjacency-changes
 network 192.168.0.0 0.0.255.255 area 0
!
router bgp 65001
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 123
 bgp confederation peers 65002
 network 123.1.1.0 mask 255.255.255.0
 neighbor 172.16.14.4 remote-as 4
 neighbor 172.16.14.4 filter-list 1 out
 neighbor 192.168.0.2 remote-as 65002
 neighbor 192.168.0.2 ebgp-multihop 255
 neighbor 192.168.0.2 update-source Loopback0
 neighbor 192.168.0.2 next-hop-self
 no auto-summary
!
ip as-path access-list 1 permit ^$

R2

interface Loopback0
 ip address 192.168.0.2 255.255.255.255
!
interface Loopback1
 ip address 123.2.2.2 255.255.255.0
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
!
interface Ethernet0/1
 ip address 192.168.23.2 255.255.255.0
!
router ospf 1
 log-adjacency-changes
 network 192.168.0.0 0.0.255.255 area 0
!
router bgp 65002
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 123
 bgp confederation peers 65001 65003
 network 123.2.2.0 mask 255.255.255.0
 neighbor 192.168.0.1 remote-as 65001
 neighbor 192.168.0.1 ebgp-multihop 255
 neighbor 192.168.0.1 update-source Loopback0
 neighbor 192.168.0.3 remote-as 65003
 neighbor 192.168.0.3 ebgp-multihop 255
 neighbor 192.168.0.3 update-source Loopback0
 no auto-summary

R3

interface Loopback0
 ip address 192.168.0.3 255.255.255.255
!
interface Loopback1
 ip address 123.3.3.3 255.255.255.0
!
interface Ethernet0/0
 ip address 192.168.23.3 255.255.255.0
!
interface Ethernet0/1
 ip address 172.16.35.3 255.255.255.0
!
router ospf 1
 log-adjacency-changes
 network 192.168.0.0 0.0.255.255 area 0
!
router bgp 65003
 no synchronization
 bgp log-neighbor-changes
 bgp confederation identifier 123
 bgp confederation peers 65002
 network 123.3.3.0 mask 255.255.255.0
 neighbor 172.16.35.5 remote-as 5
 neighbor 172.16.35.5 filter-list 1 out
 neighbor 192.168.0.2 remote-as 65002
 neighbor 192.168.0.2 ebgp-multihop 255
 neighbor 192.168.0.2 update-source Loopback0
 neighbor 192.168.0.2 next-hop-self
 no auto-summary
!
ip as-path access-list 1 permit \)|^$

R4

interface Loopback0
 ip address 4.4.1.4 255.255.255.0 secondary
 ip address 4.4.2.4 255.255.255.0 secondary
 ip address 4.4.3.4 255.255.255.0 secondary
 ip address 4.4.0.4 255.255.255.0
!
interface Ethernet0/0
 ip address 172.16.14.4 255.255.255.0
!
router bgp 4
 no synchronization
 bgp log-neighbor-changes
 network 4.4.0.0 mask 255.255.255.0
 network 4.4.1.0 mask 255.255.255.0
 network 4.4.2.0 mask 255.255.255.0
 network 4.4.3.0 mask 255.255.255.0
 neighbor 172.16.14.1 remote-as 123
 no auto-summary

R5

interface Loopback0
 ip address 5.5.1.5 255.255.255.0 secondary
 ip address 5.5.2.5 255.255.255.0 secondary
 ip address 5.5.3.5 255.255.255.0 secondary
 ip address 5.5.0.5 255.255.255.0
!
interface Ethernet0/0
 ip address 172.16.35.5 255.255.255.0
!
router bgp 5
 no synchronization
 bgp log-neighbor-changes
 network 5.5.0.0 mask 255.255.255.0
 network 5.5.1.0 mask 255.255.255.0
 network 5.5.2.0 mask 255.255.255.0
 network 5.5.3.0 mask 255.255.255.0
 neighbor 172.16.35.3 remote-as 123
 no auto-summary

トラブルの症状

AS4、AS5にAS123内のルート(123.1.1.0/24、123.2.2.0/24、123.3.3.0/24)のみをアドバタイズするはずがそのようになっていません。R4でBGPテーブルを確認すると、AS123内の123.1.1.0/24しかありません。

R4 show ip bgp

R4#show ip bgp
BGP table version is 18, local router ID is 4.4.0.4
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
*> 4.4.0.0/24       0.0.0.0                  0         32768 i
*> 4.4.1.0/24       0.0.0.0                  0         32768 i
*> 4.4.2.0/24       0.0.0.0                  0         32768 i
*> 4.4.3.0/24       0.0.0.0                  0         32768 i
*> 123.1.1.0/24     172.16.14.1              0             0 123 i

また、R5ではAS123内のルートだけでなくAS4内のルートもBGPテーブルに登録されています。

R5 show ip bgp

R5#show ip bgp
BGP table version is 20, local router ID is 5.5.0.5
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
*> 4.4.0.0/24       172.16.35.3                            0 123 4 i
*> 4.4.1.0/24       172.16.35.3                            0 123 4 i
*> 4.4.2.0/24       172.16.35.3                            0 123 4 i
*> 4.4.3.0/24       172.16.35.3                            0 123 4 i
*> 5.5.0.0/24       0.0.0.0                  0         32768 i
*> 5.5.1.0/24       0.0.0.0                  0         32768 i
*> 5.5.2.0/24       0.0.0.0                  0         32768 i
*> 5.5.3.0/24       0.0.0.0                  0         32768 i
*> 123.1.1.0/24     172.16.35.3                            0 123 i
*> 123.2.2.0/24     172.16.35.3                            0 123 i
*> 123.3.3.0/24     172.16.35.3              0             0 123 i

この原因はR1、R3でのフィルタにあると考えられます。そこで、R1/R3で次のshowコマンドで原因の切り分けを行いました。

R1/R3

  • show ip protocols
  • show ip as-path-access-list

R1 showコマンドの結果

R1#show ip protocols
Routing Protocol is "ospf 1"
  Outgoing update filter list for all interfaces is not set
  Incoming update filter list for all interfaces is not set
  Router ID 192.168.0.1
  Number of areas in this router is 1. 1 normal 0 stub 0 nssa
  Maximum path: 4
  Routing for Networks:
    192.168.0.0 0.0.255.255 area 0
 Reference bandwidth unit is 100 mbps
  Routing Information Sources:
    Gateway         Distance      Last Update
    192.168.0.2          110      01:06:38
    192.168.0.3          110      01:06:38
  Distance: (default is 110)
 
Routing Protocol is "bgp 65001"
  Outgoing update filter list for all interfaces is not set
  Incoming update filter list for all interfaces is not set
  BGP confederation consists of ASs: 65002
 
  BGP confederation advertised as AS 123
  IGP synchronization is disabled
  Automatic route summarization is disabled
  Neighbor(s):
    Address          FiltIn FiltOut DistIn DistOut Weight RouteMap
    172.16.14.4                   1
    192.168.0.2
  Maximum path: 1
  Routing Information Sources:
    Gateway         Distance      Last Update
    192.168.0.2          200      00:58:15
    172.16.14.4           20      01:06:08
  Distance: external 20 internal 200 local 200
 
R1#show ip as-path-access-list
AS path access list 1
    permit ^$

R3 showコマンドの結果

R3#show ip protocols
Routing Protocol is "ospf 1"
  Outgoing update filter list for all interfaces is not set
  Incoming update filter list for all interfaces is not set
  Router ID 192.168.0.3
  Number of areas in this router is 1. 1 normal 0 stub 0 nssa
  Maximum path: 4
  Routing for Networks:
    192.168.0.0 0.0.255.255 area 0
 Reference bandwidth unit is 100 mbps
  Routing Information Sources:
    Gateway         Distance      Last Update
    192.168.0.1          110      01:07:34
    192.168.0.2          110      01:07:34
  Distance: (default is 110)
 
Routing Protocol is "bgp 65003"
  Outgoing update filter list for all interfaces is not set
  Incoming update filter list for all interfaces is not set
  BGP confederation consists of ASs: 65002
 
  BGP confederation advertised as AS 123
  IGP synchronization is disabled
  Automatic route summarization is disabled
  Neighbor(s):
    Address          FiltIn FiltOut DistIn DistOut Weight RouteMap
    172.16.35.5                   1
    192.168.0.2
  Maximum path: 1
  Routing Information Sources:
    Gateway         Distance      Last Update
    192.168.0.2          200      00:59:06
    172.16.35.5           20      01:07:27
  Distance: external 20 internal 200 local 200
 
R3#show ip as-path-access-list
AS path access list 1
    permit \)|^$

問題

  • なぜAS4、AS5にアドバタイズされているルートが想定されているものと異なっているのでしょうか?
  • 意図したようにAS4、AS5にルートをアドバタイズするにはどのように設定を修正すればよいでしょうか?ただし、フィルタ方法を変更してはいけません。

解答

なぜAS4、AS5にアドバタイズされているルートが想定されているものと異なっているのでしょうか?

R1、R3で設定しているAS_PATHアクセスリストの正規表現が間違っているため。コンフェデレーションAS番号の( )を考慮して正規表現を設定しなければいけない。

意図したようにAS4、AS5にルートをアドバタイズするにはどのように設定を修正すればよいでしょうか?ただし、フィルタ方法を変更してはいけません。

R1/R3

no ip as-path access-list 1 
ip as-path access-list 1 permit ^$|\)$

ワンポイント

  • 自ASで生成したBGPルートのAS_PATHにはAS番号が何も含まれない。
  • 自ASで生成したBGPルートのAS_PATHを表す正規表現は「^$」
  • コンフェデレーションを構成している場合、コンフェデレーションAS番号は( )内にリストされる

解説

BGPルートには必ずAS_PATHアトリビュートが付加されていて、BGPルートが経由するAS番号がリストされています。AS_PATHアトリビュートは文字列です。BGPルートを識別するために、AS_PATHアトリビュートを参照することができます。そのために、AS_PATHアクセスリストを利用します。AS_PATHアクセスリストでは、AS_PATHアトリビュートに含まれる文字列のAS番号のリストを正規表現で表し、permit/denyします。今回の問題はAS_PATHアクセスリストの正規表現の設定ミスに関してです。

自AS内で生成したBGPルートのAS_PATHアトリビュートには何も含まれません。これはEBGPネイバーにBGPルートをアドバタイズするときにAS番号をプリペンドするという仕組みだからです。そのため、通常、自AS内で生成したBGPルートのAS_PATHアトリビュートを表す正規表現は「^$」です。この正規表現は、AS_PATHアトリビュートの先頭(^)と最後($)の間に何も含まれていないということを表しています。ただし、コンフェデレーションを構成している場合は注意が必要です。

R1、R3ともにコンフェデレーション構成で自AS(AS123)で生成したBGPルート123.1.1.0/24、123.1.2.0/24、123.1.3.0/24を識別するためのAS_PATHアクセスリストが間違っています。

【R1 AS_PATHアクセスリストの設定ミス】

R1のAS_PATHアクセスリストを確認すると、次のようになっています。

R1 show ip as-path-access-list

R1#show ip as-path-access-list
AS path access list 1
    permit ^$

自AS内で生成したBGPルートを識別するためにAS_PATHに何も入っていない空っぽのルートとしているわけです。R1自身が生成する123.1.1.0/24はAS_PATHに何も入っていません。ところが、R2が生成する123.2.2.0/24、R3が生成する123.3.3.0/24は違います。R2、R3が生成するBGPルートのAS_PATHアトリビュートには、( )内にコンフェデレーションAS番号が含まれることになります。そのため、R1自身が生成する123.1.1.0/24のみがpermitされ、R4へアドバタイズされます。

R2が生成した123.2.2.0/24のBGPルート、R3が生成した123.3.3.0/24のBGPルートのAS_PATHアトリビュートは、R1でみると次のようになります。

  • 123.2.2.0/24 AS_PATH (65002)
  • 123.3.3.0/24 AS_PATH (65002 65003)

これをみると、AS_PATHアトリビュートの最後が「)」になっていることがわかります。つまり、AS123内で生成されたBGPルート123.1.1.0/24、123.2.2.0/24、123.3.3.0/24のAS_PATHアトリビュートは以下のいずれかです。

  • からっぽ
  • 最後が「)」

これを正規表現で表すと、「^$|\)$」になります。そのため、R1では、次のようにAS_PATHアクセスリストを修正する必要があります。

  R1 AS_PATHアクセスリストの修正

no ip as-path access-list 1 
ip as-path access-list 1 permit ^$|\)$

R1でAS_PATHアクセスリストを修正した後、BGPアップデートを再送信します。そして、R4でR1から受信したBGPルートを確認すると次のようになります。

R4 R1から受信したBGPルート

R4#show ip bgp neighbors 172.16.14.1 routes
BGP table version is 8, local router ID is 4.4.0.4
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
*> 123.1.1.0/24     172.16.14.1              0             0 123 i
*> 123.2.2.0/24     172.16.14.1                            0 123 i
*> 123.3.3.0/24     172.16.14.1                            0 123 i
 
Total number of prefixes 3

R4はR1からAS123内の123.1.1.0/24、123.2.2.0/24、123.3.3.0/24を受信していることがわかります。

【R3 AS_PATHアクセスリストの設定ミス】

R3のAS_PATHアクセスリストを確認すると、次のようになっています。

R3 show ip as-path-access-list

R3#show ip as-path-access-list
AS path access list 1
    permit \)|^$

このAS_PATHアクセスリストは

  • AS_PATHアトリビュートのどこかに「)」が含まれている
  • AS_PATHアトリビュートがからっぽ

のいずれかを表しています。ここで、R3でR2から受信するBGPルートを確認します。

R3 R2から受信するBGPルート

R3#show ip bgp neighbors 192.168.0.2 routes
BGP table version is 12, local router ID is 192.168.0.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
*> 4.4.0.0/24       192.168.0.1              0    100      0 (65002 65001) 4 i
*> 4.4.1.0/24       192.168.0.1              0    100      0 (65002 65001) 4 i
*> 4.4.2.0/24       192.168.0.1              0    100      0 (65002 65001) 4 i
*> 4.4.3.0/24       192.168.0.1              0    100      0 (65002 65001) 4 i
*> 123.1.1.0/24     192.168.0.1              0    100      0 (65002 65001) i
*> 123.2.2.0/24     192.168.0.2              0    100      0 (65002) i
 
Total number of prefixes 6

AS_PATHアクセスリストのどこかに「)」が含まれているBGPルートは、AS123内のものだけではありません。AS4のルートのAS_PATHアトリビュートにも「)」が含まれています。そのため、R3はR5に対してAS123内の123.1.1.0/24、123.2.2.0/24、123.3.3.0/24だけではなくAS4内の4.4.0.0/24~4.4.3.0/24のルートもアドバタイズします。 R3でもR1と同じようにAS_PATHアクセスリストを修正しなければいけません。

R3 AS_PATHアクセスリストの修正

no ip as-path access-list 1 
ip as-path access-list 1 permit ^$|\)$

R3でAS_PATHアクセスリストを修正した後、BGPアップデートを再送信します。そして、R5でR3から受信したBGPルートを確認すると次のようになります。

R5 R3から受信したBGPルート

R5#show ip bgp neighbors 172.16.35.3 routes
BGP table version is 16, local router ID is 5.5.0.5
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
*> 123.1.1.0/24     172.16.35.3                            0 123 i
*> 123.2.2.0/24     172.16.35.3                            0 123 i
*> 123.3.3.0/24     172.16.35.3              0             0 123 i
 
Total number of prefixes 3

R5はR3からAS123内の123.1.1.0/24、123.2.2.0/24、123.3.3.0/24を受信していることがわかります。

BGPの仕組み