Flowspec Validation

今回はFlowspecのValidationと呼ばれる動作について説明します。

 

概要

FlowspecのValidationについて

FlowspecはBGPを使用して遠隔からルータでフィルタリングを実施できる便利な機能ですが、1つ問題があります。

例えば、下記のように、ISP1に接続している組織1が何かしらのサービスを提供しているとします。
この状況で、ISP2からISP1に対して、組織1宛のトラフィックをドロップするようなフィルタリングの設定をBGPで広報した場合、組織1がサービスを提供できなくなってしまいます。

 

上記のように、ある組織が、別の組織宛のトラフィックを勝手にドロップできないように、FlowspecではValidationと呼ばれる機能が存在します。

ValidationではEBGPネイバーから学習したフィルタリングの設定を使用するか否かを判断します。IBGPネイバーから学習したフィルタリングの設定に対してはValidationは動作しません。

EBGPネイバーから特定の宛先に対するトラフィックをドロップするフィルタリングの設定を学習した場合、ルータは以下を比較し、一致している場合のみ、そのフィルタリングの設定を使用します。

  • FlowspecのルートのNext Hop
  • FlowspecのルールのDestにマッチするルーティングテーブル上のベストパスのネクストホップ

 

下記のように、組織2が組織1宛のトラフィックをドロップするフィルタリングの設定を広報した場合、上記で説明した2つの値が異なるため、PE1ルータは学習したフィルタリングの設定は不正と判断し、使用しません。

 

検証の基本設定

基本設定の内容

R1をAS 100、R2をAS 200、R4をAS 400に所属させます。
R1-R4間でEBGPネイバーを確立し、IPv4 Flowspecを有効にします。
R2-R4間でEBGPネイバーを確立し、IPv4 UnicastとIPv4 Flowspecを有効にします。
R2において、BGPで10.4.4.0/24を広報します。
R4において、BGPで10.3.3.0/24を広報します。

R1、R2から10.4.4.2/32宛のトラフィックをドロップするフィルタリングの設定を広報した際の動作を確認します。

(フィルタリングの設定を広報するR1とR2にはIOS-XR、それ以外のR3とR4にはIOS-XEを使用しています。)

 

 

初期設定


interface GigabitEthernet0/0/0/0
 ipv4 address 10.1.1.1 255.255.255.0
!
router bgp 100
 bgp router-id 1.1.1.1
 bgp unsafe-ebgp-policy
 address-family ipv4 flowspec
 !
 neighbor 10.1.1.4
  remote-as 400
  address-family ipv4 flowspec
            


interface Loopback0
 ipv4 address 10.4.4.2 255.255.255.0
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.2.2.2 255.255.255.0
!
router bgp 200
 bgp router-id 2.2.2.2
 bgp unsafe-ebgp-policy
 address-family ipv4 unicast
  network 10.4.4.0/24
 !
 address-family ipv4 flowspec
 !
 neighbor 10.2.2.4
  remote-as 400
  address-family ipv4 unicast
  !
  address-family ipv4 flowspec
            


interface GigabitEthernet2
 ip address 10.3.3.3 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 10.3.3.4
            


flowspec
 address-family ipv4
  local-install interface-all
!
interface GigabitEthernet2
 ip address 10.1.1.4 255.255.255.0
!
interface GigabitEthernet3
 ip address 10.2.2.4 255.255.255.0
!
interface GigabitEthernet4
 ip address 10.3.3.4 255.255.255.0
!
router bgp 400
 bgp router-id 4.4.4.4
 no bgp default ipv4-unicast
 neighbor 10.1.1.1 remote-as 100
 neighbor 10.2.2.2 remote-as 200
 !
 address-family ipv4
  network 10.3.3.0 mask 255.255.255.0
  neighbor 10.2.2.2 activate
 exit-address-family
 !
 address-family ipv4 flowspec
  neighbor 10.1.1.1 activate
  neighbor 10.2.2.2 activate
 exit-address-family
            

 

初期の状態確認

疎通確認

 

R1、R2共にフィルタリングの設定を広報していないため、R3からR2の10.4.4.2へのPingが成功します。

R3(IOS-XE)

R3#ping 10.4.4.2 source 10.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.4.4.2, timeout is 2 seconds:
Packet sent with a source address of 10.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 42/45/52 ms
            

 

R1でフィルタリングの設定を広報

R1にフィルタリングの設定を追加

 

R1からR4に対して10.4.4.2/32宛のトラフィックをドロップさせるフィルタリングの設定を広報します。

R1(IOS-XR)

class-map type traffic match-all CLASS_MAP
 match destination-address ipv4 10.4.4.2 255.255.255.255
 end-class-map
!
policy-map type pbr POLICY_MAP
 class type traffic CLASS_MAP
  drop
 !
 class type traffic class-default
 !
 end-policy-map
!
flowspec
 address-family ipv4
  service-policy type pbr POLICY_MAP
            

 

R4の状態確認(Validation有効)

 

R4はR1からBGP経由でフィルタリングの設定を学習していることが確認できます。
しかし、以下の値が異なるため、Validationが失敗していることが確認できます。

  • FlowspecのルートのNext Hop
  • FlowspecのルールのDestにマッチするルーティングテーブル上のベストパスのネクストホップ

 

R4(IOS-XE)

R4#show bgp ipv4 flowspec detail
BGP routing table entry for Dest:10.4.4.2/32, version 3
  Paths: (1 available, no best path)
  Not advertised to any peer
  Refresh Epoch 1
  100, (FS invalid: originator)
    0.0.0.0 from 10.1.1.1 (1.1.1.1)
      Origin IGP, localpref 100, valid, external
      Extended Community: FLOWSPEC Traffic-rate:100,0
      rx pathid: 0, tx pathid: 0
      Updated on Jun 23 2020 16:50:10 UTC
            

 

Validationが失敗したため、R4はBGP経由で学習したフィルタリングの設定を使用していないことが確認できます。

R4(IOS-XE)

R4#show flowspec ipv4 internal
            

 

疎通確認(Validation有効)

 

Validationの失敗により、R4はR1から学習したフィルタリングの設定を使用できないため、R3からR2の10.4.4.2へのPingが成功していることが確認できます。

R3(IOS-XE)

R3#ping 10.4.4.2 source 10.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.4.4.2, timeout is 2 seconds:
Packet sent with a source address of 10.3.3.3
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/46/55 ms
            

 

R4でValidationを無効化

R4でValidationを無効にして、R1から学習したフィルタリングの設定を使用できるようにします。
特定のBGPネイバーからフィルタリングの設定を学習した際のValidationを無効にするには、neighbor <address> validation offコマンドを設定します。

R4(IOS-XE)

router bgp 400
 address-family ipv4 flowspec
  neighbor 10.1.1.1 validation off
            

 

R4の状態確認(Validation無効)

Validationの失敗を示すエラーが消えたことが確認できます。

R4(IOS-XE)

R4#show bgp ipv4 flowspec detail
BGP routing table entry for Dest:10.4.4.2/32, version 3
  Paths: (1 available, no best path)
  Not advertised to any peer
  Refresh Epoch 1
  100
    0.0.0.0 from 10.1.1.1 (1.1.1.1)
      Origin IGP, localpref 100, valid, external, best
      Extended Community: FLOWSPEC Traffic-rate:100,0
      rx pathid: 0, tx pathid: 0x0
      Updated on Jun 23 2020 16:53:46 UTC
            

 

Validationが無効なため、R4はBGP経由で学習したフィルタリングの設定を使用していることが確認できます。

R4(IOS-XE)

R4#show flowspec ipv4 internal
AFI: IPv4
  Flow           :Dest:10.4.4.2/32
    Actions      :Traffic-rate: 0 bps  (bgp.1)
      Client Version: 0
      Unsupported:    FALSE
      RT:
        VRF Name Cfg:   0x00
        RT Cfg:         0x00
        RT Registered:  0x00
        RT Resolved:    0x00
    Class handles:
      Handle [0]:        700000000093c6c1
    Class Handle Version:     1
    Sequence:                 1024
    Synced:                   FALSE
    Match Unsupported:        None
    Ref Count:                1
    Last Error:               0x0:Unknown error 0
    Last Batch:               5
    Statistics                        (packets/bytes)
      Matched             :                   5/570
      Dropped             :                   5/570
            

 

疎通確認(Validation無効)

 

Validationが無効なため、R4はR1から学習したフィルタリングの設定を基に、R3からR2の10.4.4.2宛のICMP Echoをドロップしていることが確認できます。

R3(IOS-XE)

R3#ping 10.4.4.2 source 10.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.4.4.2, timeout is 2 seconds:
Packet sent with a source address of 10.3.3.3
.....
Success rate is 0 percent (0/5)
            

 

R2でフィルタリングの設定を広報

R2にフィルタリングの設定を追加

 

R2からR4に対して10.4.4.2/32宛のトラフィックをドロップさせるフィルタリングの設定を広報します。

R2(IOS-XR)

class-map type traffic match-all CLASS_MAP
 match destination-address ipv4 10.4.4.2 255.255.255.255
 end-class-map
!
policy-map type pbr POLICY_MAP
 class type traffic CLASS_MAP
  drop
 !
 class type traffic class-default
 !
 end-policy-map
!
flowspec
 address-family ipv4
  service-policy type pbr POLICY_MAP
            

 

R4の状態確認

 

R4はR2からBGP経由でフィルタリングの設定を学習していることが確認できます。
今回は、以下の値が10.2.2.2で一致しているため、Validationの失敗を示すエラーが表示されていないことが確認できます。

  • FlowspecのルートのNext Hop
  • FlowspecのルールのDestにマッチするルーティングテーブル上のベストパスのネクストホップ

 

R4(IOS-XE)

R4#show bgp ipv4 flowspec detail
BGP routing table entry for Dest:10.4.4.2/32, version 2
  Paths: (1 available, best #1, table IPv4-Flowspec-BGP-Table)
  Advertised to update-groups:
     7
  Refresh Epoch 1
  200
    0.0.0.0 from 10.2.2.2 (2.2.2.2)
      Origin IGP, localpref 100, valid, external, best
      Extended Community: FLOWSPEC Traffic-rate:200,0
      rx pathid: 0, tx pathid: 0x0
      Updated on Jun 23 2020 16:45:38 UTC
            

 

Validationが成功したため、R4はBGP経由で学習したフィルタリングの設定を使用していることが確認できます。

R4(IOS-XE)

R4#show flowspec ipv4 internal
AFI: IPv4
  Flow           :Dest:10.4.4.2/32
    Actions      :Traffic-rate: 0 bps  (bgp.1)
      Client Version: 0
      Unsupported:    FALSE
      RT:
        VRF Name Cfg:   0x00
        RT Cfg:         0x00
        RT Registered:  0x00
        RT Resolved:    0x00
    Class handles:
      Handle [0]:        7000000000703231
    Class Handle Version:     1
    Sequence:                 1024
    Synced:                   FALSE
    Match Unsupported:        None
    Ref Count:                1
    Last Error:               0x0:Unknown error 0
    Last Batch:               3
    Statistics                        (packets/bytes)
      Matched             :                   0/0
      Dropped             :                   0/0
            

 

疎通確認

 

R4はR2から学習したフィルタリングの設定を基に、R3からR2の10.4.4.2宛のICMP Echoをドロップしていることが確認できます。

R3(IOS-XE)

R3#ping 10.4.4.2 source 10.3.3.3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.4.4.2, timeout is 2 seconds:
Packet sent with a source address of 10.3.3.3
.....
Success rate is 0 percent (0/5)
            

コメント

タイトルとURLをコピーしました