今回は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#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宛のトラフィックをドロップさせるフィルタリングの設定を広報します。
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#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#show flowspec ipv4 internal
疎通確認(Validation有効)
Validationの失敗により、R4はR1から学習したフィルタリングの設定を使用できないため、R3からR2の10.4.4.2へのPingが成功していることが確認できます。
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コマンドを設定します。
router bgp 400
address-family ipv4 flowspec
neighbor 10.1.1.1 validation off
R4の状態確認(Validation無効)
Validationの失敗を示すエラーが消えたことが確認できます。
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#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#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宛のトラフィックをドロップさせるフィルタリングの設定を広報します。
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#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#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#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)
コメント