[Nexus9K] VXLAN EVPN セキュリティ – GPO(Group Policy Option)を試してみた
VXLAN EVPN環境におけるセキュリティ制御は、マルチテナント化や東西トラフィックの増加に伴いますます重要になっています。
Nexus 9000シリーズでは、EVPN/VXLAN環境においてオーバレイネットワーク上のテナントに存在する各エンドポイントに対して、GPO(Group Policy Option)を利用するとファブリック内に分散ファイアウォール的な機能を提供することができます。
本記事では、Nexus 9K環境でVXLAN EVPN securityの一機能であるGPOについて座学的に学びつつ、検証を通じて導入時のポイントや注意点も整理します。
なおN9KvはGPOに対応していないようなので実機を用いた検証となっています。
座学:そもそもGPO(Group Policy Option)は何が嬉しい?
GPOは、VXLANヘッダにSGT(Security Group Tag)を付与し、送信元および宛先のSecurity Groupの組み合わせに基づいてポリシーを適用する仕組みです。
ここでいうポリシーとは、EPG(Endpoint Group)間の通信を制御することです。具体的には、permit、deny、redirectといった処理を定義します。EPGは一般的にワークロードの役割に基づいて定義されます。分かりやすい例としては、Web、App、DBといった区分をイメージしてください。
これらを従来の技術で実現しようとすると、Routed Interface、SVI、VLANに対するACLや、Private VLAN(PVLAN)などを組み合わせることになります。
VXLAN EVPNファブリックのような仮想ネットワークでは、L2/L3セグメントが多くのリーフスイッチへ拡張されます。この環境でEPG間の通信要件をACLだけで表現しようとすると、ACLの組み合わせ、エントリ数、適用箇所が増大し、運用が複雑になります。
一方、GPOを利用すると、次のような利点があります。
・EPGをIPアドレス、MACアドレス、VLAN、インターフェースなどの条件で定義し、送信元EPGと宛先EPGの組み合わせに対して、どの通信を許可、拒否、またはリダイレクトするかをポリシーとして定義できます。従来のように、MACアドレスであればVLAN ACL、IPアドレスであればRouted InterfaceやSVIのACL、といったように、扱う情報ごとに記述方法や適用箇所を変える必要がありません。EPGをグループとして定義し、ポリシーから再利用できるため、コンフィグ量の削減にもつながります
・リモートリーフ配下のエンドポイントについては、EVPNを通じてMAC/IPアドレスとSGTの情報を受信できます。そのため、通信を受信するリーフでは、リモート側エンドポイントの詳細な分類条件を個別に持たなくても、受信したSGTとローカル側のSGTを用いてポリシーを判定できます
ただし、後者には注意が必要です。データセンターでライブマイグレーションを利用する場合、アプリケーションやVMがリーフ間を移動します。移動先リーフが、そのEndpointに対して同じSGTを付与できなければ、移動後に期待どおりのポリシーを適用できません。したがって、移動先になり得るすべてのリーフに一貫したEPG/Security Groupの分類定義を配布する必要があります。
このようにGPOを利用することで、EPG間ポリシーを従来のACLやPVLAN中心の方式よりも、役割ベースでシンプルに管理・制御できるようになります。
検証内容と結果
テストはシンプルにローカルスイッチとリモートスイッチでEPGをIPやVLANでセレクトして、それぞれをICMP通信して期待通りに動作するか試してみました。
検証構成
今回は以下のようなシングルテナント構成で実施しました。前回の流れでAll IPv6 eBGP構成がベースとなっています。

それぞれのリーフスイッチに接続されたエンドポイントを異なるセレクト条件(IPv4/IPv6/VLAN)で定義します。またそれぞれのEPGを同一L2 VNIと異なるL2VNIに接続して、仮想L2ネットワークと仮想L3ネットワークを通して正しくポリシーが適用されるか確認しています。

なお冒頭に記載した通り、今回は実機を使っての検証となります。
Nexus9Kvで試してみたかったのですが、GPOを利用する際に必須の
feature security
コマンドを入力したところ、パケットフォワーディングが止まってしまいました。
N9KvのRelease Noteにも対応に関する記載がないですし、対応していないということだと思います。
https://www.cisco.com/c/en/us/td/docs/dcn/nx-os/nexus9000/106x/configuration/n9000v-9300v-9500v/cisco-nexus-9000v-9300v-9500v-guide-release-106x/m-overview.html
残念。今後のN9Kvの機能拡張を願っています。
テスト内容と結果
テストは以下の図の通り、テスト1−3のポリシーを反映させたうえで、EPG1からEPG2・EPG3・EPG4へIPv4/IPv6 Pingを送信して、Pingが成功するか失敗するかを確認するシンプルな内容です。

テスト結果
試験結果としては各テストパターンともに想定した通りのPing結果となりました。
ここではテスト1に絞ってコンフィグとステータスを確認します。
テスト1のコンフィグ:
まずGPOにフォーカスして、各スイッチに適用するコンフィグを見てみたいと思います。
各リーフのGPOの基本設定
NXOS15/16:
feature security
system routing template-security-groups
### system routing template-security-groupsでrebootが必要
次にEPGを定義します。各ローカルリーフスイッチで定義します。
各リーフのEPGの設定
NXOS15:
security-group 100 name EPG1
match connected-endpoints vrf vrf-3000 ipv4 20.20.20.1/32
match connected-endpoints vrf vrf-3000 ipv6 2001:20:20:20::1/128
security-group 200 name EPG2
match connected-endpoints vrf vrf-3000 ipv4 21.21.21.0/24
match connected-endpoints vrf vrf-3000 ipv6 2001:21:21:21::1/128
NXOS16:
security-group 300 name EPG3
match vlan 200
security-group 400 name EPG4
match vlan 220
最後にポリシー(Security Contract)の定義と適用です。
各リーフスイッチで共通です。各ポリシーはsecurity contract設定となり、VRF配下に設定します。security enforceコマンドでデフォルトpermit or denyを設定します。
各リーフのポリシー設定
NXOS15/16:
class-map type security match-any icmp
match ip icmp
match ipv6 icmpv6
policy-map type security permit_icmp
class icmp
log
vrf context vrf-3000
vni 3000
security contract source 100 destination 200 policy permit_icmp
security contract source 100 destination 400 policy permit_icmp
security enforce tag 999 default deny
ここで全体のコンフィグを見てみましょう。
以下テスト1の全体コンフィグとなります。NXOS15とNXOS16の太字部分が上記で説明したGPOコンフィグ部分となります。NXOS14はSpineなので特にGPOのコンフィグはありません。
NXOS14
NXOS14# show run
<snip>
version 10.6(2) Bios:version 05.53
hostname NXOS14
<snip>
feature nxapi
nv overlay evpn
feature ospf
feature bgp
feature pim
feature grpc
feature netflow
feature analytics
feature lldp
clock timezone JST 9 0
clock protocol ptp vdc 1
feature nv overlay
feature ngoam
feature telemetry
feature nxsecure
<snip>
route-map NEXT-HOP-UNCH permit 10
set ip next-hop unchanged
set ipv6 next-hop unchanged
<snip>
interface Ethernet1/32
description to NXOS16 Ethernet1/1
ipv6 address use-link-local-only
ipv6 nd ra-interval 4 min 3
ipv6 nd ra-lifetime 10
no shutdown
<snip>
interface Ethernet1/34
description to NXOS15 Ethernet1/1
ipv6 address use-link-local-only
ipv6 nd ra-interval 4 min 3
ipv6 nd ra-lifetime 10
no shutdown
<snip>
interface loopback0
description SPINE_LOOPBACK
ipv6 address 2001:db8:100::14/128
icam monitor scale
line console
line vty
boot nxos bootflash:/nxos64-cs.10.6.2.F.bin
router bgp 65000
router-id 14.14.14.14
bestpath as-path multipath-relax
address-family ipv6 unicast
network 2001:db8:100::14/128
address-family l2vpn evpn
retain route-target all
neighbor Ethernet1/32
remote-as 65016
description BGP_UNNUMBERED_TO_NXOS16
address-family ipv6 unicast
address-family l2vpn evpn
send-community
send-community extended
route-map NEXT-HOP-UNCH out
neighbor Ethernet1/34
remote-as 65015
description BGP_UNNUMBERED_TO_NXOS15
address-family ipv6 unicast
address-family l2vpn evpn
send-community
send-community extended
route-map NEXT-HOP-UNCH out
NXOS15
NXOS15# show run
<snip>
version 10.6(3) Bios:version 01.12
hostname NXOS15
<snip>
feature nxapi
cfs eth distribute
nv overlay evpn
feature ospf
feature bgp
feature pim
feature grpc
feature interface-vlan
feature vn-segment-vlan-based
feature netflow
feature analytics
feature lacp
feature dhcp
feature lldp
clock timezone JST 9 0
clock protocol ptp vdc 1
feature nv overlay
feature security-group
feature ngoam
feature telemetry
feature nxsecure
security-group 100 name EPG1
match connected-endpoints vrf vrf-3000 ipv4 20.20.20.1/32
match connected-endpoints vrf vrf-3000 ipv6 2001:20:20:20::1/128
security-group 200 name EPG2
match connected-endpoints vrf vrf-3000 ipv4 21.21.21.0/24
match connected-endpoints vrf vrf-3000 ipv6 2001:21:21:21::1/128
class-map type security match-any icmp
match ip icmp
match ipv6 icmpv6
policy-map type security permit_icmp
class icmp
log
vrf context vrf-3000
vni 3000
security contract source 100 destination 200 policy permit_icmp
security contract source 100 destination 400 policy permit_icmp
security enforce tag 999 default deny
rd auto
address-family ipv4 unicast
route-target import 3000:3000
route-target import 3000:3000 evpn
route-target export 3000:3000
route-target export 3000:3000 evpn
address-family ipv6 unicast
route-target import 3000:3000
route-target import 3000:3000 evpn
route-target export 3000:3000
route-target export 3000:3000 evpn
system routing template-security-groups
<snip>
interface Vlan200
no shutdown
vrf member vrf-3000
ip address 20.20.20.254/24
ipv6 address 2001:20:20:20::254/64
fabric forwarding mode anycast-gateway
interface Vlan210
no shutdown
vrf member vrf-3000
ip address 21.21.21.254/24
ipv6 address 2001:21:21:21::254/64
fabric forwarding mode anycast-gateway
interface Vlan300
no shutdown
vrf member vrf-3000
ip forward
ipv6 forward
interface nve1
no shutdown
host-reachability protocol bgp
source-interface loopback0
member vni 2000
ingress-replication protocol bgp
member vni 2100
ingress-replication protocol bgp
member vni 3000 associate-vrf
<snip>
interface Ethernet1/51
description to VPC9
switchport
switchport mode trunk
switchport trunk allowed vlan 200,210
no shutdown
interface Ethernet1/52
description to NXOS14 Ethernet1/1
ipv6 address use-link-local-only
ipv6 nd ra-interval 4 min 3
ipv6 nd ra-lifetime 10
no shutdown
<snip>
interface loopback0
description VTEP_LOOPBACK_IPV6
ipv6 address 2001:db8:100::15/128
icam monitor scale
line console
line vty
boot nxos bootflash:/nxos64-cs.10.6.3.F.bin
router bgp 65015
router-id 15.15.15.15
bestpath as-path multipath-relax
address-family ipv6 unicast
network 2001:db8:100::15/128
address-family l2vpn evpn
neighbor Ethernet1/52
remote-as 65000
description BGP_UNNUMBERED_TO_NXOS14
address-family ipv6 unicast
address-family l2vpn evpn
send-community
send-community extended
route-map RM_EVPN_NH out
evpn
vni 2000 l2
rd auto
route-target import 2000:2000
route-target export 2000:2000
vni 2100 l2
rd auto
route-target import 2100:2100
route-target export 2100:2100
NXOS16
NXOS16# show run
<snip>
version 10.6(3) Bios:version 01.12
hostname NXOS16
<snip>
feature nxapi
cfs eth distribute
nv overlay evpn
feature ospf
feature bgp
feature pim
feature grpc
feature interface-vlan
feature vn-segment-vlan-based
feature netflow
feature analytics
feature lacp
feature dhcp
feature lldp
clock timezone JST 9 0
clock protocol ptp vdc 1
feature nv overlay
feature security-group
feature ngoam
feature telemetry
<snip>
security-group 300 name EPG3
match vlan 200
security-group 400 name EPG4
match vlan 220
class-map type security match-any icmp
match ip icmp
match ipv6 icmpv6
policy-map type security permit_icmp
class icmp
log
fabric forwarding anycast-gateway-mac 2020.0000.00aa
ipv6 switch-packets lla
vlan 1,200,220,300
vlan 200
vn-segment 2000
vlan 220
vn-segment 2200
vlan 300
vn-segment 3000
route-map RM_EVPN_NH permit 10
set ipv6 next-hop 2001:db8:100::16
<snip>
vrf context vrf-3000
vni 3000
security contract source 100 destination 200 policy permit_icmp
security contract source 100 destination 400 policy permit_icmp
security enforce tag 999 default deny
rd auto
address-family ipv4 unicast
route-target import 3000:3000
route-target import 3000:3000 evpn
route-target export 3000:3000
route-target export 3000:3000 evpn
address-family ipv6 unicast
route-target import 3000:3000
route-target import 3000:3000 evpn
route-target export 3000:3000
route-target export 3000:3000 evpn
system routing template-security-groups
<snip>
interface Vlan200
no shutdown
vrf member vrf-3000
ip address 20.20.20.254/24
ipv6 address 2001:20:20:20::254/64
fabric forwarding mode anycast-gateway
interface Vlan220
no shutdown
vrf member vrf-3000
ip address 22.22.22.254/24
ipv6 address 2001:22:22:22::254/64
fabric forwarding mode anycast-gateway
interface Vlan300
no shutdown
vrf member vrf-3000
ip forward
ipv6 forward
interface nve1
no shutdown
host-reachability protocol bgp
source-interface loopback0
member vni 2000
ingress-replication protocol bgp
member vni 2200
ingress-replication protocol bgp
member vni 3000 associate-vrf
<snip>
interface Ethernet1/51
switchport
switchport mode trunk
switchport trunk allowed vlan 200,220
no shutdown
interface Ethernet1/52
speed 40000
no negotiate auto
ipv6 address use-link-local-only
ipv6 nd ra-interval 4 min 3
ipv6 nd ra-lifetime 10
no shutdown
<snip>
interface loopback0
description VTEP_LOOPBACK_IPV6
ipv6 address 2001:db8:100::16/128
icam monitor scale
line console
line vty
boot nxos bootflash:/nxos64-cs.10.6.3.F.bin
router bgp 65016
router-id 16.16.16.16
bestpath as-path multipath-relax
address-family ipv6 unicast
network 2001:db8:100::16/128
address-family l2vpn evpn
neighbor Ethernet1/52
remote-as 65000
description BGP_UNNUMBERED_TO_NXOS14
address-family ipv6 unicast
address-family l2vpn evpn
send-community
send-community extended
route-map RM_EVPN_NH out
evpn
vni 2000 l2
rd auto
route-target import 2000:2000
route-target export 2000:2000
vni 2200 l2
rd auto
route-target import 2200:2200
route-target export 2200:2200
各ステータス確認コマンド
本来テスト実施後のステータスを確認したかったのですが、コマンドを色々取り忘れてしまったこともあり、今回は確認コマンド紹介にとどめたいと思います。
まずEPGを確認するにはshow security-group となります。実機の結果ではないので表示結果については気にしないでください。
Leaf1# show security-group id all
Security Group ID 200 , Name DB_Prod
Selector Type : Connected IPv4 Endpoints
VRF-Name IPv4-Address/mask-len
VRF_App 192.168.10.11/32
VRF_App 192.168.10.12/32
Leaf1#
各宛先に対するSGTを確認するには、以下のようなshow l2route mac topology/show l2route mac-ip topologyが有効です。
参考)
Leaf1# show l2route mac topology 2300
<snip>
Topology Mac Address Prod Flags Seq No Next-Hops
----------- -------------- ------ ------------------ ---------- ---------------------------
2300 0050.7216.1011 Local L, 0 Eth1/1 (SGT - MAC:110)
Leaf1# show l2route mac-ip topology 2300
<snip>
Topology Mac Address Host IP Prod Flags Seq No Next-Hops
----------- -------------- ------------------------------ ------ --------------------------
2300 0050.7216.1011 172.16.10.11 HMM L, 0 Vlan2300 (SGT - IP:110)
show contractはポリシーやポリシーへのヒット数を確認できます。
NXOS15# show contract
VRF SGT DGT Policy Dir Stats Class Action OperSt
--------------------------------------------------------------------------------------------------------
vrf-3000 100 200 permit_icmp bidir 20 icmp permit,log enabled
100 400 permit_icmp bidir 10 icmp permit,log enabled
NXOS15#
show logging ip access-list cache は実際にポリシーに引っかかった際に記録されたフローキャッシュを表示してくれます。
Policy-mapのlog Option で設定しておく必要があります。実トラフィックがポリシーにマッチしているかどうか確認する時に重宝するコマンドだと思います。
NXOS15# show logging ip access-list cache
Src IP Dst IP S-Port D-Port Src Intf Protocol Hits
------------------------------------------------------------------------------------------
20.20.20.1 20.20.20.2 0 0 Ethernet1/51 (1)ICMP 5
2001:20:20:20::1 2001:22:22:22::1 0 0 Ethernet1/51 (58)IPv6-ICMP 2
21.21.21.1 20.20.20.1 0 0 Ethernet1/51 (1)ICMP 2
2001:21:21:21::1 2001:20:20:20::1 0 0 Ethernet1/51 (58)IPv6-ICMP 3
2001:20:20:20::1 2001:21:21:21::1 0 0 Ethernet1/51 (58)IPv6-ICMP 3
2001:20:20:20::1 2001:20:20:20::2 0 0 Ethernet1/51 (58)IPv6-ICMP 5
20.20.20.1 22.22.22.1 0 0 Ethernet1/51 (1)ICMP 2
20.20.20.1 21.21.21.1 0 0 Ethernet1/51 (1)ICMP 0
NXOS15#
まとめ
今回はGPOの動作を見てみました。EPG間のポリシー制御は、今回の機能のようにファブリックで行うのか、VMware NSXやK8S CNIのようにホスト側で行うのか、はたまたFWで一元的に行うのか、色々手法があるので悩ましいところです。それぞれのメリット・デメリットとしては以下の感じかなと。
- ファブリックでの制御は、接続機器はなんでも制御可能かつ安価なスイッチ(ASIC)で高速処理、ただしCAM容量に限りがある
- ホスト側で制御すると、細やかな制御が可能、ただしホストサイドで同一環境が必要
- FWでは、細やかな制御かつ大容量処理も可能、ただしE/W通信では無駄が多いのと装置が高価
コストと管理手法、全体的なアーキテクチャを見ながら、最適解を探していきたいところです。










ディスカッション
コメント一覧
まだ、コメントがありません