Cisco ACI では Contract が無くても ARP は許可される
Cisco ACI に関する情報を読んでいると「EPG 同士は Contract されていない限り、通信出来ない」という記載を目にすることがあります。 VRF の Policy Control Enforcement Preference
設定が Unenforced
で無い限り、この記載は概ね正しいのですが、厳密には「暗黙的に ARP は許可される」という振る舞いをします。
以下の構成で考えてみます。 Epg1 と Epg2 はどちらも Bd1 に所属しています。 但し、Epg1 と Epg2 は Contract していません。
Leaf で contract_parser.py
を確認すると以下のように表示されます。 permit
で implicit
なルールが幾つか存在することが分かりますが、「何を許可しているのか?」ははっきり分かりません。
| 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
では以下のように表示されます (2654211
は Tenant:Vrf1
の ID です)。
| 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 が暗黙的に許可されていることが分かります。