シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

BGPの経路制御で使用するroute-map+ACLの動作確認をしてみた

シナプスの技術部ネットワーク課の末吉です。
ネットワーク課の業務として各ASBGPを使用して経路交換をしていますが、経路交換の制御はroute-mapで実施しています。 route-map + ACL での動作に関して疑問に思う事があり確認した事を書いていきたいと思います。

route-mapとは

route-mapに関しては下記のページが参考になるかと思います。
ルートマップ( Route-map )とは
Route-map - matchコマンド、setコマンド

検証環境

route-map + ACL それぞれの組み合わせ時の動作を確認する為に R1からR2にBGPで経路を広報する簡単なネットワークを作ります。

ネットワーク構成

f:id:ksueyoshi:20200412135217p:plain

IOS 15.2(4)M11
GNS3上で稼働

設定

各機器の設定内容は下記の通りです。

[R1]
hostname R1
!
interface GigabitEthernet0/0
 ip address 192.168.0.1 255.255.255.252
 no shutdown
!
router bgp 64496
 network 192.168.10.0 mask 255.255.255.0
 network 192.168.11.0 mask 255.255.255.0
 network 192.168.12.0 mask 255.255.255.0
 network 192.168.13.0 mask 255.255.255.0
 network 192.168.14.0 mask 255.255.255.0
 neighbor 192.168.0.2 remote-as 64497
 neighbor 192.168.0.2 soft-reconfiguration inbound
!
ip route 192.168.10.0 255.255.255.0 Null0
ip route 192.168.11.0 255.255.255.0 Null0
ip route 192.168.12.0 255.255.255.0 Null0
ip route 192.168.13.0 255.255.255.0 Null0
ip route 192.168.14.0 255.255.255.0 Null0
!
[R2]
hostname R2
!
interface GigabitEthernet0/0
 ip address 192.168.0.2 255.255.255.252
 no shutdown
!
router bgp 64497
 neighbor 192.168.0.1 remote-as 64496
 neighbor 192.168.0.1 soft-reconfiguration inbound
!

上記の構成/設定でR2が受信している経路は下記の5経路となります。

  • 192.168.10.0/24
  • 192.168.11.0/24
  • 192.168.12.0/24
  • 192.168.13.0/24
  • 192.168.14.0/24
R2#show ip bgp neighbors 192.168.0.1 received-routes
BGP table version is 6, local router ID is 192.168.0.2
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
 *>  192.168.10.0     192.168.0.1              0             0 64496 i
 *>  192.168.11.0     192.168.0.1              0             0 64496 i
 *>  192.168.12.0     192.168.0.1              0             0 64496 i
 *>  192.168.13.0     192.168.0.1              0             0 64496 i
 *>  192.168.14.0     192.168.0.1              0             0 64496 i

Total number of prefixes 5

検証設定

route-map permit/deny + ACL permit/deny の検証をする為、下記の組み合わせで実施します。
setコマンドの動作確認はしません。

route-map permit + ACL permit  
route-map permit + ACL deny  
route-map deny + ACL permit  
route-map deny + ACL deny  

使用するroute-mapとACLを下記の通りR1に設定します。

ACL

route-map にマッチさせるために使用します。

[R1]
access-list 10 permit 192.168.10.0 0.0.0.255
access-list 11 deny    192.168.11.0 0.0.0.255
access-list 12 permit 192.168.12.0 0.0.0.255
access-list 13 deny    192.168.13.0 0.0.0.255
access-list 14 permit  any

route-map

設定したACLを使用したroute-mapを作成します。

[R1]
route-map R1_to_R2 permit 10
 match ip address 10
!
route-map R1_to_R2 permit 20
 match ip address 11
!
route-map R1_to_R2 deny 30
 match ip address 12
!
route-map R1_to_R2 deny 40
 match ip address 13
!
route-map R1_to_R2 permit 50
 match ip address 14

route-map適用

設定したroute-mapをR1のout側に適用します。

[R1]
router bgp 64496
 neighbor 192.168.0.2 route-map  R1_to_R2 out

route-map適用時にroute-map名を誤って設定した場合、何も設定されていないroute-map(=暗黙のdenyのみ)として扱われますので設定する際はご注意ください。

予想

設定した内容で、どの経路がR2で受信されるのか予想をしてみました。 f:id:ksueyoshi:20200412133024p:plain

192.168.10.0/24, 192.168.14.0/24の2経路が受信されると予想しました。

検証結果

結果を見てみます。

R2#show ip bgp neighbors 192.168.0.1 received-routes
BGP table version is 7, local router ID is 192.168.0.2
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
 *>  192.168.10.0     192.168.0.1              0             0 64496 i
 *>  192.168.11.0     192.168.0.1              0             0 64496 i
 *>  192.168.13.0     192.168.0.1              0             0 64496 i
 *>  192.168.14.0     192.168.0.1              0             0 64496 i

192.168.10.0/24, 192.168.14.0/24の2経路のみ受信すると予想していましたが、192.168.11.0/24, 192.168.13.0/24 の経路も受信していました。
route-mapはシーケンス番号順に処理されマッチした際、以降の処理はスキップされるという事で処理を追っていきます。各経路に関して改めて表にしてみました。 f:id:ksueyoshi:20200412133051p:plain

設定を改めて見てみます。

access-list 10 permit 192.168.10.0 0.0.0.255
access-list 11 deny    192.168.11.0 0.0.0.255
access-list 12 permit 192.168.12.0 0.0.0.255
access-list 13 deny    192.168.13.0 0.0.0.255
access-list 14 permit  any
!
route-map R1_to_R2 permit 10
 match ip address 10
!
route-map R1_to_R2 permit 20
 match ip address 11
!
route-map R1_to_R2 deny 30
 match ip address 12
!
route-map R1_to_R2 deny 40
 match ip address 13
!
route-map R1_to_R2 permit 50
 match ip address 14

192.168.10.0/24, 192.168.14.0/24用のみACLがdenyの為、この辺りが怪しい。
Ciscoのドキュメントを確認してみると、検証環境はASAシリーズではありませんが参考になる記事がありました。

permit 句と deny 句
ルート マップでは permit 句と deny 句を使用できます。
deny 句は、ルートの照合の再配布を拒否します。 ルートマップでは、一致基準として
ACL を使用できます。 ACL には permit 句と deny 句もあるため、パケットが ACL と
一致した場合に次のルールが適用されます。

ACL permit + route map permit:ルートは再配布されます。  
ACL permit + route map deny:ルートは再配布されません。  
ACL deny + route map permit or deny:ルート マップの句は一致せず、次のルート マップ句が評価されます。  

引用元:CLI ブック 1:Cisco ASA シリーズ 9.8 CLI コンフィギュレーション ガイド(一般的な操作) - ルート マップ [Cisco ASA 5500-X シリーズ ファイアウォール] - Cisco

上記を踏まえて改めて、表を整理をしてみます。 f:id:ksueyoshi:20200412133429p:plain

ACL deny に一致した場合、該当するシーケンス番号のroute-map permit/deny 処理をスキップする為 R2に広報されてきた経路の結果と同じになるのがわかります。

まとめ

  • route-map + ACL それぞれの組み合わせ時の動作は下記となる。 f:id:ksueyoshi:20200414181611p:plain
  • route-map にて ACL deny を使用した場合の動作が確認できてよかった。
    • よくわからずに使用していたことがよくわかった。