@@ -5,11 +5,10 @@ author: jmmason70
5
5
ms.author : jeffreymason
6
6
ms.service : azure-operator-nexus
7
7
ms.topic : concept-article
8
- ms.date : 02/07 /2025
8
+ ms.date : 02/11 /2025
9
9
---
10
10
11
11
# Network Fabric OptionA and OptionB
12
- *** DRAFT***
13
12
14
13
BGP (Border Gateway Protocol) is a protocol used on the internet between routers to allow traffic to be routed between Autonomous Systems (AS). Autonomous Systems use BGP to advertise to their peers which IPs they can route to and which AS(S) they'll go through to get there. For example, an ISP (Internet Service Provider) advertises traffic to enter their network via their ingress points. They will then advertise they know how to route to the public IPs on their network, without them having to share how they do that routing internally.
15
14
@@ -24,68 +23,125 @@ Option B: This option is more complex but supports IPv4, IPv6, and multicast in
24
23
For more information on Multi-Autonomous Systems, see section 10 of [ RFC 4364] ( https://www.ietf.org/rfc/rfc4364.txt ) .
25
24
26
25
27
- *** Access Control Lists (ACLs)*** \
28
- ACLs (Permit & Deny) at an NNI (Network-to-Network Interface) Level protect SSH access on a Management VPN. Network Access control lists can be applied before provisioning Network Fabric. This limitation is temporary and will be removed in future release.
29
- Ingress and Egress ACLs are created before creation of NNI resources and referenced into NNI payload. When NNI resources are created, it also creates referenced ingress and egress ACLs. This activity needs to be performed before provisioning the Network Fabric.
26
+ ## Create a Network Fabric
30
27
31
28
The following steps (with examples) are used in creating and provisioning a Nexus Network Fabric.
32
29
33
30
1 . Create Fabric
34
31
35
- Create a Network Fabric with option A Properties
32
+ ** Create a Network Fabric with option A Properties**
36
33
37
- ````
38
- az networkfabric fabric create --resource-group "<NFResourceGroup>" --location "<Location>" --resource-name "<NFname>" --nf-sku "NFSKU" --fabric-version "x.x.x" --nfc-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/example-NFC" --fabric-asn 20 --ipv4-prefix "x.x.x.x/19" --rack-count 2 --server-count-per-rack 5 --ts-config "{primaryIpv4Prefix:'x.x.0.0/30',secondaryIpv4Prefix:'x.x.x.x/30',username:'****',password:'*****',serialNumber:1234}" --managed-network-config "{infrastructureVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31'}},workloadVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31',primaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127',secondaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127'}}}"
39
- ````
34
+ ``` azurecli
35
+
36
+ az networkfabric fabric create \
37
+ --resource-group "<NFResourceGroup>"
38
+ --location "<Location>" \
39
+ --resource-name "<NFName>" \
40
+ --nf-sku "<NFSKU>" \
41
+ --fabric-version "x.x.x" \
42
+ --nfc-id "/subscriptions/<subscription_id>/resourceGroups/<NFResourceGroup>/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/<NFCName>" \
43
+ --fabric-asn 65048 \
44
+ --ipv4-prefix x.x.x.x/19 \
45
+ --rack-count 4 \
46
+ --server-count-per-rack 8 \
47
+ --ts-config "{primaryIpv4Prefix:'x.x.0.0/30',secondaryIpv4Prefix:'x.x.x.x/30',username:'****',password:'*****',serialNumber:<TS_SN>}" \
48
+ --managed-network-config "{infrastructureVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31'}},workloadVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionA,optionAProperties:{bfdConfiguration:{multiplier:5,intervalInMilliSeconds:300},mtu:1500,vlanId:520,peerASN:65133,primaryIpv4Prefix:'x.x.x.x/31',secondaryIpv4Prefix:'x.x.x.x/31',primaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127',secondaryIpv6Prefix:'3FFE:FFFF:0:CD30::a0/127'}}}" --debug --no-wait
49
+
50
+ ```
51
+ > [ !Note]
52
+ > * if it's a four racks set up then the rack count would be 4
53
+ > * if it's an eight rack set up then the rack count would be 8
40
54
41
55
42
- Create a Network Fabric with option B Properties
56
+ ** Create a Network Fabric with option B Properties**
57
+
58
+ ``` azurecli
59
+
60
+ az networkfabric fabric create \
61
+ --resource-group "<NFResourceGroup>"
62
+ --location "<Location>" \
63
+ --resource-name "<NFName>" \
64
+ --nf-sku "<NFSKU>" \
65
+ --fabric-version "x.x.x" \
66
+ --nfc-id "/subscriptions/<subscription_id>/resourceGroups/<NFResourceGroup>/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/<NFCName>" \
67
+ --fabric-asn 65048 \
68
+ --ipv4-prefix "x.x.x.x/19" \
69
+ --ipv6-prefix "fd02:0000:7748:0140::/59" \
70
+ --rack-count 8 \
71
+ --server-count-per-rack 16 \
72
+ --ts-config '{"primaryIpv4Prefix": "x.x.x.x/30", "secondaryIpv4Prefix": "x.x.x.x/30", "username": "'$TS_USER'", "password": "'$TS_PASSWORD'", "serialNumber": "<TS_SN>", "primaryIpv6Prefix": "fd00:0:7748:016e::/64", "secondaryIpv6Prefix": "fd00:0:7748:016f::/64"}' \
73
+ --managed-network-config '{"infrastructureVpnConfiguration": {"peeringOption": "OptionB", "optionBProperties": {"routeTargets": {"exportIpv4RouteTargets": ["13979:2928504", "13979:106948"], "exportIpv6RouteTargets": ["13979:2928504", "13979:106948"], "importIpv4RouteTargets": ["13979:2928504", "13979:106947"], "importIpv6RouteTargets": ["13979:2928504", "13979:106947"]}}}, "workloadVpnConfiguration": {"peeringOption": "OptionB", "optionBProperties": {"routeTargets": {"exportIpv4RouteTargets": ["13979:2928516"], "exportIpv6RouteTargets": ["13979:2928516"], "importIpv4RouteTargets": ["13979:2928516"], "importIpv6RouteTargets": ["13979:2928516"]}}}}' --debug --no-wait
74
+
75
+ ```
76
+ > [ !Note]
77
+ > * if it's a four racks set up then the rack count would be 4
78
+ > * if it's an eight rack set up then the rack count would be 8
43
79
44
- ````
45
- az networkfabric fabric create --resource-group "<NFResourceGroup>" --location "<Location>" --resource-name "<NFname>" --nf-sku "NFSKU" --fabric-version "x.x.x" --nfc-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabricControllers/example-NFC" --fabric-asn 20 --ipv4-prefix x.x.x.x/19 --rack-count 2 --server-count-per-rack 5 --ts-config "{primaryIpv4Prefix:'x.x.x.x/30',secondaryIpv4Prefix:'x.x.x.x/30',username:'****',password:'*****',serialNumber:'1234'}"
46
- --managed-network-config "{infrastructureVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionB,optionBProperties:{routeTargets:{exportIpv4RouteTargets:['65046:10039'],exportIpv6RouteTargets:['65046:10039'],importIpv4RouteTargets:['65046:10039'],importIpv6RouteTargets:['65046:10039']}}},
47
- workloadVpnConfiguration:{networkToNetworkInterconnectId:'/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkFabrics/example-fabric/networkToNetworkInterconnects/example-nni',peeringOption:OptionB,optionBProperties:{routeTargets:{exportIpv4RouteTargets:['65046:10039'],exportIpv6RouteTargets:['65046:10039'],importIpv4RouteTargets:['65046:10039'],importIpv6RouteTargets:['65046:10039']}}}}"
48
- ````
49
80
50
81
2 . Create NNI ingress and egress ACLs
51
82
52
- Create ingress ACL
53
-
54
- ````
55
- az networkfabric acl create --resource-group "<NFResourceGroup>" \
56
- --location "<Location>" \
57
- --resource-name "<example-Ipv4ingressACL>" \
58
- --configuration-type "Inline" \
59
- --default-action "Permit" \
60
- --dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]" \
61
- --match-configurations "[{matchConfigurationName:'example-match',sequenceNumber:123,ipAddressType:IPv4,matchConditions:[{etherTypes:['0x1'],fragments:['0xff00-0xffff'],ipLengths:['4094-9214'],ttlValues:[23],dscpMarkings:[32],portCondition:{flags:[established],portType:SourcePort,layer4Protocol:TCP,ports:['1-20']},protocolTypes:[TCP],vlanMatchCondition:{vlans:['20-30'],innerVlans:[30]},ipCondition:{type:SourceIP,prefixType:Prefix,ipPrefixValues:['x.x.x.x/12']}}],actions:[{type:Count,counterName:'example-counter'}]}]"
62
- ````
63
-
64
- Create egress ACL
65
-
66
- ````
67
- az networkfabric acl create --resource-group "<NFResourceGroup>" \
68
- --location "<Location>" \
69
- --resource-name "<example-Ipv4egressACL>" \
70
- --configuration-type "File" \
71
- --acls-url "https://ACL-Storage-URL" --default-action "Permit" \
72
- --dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]"
73
- ````
83
+ ** Create ingress ACL**
84
+
85
+ ``` azurecli
86
+
87
+ az networkfabric acl create --resource-group "<NFResourceGroup>" \
88
+ --location "<Location>" \
89
+ --resource-name "<example-Ipv4ingressACL>" \
90
+ --configuration-type "Inline" \
91
+ --default-action "Permit" \
92
+ --dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]" \
93
+ --match-configurations "[{matchConfigurationName:'example-match',sequenceNumber:123,ipAddressType:IPv4,matchConditions:[{etherTypes:['0x1'],fragments:['0xff00-0xffff'],ipLengths:['4094-9214'],ttlValues:[23],dscpMarkings:[32],portCondition:{flags:[established],portType:SourcePort,layer4Protocol:TCP,ports:['1-20']},protocolTypes:[TCP],vlanMatchCondition:{vlans:['20-30'],innerVlans:[30]},ipCondition:{type:SourceIP,prefixType:Prefix,ipPrefixValues:['x.x.x.x/12']}}],actions:[{type:Count,counterName:'example-counter'}]}]"
94
+
95
+ ````
96
+
97
+ **Create egress ACL**
98
+
99
+ ```azurecli
100
+
101
+ az networkfabric acl create --resource-group "<NFResourceGroup>" \
102
+ --location "<Location>" \
103
+ --resource-name "<example-Ipv4egressACL>" \
104
+ --configuration-type "File" \
105
+ --acls-url "https://ACL-Storage-URL" --default-action "Permit" \
106
+ --dynamic-match-configurations "[{ipGroups:[{name:'example-ipGroup',ipAddressType:IPv4,ipPrefixes:['x.x.x.x/20']}],vlanGroups:[{name:'example-vlanGroup',vlans:['20-30']}],portGroups:[{name:'example-portGroup',ports:['100-200']}]}]"
107
+
108
+ ````
74
109
75
110
3. Create NNI (Network-to-NetworkInterface). Completed after the fabric create but before device update and fabric provision.
76
111
77
- ````
78
- az networkfabric nni create --resource-group "<NFResourceGroup>" --fabric "<NFFabric>" --resource-name "<NFNNIName>" --nni-type "CE" --is-management-type "True" --use-option-b "True" --layer2-configuration "{interfaces:['/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkDevices/example-networkDevice/networkInterfaces/example-interface'],mtu:1500}" --option-b-layer3-configuration "{peerASN:28,vlanId:501,primaryIpv4Prefix:'x.x.x.x/30',secondaryIpv4Prefix:'x.x.x.x/30',primaryIpv6Prefix:'10:2:0:124::400/127',secondaryIpv6Prefix:'10:2:0:124::402/127'}" --ingress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4ingressACL" --egress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4egressACL"
79
- ````
112
+ ```azurecli
113
+
114
+ az networkfabric nni create --resource-group "<NFResourceGroup>" \
115
+ --fabric "<NFFabric>" \
116
+ --resource-name "<NFNNIName>" \
117
+ --nni-type "CE" \
118
+ --is-management-type "True" \
119
+ --use-option-b "True" \
120
+ --layer2-configuration "{interfaces:['/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/networkDevices/example-networkDevice/networkInterfaces/example-interface'],mtu:1500}" \
121
+ --option-b-layer3-configuration "{peerASN:28,vlanId:501,primaryIpv4Prefix:'x.x.x.x/30',secondaryIpv4Prefix:'x.x.x.x/30',primaryIpv6Prefix:'10:2:0:124::400/127',secondaryIpv6Prefix:'10:2:0:124::402/127'}" \
122
+ --ingress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4ingressACL" \
123
+ --egress-acl-id "/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/example-rg/providers/Microsoft.ManagedNetworkFabric/accesscontrollists/example-Ipv4egressACL"
124
+
125
+ ````
80
126
81
127
4. Update devices
82
128
83
- ````
84
- az networkfabric device update --resource-group "<NFResourceGroup>" --resource-name "<Network-Device-Name>" --host-name <example-device-hostname> --serial-number <NF_DEVICE_SN>
85
- ````
86
-
87
- 5 . Provision network fabric
88
-
89
- ````
90
- az networkfabric fabric provision --resource-group "<NFResourceGroup>" --resource-name "<NFName>"
91
- ````
129
+ The following command should be run for each network fabric device.
130
+
131
+ ```azurecli
132
+
133
+ az networkfabric device update --resource-group "<NFResourceGroup>" \
134
+ --resource-name "<Network-Device-Name>" \
135
+ --host-name <example-device-hostname> \
136
+ --serial-number <NF_DEVICE_SN>
137
+
138
+ ````
139
+
140
+ 6. Provision network fabric
141
+
142
+ ```azurecli
143
+
144
+ az networkfabric fabric provision --resource-group "<NFResourceGroup>" \
145
+ --resource-name "<NFName>"
146
+
147
+ ````
0 commit comments