Cisco ACI では Contract が無くても ARP は許可される

Cisco ACI に関する情報を読んでいると「EPG 同士は Contract されていない限り、通信出来ない」という記載を目にすることがあります。 VRF の Policy Control Enforcement Preference 設定が Unenforced で無い限り、この記載は概ね正しいのですが、厳密には「暗黙的に ARP は許可される」という振る舞いをします。

以下の構成で考えてみます。 Epg1 と Epg2 はどちらも Bd1 に所属しています。 但し、Epg1 と Epg2 は Contract していません。

file

Leaf で contract_parser.py を確認すると以下のように表示されます。 permitimplicit なルールが幾つか存在することが分かりますが、「何を許可しているのか?」ははっきり分かりません。

1
2
3
4
5
6
7
8
leaf# contract_parser.py --vrf Tenant1:Vrf1
Key:
[prio:RuleId] [vrf:{str}] action protocol src-epg [src-l4] dst-epg [dst-l4] [flags][contract:{str}] [hit=count]

[16:4170] [vrf:Tenant1:Vrf1] permit any epg:any tn-Tenant1/bd-Bd1(49153) [contract:implicit] [hit=0]
[16:4175] [vrf:Tenant1:Vrf1] permit arp epg:any epg:any [contract:implicit] [hit=0]
[21:4176] [vrf:Tenant1:Vrf1] deny,log any epg:any epg:any [contract:implicit] [hit=2]
[22:4134] [vrf:Tenant1:Vrf1] deny,log any epg:any pfx-0.0.0.0/0(15) [contract:implicit] [hit=0]

show zoning-rule scope では以下のように表示されます (2654211Tenant:Vrf1 の ID です)。

1
2
3
4
5
6
7
8
9
leaf# show zoning-rule scope 2654211
+---------+--------+--------+----------+---------+---------+---------+------+----------+----------------------+
| Rule ID | SrcEPG | DstEPG | FilterID |   Dir   |  operSt |  Scope  | Name |  Action  |       Priority       |
+---------+--------+--------+----------+---------+---------+---------+------+----------+----------------------+
|   4176  |   0    |   0    | implicit | uni-dir | enabled | 2654211 |      | deny,log |   any_any_any(21)    |
|   4175  |   0    |   0    | implarp  | uni-dir | enabled | 2654211 |      |  permit  |  any_any_filter(17)  |
|   4134  |   0    |   15   | implicit | uni-dir | enabled | 2654211 |      | deny,log | any_vrf_any_deny(22) |
|   4170  |   0    | 49153  | implicit | uni-dir | enabled | 2654211 |      |  permit  |   any_dest_any(16)   |
+---------+--------+--------+----------+---------+---------+---------+------+----------+----------------------+

show zoning-rule scope では Rule ID 4175 が implarp であること が分かります。 このルールは SrcEpg と DstEpg が共に「ゼロ」になっており、つまり Any:Any なルールに対して ARP が暗黙的に許可されていることが分かります。