BGP Flowspecについてざっと解説
BGP Flowspecでは条件とアクションをBGPのUPDATEメッセージに載せて送信できる。
条件
条件はRFC4760で定義されているMP_REACH_NLRIまたはMP_UNREACH_NLRIに記述する。
使用するAFIとSAFIそれぞれ下記の通りである。
AFI:1
SAFI:133
http://www.iana.org/assignments/safi-namespace/safi-namespace.xhtml
NextHopは使用しないのであれば、長さ0とする。
+---------------------------------------------------------+
| Address Family Identifier (2 octets) |
+---------------------------------------------------------+
| Subsequent Address Family Identifier (1 octet) |
+---------------------------------------------------------+
| Length of Next Hop Network Address (1 octet) |
+---------------------------------------------------------+
| Network Address of Next Hop (variable) |
+---------------------------------------------------------+
| Reserved (1 octet) |
+---------------------------------------------------------+
| Network Layer Reachability Information (variable) |
+---------------------------------------------------------+
+---------------------------------------------------------+
| Address Family Identifier (2 octets) |
+---------------------------------------------------------+
| Subsequent Address Family Identifier (1 octet) |
+---------------------------------------------------------+
| Withdrawn Routes (variable) |
+---------------------------------------------------------+
条件として指定できる内容は下記がある。
- Type 1 - Destination Prefix
- Type 2 - Source Prefix
- Type 3 - IP Protocol
- Type 4 - Port
- Type 5 - Destination port
- Type 6 - Source port
- Type 7 - ICMP type
- Type 8 - ICMP code
- Type 9 - TCP flags
- Type 10 - Packet length
- Type 11 - DSCP (Diffserv Code Point)
- Type 12 - Fragment
※Type3はIPパケット中にあるプロトコルタイプの値の事
Type3-Type12については不等号などの比較演算子も使える。
各Typeを複数使った条件を作成する事も可能でその場合は原則AND評価になる。
条件を複数作成した場合、あるトラフィックが複数の条件にマッチする事もある。
そのような場合には若い番号のTypeを持つ条件が優先的にマッチされる。
Typeに優先度が同じ場合には次のルールで優先付が行われる。
Type1,Type2の場合には最小プレフィックスマッチ
それ以外のTypeの場合には最長文字列マッチ
アクション
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type high | Type low(*) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Value |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
Type 0x8006 - traffic-rate
4バイトのフロートでBps単位でトラフィックレートを指定する。
0が指定された場合にはトラフィックの破棄を意味する。 -
Type 0x8007 - traffic-action
TerminalビットとSampleビットがある。
Terminalビットがセットされている場合は後に続くアクションを適用し、セットされていない場合は、そこでアクションは終了する。
Sampleビットがセットされている場合はサンプリングとロギングを行う。 -
Type 0x8008 - redirect
VRFへのトラフィックのリダイレクトを行う。リストにしてVRFを複数指定可能。
ただし、複数のVRFにリダイレクトさせることはできない。
RFC4360にあるRTと同様に処理される。 -
Type 0x8000 - traffic-marking
IPパケットのDSCPのマーキング(あるいはリマーキング)
参考文献
RFC5575 Dissemination of Flow Specification Rules https://tools.ietf.org/html/rfc5575
RFC4760 Multiprotocol Extensions for BGP-4 https://tools.ietf.org/html/rfc4760
RFC4360 BGP Extended Communities Attribute https://tools.ietf.org/html/rfc4360
https://milestone-of-se.nesuke.com/nw-advanced/mpls-vpn/detail-of-mp-bgp/
http://www.hogetan.net/translate/bgpflowspec-1/bgpflowspec.html