- This set of Azure Networking labs are simplified to demonstrate a single concept in each lab, using Azure portal or Azure CLI.
- Each lab has a diagram that provides information on the lab setup.
- Most labs build on each other so prior setup is expected.
- Note: Some alterations were made on on my lab completion because there are some errors in the files.
- Created a vNET (10.1.0.0/16).
- Created 2 subnets (10.1.1.0/24 & 10.1.2.0/24).
- Added a VM on each subnet ("Mgmt" & "Web").
- Installed "Apache" on the "Web" VM in subnet 2.
-
Created a NSG (Network Security Group) and associated to each subnet.
-
Removed the NSGs created with the VM NICs.
-
created an ASG (Application Security Group) for each VM ("Mgmt" & "Web").
-
Note: The ASGs have the same name as the VMs.
-
Added the following inbound security rules to the NSG:
Port: "22", "3389"; Protocol: "TCP"; Source: "Any"; Destination: "Mgmt"; Action: "Allow".
Port: "80", "443"; Protocol: "TCP"; Source: "Any"; Destination: "Web"; Action: "Allow".
Note: Port "3389" was added so that I could connect to Windows VMs in the future.
- Tested connectivity from my local computer to the VMs public IPs.
- Created a new subnet (10.1.3.0/24) and associated it to the NSG.
- Created a VM on the new subnet ("App") and installed "Apache".
- Removed the NSGs created with the VM NIC.
- Added the following inbound security rules to the NSG:
Port: "Any"; Protocol: "ICMP"; Source: "Any"; Destination: "Mgmt", "Web"; Action: "Allow".
Port: "Any"; Protocol: "ICMP"; Source: "Web"; Destination: "App"; Action: "Allow".
Port: "Any"; Protocol: "ICMP"; Source: "Mgmt"; Destination: "App", "Web"; Action: "Allow".
Port: "22", "3389"; Protocol: "TCP"; Source: "Any"; Destination: "Mgmt"; Action: "Allow".
Port: "80"; Protocol: "TCP"; Source: "Web"; Destination: "App"; Action: "Allow".
Port: "Any"; Protocol: "Any"; Source: "Any"; Destination: "Any"; Action: "Deny".
- Tested connectivity from my local computer to the VMs public & private IPs.
- Entered Azure CLI (Bash Shell).
- Note: Created a Storage account and File Share for it.
- Created a vNET (10.0.0.0/16) & Subnet (10.0.1.0/24).
Variables:
ResourceGroup=Azure_Net_Lab_RG
VnetName=vnet-hub
VnetPrefix=10.0.0.0/16
SubnetName=Vnet-Hub-Subnet1
SubnetPrefix=10.0.1.0/24
Location=westeurope
Command:
az network vnet create \
-g $ResourceGroup \
-n $VnetName \
--address-prefix $VnetPrefix \
--subnet-name $SubnetName \
--subnet-prefix $SubnetPrefix \
-l $Location
- Created a NSG and added an inbound security rule.
Variables:
ResourceGroup=Azure_Net_Lab_RG
NSG=NSG-Hub
NSGRuleName=Vnet-Hub-Allow-SSH
Location=westeurope
DestinationAddressPrefix=10.0.1.0/24
DestinationPortRange=22
Commands:
az network nsg create \
--name $NSG \
--resource-group $ResourceGroup \
--location $Location
az network nsg rule create \
-g $ResourceGroup \
--nsg-name $NSG \
--name $NSGRuleName \
--direction inbound \
--destination-address-prefix $DestinationAddressPrefix \
--destination-port-range $DestinationPortRange \
--access allow \
--priority 100
- Attached the NSG to the new Subnet.
Variable:
NSG=NSG-Hub
Command:
az network vnet subnet update \
-g $ResourceGroup \
-n $SubnetName \
--vnet-name $VnetName \
--network-security-group $NSG
- Created a VM.
Variables:
VmName=Vnet-Hub-VM1
SubnetName=Vnet-Hub-Subnet1
AdminUser=hubuser
AdminPassword="A secure password"
Command:
az vm create \
--resource-group $ResourceGroup \
--name $VmName \
--image UbuntuLTS \
--vnet-name $VnetName \
--subnet $SubnetName \
--admin-username $AdminUser \
--admin-password $AdminPassword
- Listed the created subnet.
az network vnet subnet list \
-g $ResourceGroup \
--vnet-name $VnetName \
-o table
-
Checked connectivity between vNETs ("Hub" & "Vnet1").-
-
Copied the public IPs of the VMs in the "Hub" vNET & "Mgmt" subnet.
-
Connected to the "Mgmt" VM with SSH.
-
Pinged the private IP of the VM in the "Hub" vNET and verified that it didnt succeed.
-
Created a Peer vNET in "Vnet1" (It automatically creates one on the remote vNET).
-
Allowed access and traffic forwarding between vNETs.
-
Note: Traffic forwarding only works if there is a Firewall or NVA on the Hub.
-
Verified the "Effective Routes" on the NIC of each VM for "Peered vNET".
-
Accessed the "Mgmt" VM with its public IP and pinged the "Hub" VM's private IP.
-
Note: The "AllowVnetInBound" is what allows communication between resources in connected vNETs.
-
Note: If a new rule is created that disables that, we won't be able to ping.
- Accessed the Azure CLI (Bash Shell).
- Created a new vNET & Subnet.
Variables:
ResourceGroup=Azure_Net_Lab_RG
VnetName=Vnet2
VnetPrefix=10.2.0.0/16
SubnetName=Vnet2-Subnet1
SubnetPrefix=10.2.1.0/24
Location=westeurope
Command:
az network vnet create \
-g $ResourceGroup \
-n $VnetName \
--address-prefix $VnetPrefix \
--subnet-name $SubnetName \
--subnet-prefix $SubnetPrefix \
-l $Location
- Attached the old NSG to the new Subnet (Bash Shell).
Variable:
NSG=NSG1
Command:
az network vnet subnet update \
-g $ResourceGroup \
-n $SubnetName \
--vnet-name $VnetName \
--network-security-group $NSG
- Created a new VM.
Variables:
VmName=Vnet2-VM1
SubnetName=Vnet2-Subnet1
AdminUser=azureuser
AdminPassword="A secure password"
Command:
az vm create \
--resource-group $ResourceGroup \
--name $VmName \
--image UbuntuLTS \
--vnet-name $VnetName \
--subnet $SubnetName \
--admin-username $AdminUser \
--admin-password $AdminPassword
- Removed the NSG created from the VMs creation.
- Peered the new "Vnet2" vNET with the "Hub" vNET.
- Allowed access and traffic forwarding between vNETs.
- Verified the "Effective Routes" on the NIC of the new VM for "Peered vNET".
- Altered the NSG to allow SSH to the new VMs public IP.
- Accessed the "Vnet2" VM with its public IP and pinged the "Hub" VM's private IP.
- Accessed the "Vnet2" VM with its public IP and verified that I couldn't ping the "Mgmt" VM's private IP.
- Note: It doesnt work because transitive peering is not allowed.
-
Deployed a NVA (Metwork Virtual Appliance) to "Vnet1".
-
Note: In this case I deployed the Cisco Cloud Services Router 1000V from the Azure Marketplace.
-
Added it to a new Resource Group ("RG-Csr").
-
Added 2 NICs to it, each one connected to each subnet in "Vnet1".
-
Accessed the new Router VM with its public IP.
-
Note: Since it is in "Vnet1-Subnet1", it receives its NSG.
-
Note: It also created its own NSG (Csr1-SSH-SecurityGroup) which is attached to its 2 NICs.
- Created a route table and added it to a new Resource Group.
- Created a route in it:
Address prefix: "10.0.1.0/24"; Next hop type: "VirtualAppliance"; Next hop IP address: "10.1.1.5" (The Routers private IP address on "Vnet1-Subnet1").
-
Associated the route table to subnet "Vnet1-Subnet2".
-
Deleted the route tables created from the creation of the "Csr" VM.
-
Enabled IP forwarding on the NVAs NIC attached to "Vnet1-Subnet2".
-
Altered the NSG to allow ICMP to the new VM.
-
Note: All of this forced the "Web" VM on "Vnet1-Subnet2" to route to "Csr1" when it wants to communicate with the IP range 10.0.1.0/24.
-
Accessed the "Web" VM with its public IP and pinged the "Csr1" & "Hub" VM's private IPs.
-
Did a traceroute from the "Web" VM to the "Hub" VM:
1 csr1.internal.cloudapp.net (10.1.1.5) 3.487 ms 3.458 ms 3.447 ms
2 10.0.1.4 (10.0.1.4) 4.466 ms * 4.443 ms
- Created the "OnPrem" vNET:
Variables:
ResourceGroup=RG-Lab
VnetName=OnPrem
VnetPrefix=10.128.0.0/16
SubnetName=OnPrem-Subnet1
SubnetPrefix=10.128.1.0/24
Location=westeurope
Command:
az network vnet create \
-g $ResourceGroup \
-n $VnetName \
--address-prefix $VnetPrefix \
--subnet-name $SubnetName \
--subnet-prefix $SubnetPrefix \
-l $Location
-
Created a Gateway Subnet in the "Hub" (10.0.254.0/27) & "OnPrem" vNET (10.128.254.0/27).
-
Note: A VPN GW needs to be deployed in a specific subnet named "GatewaySubnet".
-
Created a "Gen1" "Route-based" VNG (Virtual Network Gateway) in the "Hub" & "OnPrem" vNET.
-
Note: Active-Active mode is "disabled" & BGP is "enabled" with ASN as "65002".
-
Created a LNG (Local Network Gateway) with the "On-prem" address space & the details of the "OnPrem" VNG.
-
Note: LNG refers to the details of the local VNG including its IP address, BGP AASN & peering IP.
-
Note Address space refers to the local address range that we want to be reachable from the other VNG.
-
Created an LNG with the "Hub" address space & the details of the "Hub" VNG.
-
Added a VPN connection on the "Hub" GW:
Connection type: "Site-to-Site (IPsec)"; VNG: "Hub GW"; LNG: "OnPrem GW"; Shared key: "A secret key"; IKE protocol: "IKEv2";
- Added a VPN connection on the "OnPrem" GW but with the "Onprem" VNG & the "Hub" LNG.
- A site to Site VPN is created between the "Hub" vNET & "Onprem" vNET.
- Verified that the connections are in the "Connected" status.
- Created a VM on the "OnPrem" vNET with Azure CLI (Bash Shell).
Variables:
ResourceGroup=RG-Lab
VmName=OnPrem-VM1
VnetName=OnPrem
SubnetName=OnPrem-Subnet1
AdminUser=azureuser
AdminPassword="A secure key"
Command:
az vm create \
--resource-group $ResourceGroup \
--name $VmName \
--image UbuntuLTS \
--vnet-name $VnetName \
--subnet $SubnetName \
--admin-username $AdminUser \
--admin-password $AdminPassword
- Verified the VPN connections by accessing the "OnPrem" VM and connecting it to the VM on the "Hub" vNET.
- Added a new prefix on the "Hub" LNG with a range that captures the "Vnet1" VMs private IP (10.1.0.0/16).
- Connected to the "OnPrem" VM with its public IP and pinged the private IP address of the "Hub" & "Mgmt" VM.
- Verified that only the "Hub" VM was reachable.
- Enabled "Allow Gateway Transit" on the "Hub" vNET peering with the "Vnet1" vNET.
- Enabled "Use Remote Gateways" on the "Vnet1" vNET peering with the "Hub" vNET.
- Verified that both VMs were now reachable.
-
A "standard" virtual WAN service is created in a new Resource Group.
-
In it I created a virtual Hub (vnet) is created with the following information.
-
Basic: The lowest "Virtual Hub Capacity" (Which is 2 Units) and with a private address of 10.64.0.0/16.
-
Site-to-Site: Enabled and "Gateway scale units" to 1 scale.
-
Note: Two instances are deployed when a VPN gateway is provisioned in a virtual Hub. The Aggregate capacity is the bandiwdth of both put together.
-
Created a "VPN site" on the virtual WAN that corresponds to the "OnPrem vNETs VNG":
Device vendor: "MSN"; Link speed: "50"; Link provider name: "MSN", Link IP address: "OnPrem NVGs Public IP"; Link BGP address: "OnPrem NVGs BGP address"; link ASN: "OnPrem NVGs ASN".
- Verified that the "VPN site" has Hub with status "Connection Needed" because it hasnt been connected to the "Hub" that was created earlier.
- Accessed the "Hub" VPN GW and connected the "VPN site" that was created:
PSK: "Secret key"; Protocol: "IPsec"; IPsec: "Default";
-
Verified that the Connection Provisioning status equals "Succeeded" & Connectivity status equals "Not Connected".
-
Downloaded the "VPN config" on the "Hub" router which contains information of the "vWAM" and the "OnPrem VPN site".
-
Note: It creates a storage account in a new resource group.
-
Created a LNG of the "Hub" vNET with information from the downloaded file:
IP address: "The vWANs Public IP"; Address space: "10.64.0.0/16"; BGP: "Enabled"; ASN: "65515"; BGP Peer ID address: "The vWANs BGP peer IP".
-
Added a new "Site-to-Site" Connection with the "OnPrem" VNG and the LNG of the "Hub" vWAN.
-
Note: PSK & IKE Protocol must be the same & BGP peer enabled.
-
Verified that the status of the connection changed to "Connected" on both sides.
-
Deleted everything related to the "Hub" GW and its connections to the "Vnet1" vNET from the previous lab.
-
Created a connection between the "vWAN Hub" and "Vnet1" in "Virtual Network Connections" with everything as default.
-
Verified that the connection is "Succeeded".
-
Verified that the "topology" of the vWAN is correct.
-
Verified the "Hub" status as "Succeeded" & shows "1 VPN site connected".
-
Verified that the "VPN site" has "Site Provisioning Status" as "Provisioned".
-
Verified that pinging from the "On-Prem" VM to the private IP of the "Mgmt" Vm was successful.
-
Created a new "Branch2" vnet with IP range 10.129.0.0/16 and subnet 10.129.1.0/24.
-
Created a "Gateway subnet" with IP range 10.129.0.0/24.
-
Created a VPN GW:
Gateway type: "VPN"; VPN type: "Route-based"; SKU: "VpnGW1"; Generation: "Generation1"; virtual network: "Branch2";
Public IP address: "Create new";
Enable active-active mode: "Disabled";
Configure BGP: "Enabled";
ASN: "65003";
- Added a new virtual WAN "Hub2" Hub in another region with IP range 10.65.0.0/16.
- Created a new VPN GW in in the new Hub.
- Created a new "VPN Site":
Device vendor: "MSN"; Link speed: "50"; Link provider name: "MSN", Link IP address: "Branch NVGs Public IP"; Link BGP address: "Branch NVGs BGP address"; link ASN: "Branch NVGs ASN".
- Connected the VPN site to the new Hub:
PSK: "Secret key"; Protocol: "IPsec"; IPsec: "Default";
- Downloaded the configuration and added the necessary information to a new "Local Network Gateway":
IP address: "The vWANs Public IP"; Address Space: "10.65.0.0/16" BGP: "Enabled"; ASN: "65515"; BGP Peer ID address: "The vWANs BGP peer IP".
- Configured a Site-to-Site connection on the Branch2 VPN GW with the LNG to the new Hub.
- Verified that connection was established.
- Created a VM in the Branch2 vnet and successfuly pinged the VM on the vnet and onprem.
- A "Web2" VM was created in the same location as "Web1" and with the same "web" ASG in Azure CLI (Baash Shell).
Variables:
ResourceGroup=Azure_Net_Lab_RG
VmName=Vnet1-VM-Web2
VnetName=Vnet1
SubnetName=Vnet1-Subnet2
Admin=azureuser
Password="A secure password"
Command:
az vm create --resource-group $ResourceGroup \
--name $VmName \
--image UbuntuLTS \
--vnet-name $VnetName \
--subnet $SubnetName \
--nsg "" \
--asgs Web \
--public-ip-address "" \
--admin-username $Admin \
--admin-password $Password
- Connected to the "Mgmt" VM with its public IP and accessed the "Web1" VM.
- Elevated to root and installed apache and wrote HTML text to the index.html file:
echo '<!doctype html><html><body><h1>Web Server 1</h1></body></html>' | tee /var/www/html/index.html
- Connected to the "Web2" VM with its private IP and did the same as "Web1":
echo '<!doctype html><html><body><h1>Web Server 2</h1></body></html>' | tee /var/www/html/index.html
-
A "standard" LB (Load Balancer) is configured on vNET "Vnet1".
-
Note: It is a Layer 4 LB (Balances TCP & UDP traffic).
-
Public IP address was created for the Frontend.
-
A backend pool was added with both "Web" VMs.
-
Note: The backend for the LB includes the 2 Web VMs on the vNET "Vnet1".
-
A Load Balancing Rule was added and is connected to the Frontend IP and Backend pool.
-
Note: In it a health probe was added to monitor the status of port "80" and protocol "HTTP".
-
Verified that "Web1" appears when connecting to the LBs public IP & "Web2" after shutting down "Web1" VM.
-
Accessed Network Watcher in the search box and verified that there was one from the previous exercises.
-
Note: Network Watcher is created in its own Resource Group "NetworkWatcherRG" when a vNET is created and therefore it is also registered in the subscription by default.
-
Created a "Standard" Azure Storage account.
-
Note: NSG flow log needs it to write data.
-
Created a new "Log Analytics Workspace".
-
Accessed Network Watcher and created a "NSG flow log" for "NSG1":
Resource: NSG1; Storage Account: "The one created earlier"; Retention: "2"; Flow Logs Version: 1;
Traffic Analytics: "Enabled"; Traffic Analytics processing interval: "Every 10 mins"; Log Analytics Workspace: "The one created earlier".
-
Note: Version 1 logs ingress and egress IP traffic flows for both allowed and denied traffic.
-
Note: Traffic Analytics provides rich analytics and visualization derived from flow logs.
-
Accessed Network Watcher and created a "NSG flow log" for "NSG-Hub".
-
Note: Configured with the same information as as "NSG1" but with the different Resource.
-
Accessed the "NSG flow logs" in Network Watcher.
-
Clicked on the "Storage Account" connected to both.
-
Went to "Containers" and accessed the "networksecuritygroupflowevent" container.
-
Navigated through the hierarchy until the "PT1H.json" file is found.
-
Note (Naming convention):
https://{storageAccountName}.blob.core.windows.net /
insights-logs-networksecuritygroupflowevent /
resourceId= / SUBSCRIPTIONS / {SubscriptionID} /
RESOURCEGROUPS / {ResourceGroupName} /
PROVIDERS / MICROSOFT.NETWORK /
NETWORKSECURITYGROUPS / {NSGName} /
y={Year} / m={Month} / d={Day} / h={Hour} / m={Minute} /
macAddress={MACAddress} /
PT1H.json
-
Downloaded the file and verified the "flow log" in it.
-
Note: The MAC addresses shown are VM NICs.
-
Example of a flowTuples information:
1542110377: The time stamp of when the flow occurred, in UNIX EPOCH format.
Note: This converts to May 1, 2018 at 2:59:05 PM GMT.
10.0.0.4: The source IP address that the flow originated from.
13.67.143.118: The destination IP address that the flow was destined to.
44931: The source port that the flow originated from.
443: The destination port that the flow was destined to.
Note: If the port matches a rule then it will show as the one that processed it.
T: Whether the protocol of the flow was TCP (T) or UDP (U).
O: Whether the traffic was inbound (I) or outbound (O).
A: Whether the traffic was allowed (A) or denied (D).
C: Captures the state of the flow.
Note: Possible states are:
B - When a flow is created (Statistics aren't provided).
C - Continuing for an ongoing flow (Statistics are provided at 5-minute intervals).
E - When a flow is terminated (Statistics are provided).
30 Packets sent: The total number of TCP or UDP packets sent from source to destination since last update (Or vice-versa).
16978 Bytes sent: The total number of TCP or UDP packet bytes sent from source to destination since last update (Or vice-versa).
Note: Packet bytes include the packet header and payload.
-
Created a subnet for the Firewall in "vnet-hub" (10.0.251.0/24).
-
Note: Azure Firewall requires a dedicated subnet called "AzureFirewallSubnet".
-
Accessed "Firewalls" in the search box and created one:
Resource group: "The same as the virtual network";
Firewall SKU: "Standard"; Firewall SKU: "Premium";
Virtual Network: "Vnet-Hub"; Public IP: "A new one with Standard SKU".
- Created an application rule in the Firewall in "Application rule collection" (Layer 7):
- Note: that allows outbound access to "www.microsoft.com".
Priority: "200"; Action: "Allow"; Target FQDN source: 10.1.2.0/24;
Protocol:Port: "http, https"; Target FQDN: "www.microsoft.com".
- Created a route table in the same region as the Firewall.
- Created a custom route:
Destination type: "IP Addresses"; Destination IP addresses: "0.0.0.0/0";
Next hop type: "Virtual appliance"; Next hop address: "The Firewalls private IP address".
- Associated the custom route to the spoke "Vnet1" vNET & subnet "Vnet1-Subnet2".
- Accessed the "Mgmt" VM through the "Serial Console" and verified that "curl www.microsoft.com" was working.
- Did "curl www.google.com" and it didnt work, giving a firewall error.
- Note: Verified that the vNETs are still peered to each other and that "Vnet1" isnt using "Remote GW".
- Accessed the Firewall and added a "NAT rule collection" to allow SSH thorugh the Firewall to the "Mgmt" VM:
Name: "InboundNAT"; Priority: "200";
Rules:Name: "NatRule1"; Rules:Protocol: "TCP";
Rules:Source Addresses: *; Rules:Destination Addresses: "Firewalls public IP";
Rules:Destination ports: "8022"; Translated Address: "Mgmt VMs private IP"; Rules:Translated port: "22".
- Verified that SSH was possible with the Firewalls public IP and port "8022".
- Deleted the previous "vNET2" and everything in it.
- Created "vNET2" again with Azure CLI (Bash Shell).
Variables:
ResourceGroup=Virtual_Network
VnetName=vnet2
VnetPrefix=10.2.0.0/16
SubnetName=vnet2-subnet1
SubnetPrefix=10.2.1.0/24
Location=westeurope
Command:
az network vnet create \
-g $ResourceGroup \
-n $VnetName \
--address-prefix $VnetPrefix \
--subnet-name $SubnetName \
--subnet-prefix $SubnetPrefix \
-l $Location
- Verified that "vNET2" was created:
az network vnet list -o table
- Peered "vNET2" with the "Hub" vNET:
Variables:
ResourceGroup=Virtual_Network
PeeringName=peer-vnet2-vnet-hub
VnetName=vnet2
RemoteVnet=vnet-hub
Command:
az network vnet peering create \
--name $PeeringName \
--remote-vnet $RemoteVnet \
--resource-group $ResourceGroup \
--vnet-name $VnetName \
--allow-forwarded-traffic \
--allow-vnet-access
- Peered the "Hub" vNET with "vNET2":
Variables:
ResourceGroup=Virtual_Network
PeeringName=peer-vnethub-to-vnet2
VnetName=vnet-hub
RemoteVnet=vNET2
Command:
az network vnet peering create \
--name $PeeringName \
--remote-vnet $RemoteVnet \
--resource-group $ResourceGroup \
--vnet-name $VnetName \
--allow-forwarded-traffic \
--allow-vnet-access
- Made "Allow Forwarded traffic" enabled for "vNET1" peering:
Variables:
ResourceGroup=Virtual_Network
PeeringName=vnet1-to-hub
VnetName=vnet1
Command:
az network vnet peering update \
-n $PeeringName \
-g $ResourceGroup \
--vnet-name $VnetName \
--set allowForwardedTraffic=true
Variables:
PeeringName=hub-to-vnet1
VnetName=vnet-hub
Command:
az network vnet peering update \
-n $PeeringName \
-g $ResourceGroup \
--vnet-name $VnetName \
--set allowForwardedTraffic=true
- Verified peering status between "vNET2" & the "Hub" vnet:
Variables:
VnetName=vnet1
ResourceGroup=Virtual_Network
Command:
az network vnet peering list \
-g $ResourceGroup \
--vnet-name $VnetName \
-o table
Variables:
VnetName=vnet2
ResourceGroup=Virtual_Network
Command:
az network vnet peering list \
-g $ResourceGroup \
--vnet-name $VnetName \
-o table
- Added a NSG to "vNET2".
Variables:
Nsg=nsg-hub
SubnetName=vnet2-subnet1
VnetName=vnet2
ResourceGroup=Virtual_Network
Command:
az network vnet subnet update \
-g $ResourceGroup \
-n $SubnetName \
--vnet-name $VnetName \
--network-security-group $Nsg
- Added a VM to "vNET2".
Variables:
ResourceGroup=Virtual_Network
VmName=vnet2-vm1
SubnetName=vnet2-subnet1
VnetName=vnet2
AdminUser=azureuser
AdminPassword=Azure123456!
Command:
az vm create \
--resource-group $ResourceGroup \
--name $VmName \
--image UbuntuLTS \
--vnet-name $VnetName \
--subnet $SubnetName \
--admin-username $AdminUser \
--admin-password $AdminPassword \
--nsg ""
-
Associated the route table from "vNET1-subnet1" with "vNET2-subnet1".
-
Note: This will allow both of them to have a default route to the Firewall.
-
Added a "Network Rule Collection" to the firewall to allow ICMP traffic between the vNETs:
Name: "Allow-ICMP"; Priority: "200"; Action: "Allow";
IP Addresses:Name: "Allow-ICMP"; Protocol: "ICMP"; Source Addresses: "10.0.0.0/8";
Destination addresses: "10.0.0.0/8"; Destination Ports: "*".
- Accessed the "Mgmt" VM and pinged the new VM on "vNET2".
- Pinged successfuly between them.
-
Created a "standard" "LRS" storage account.
-
Note: Left the rest as default.
-
Created a "Hub" vNET for the Private Endpoint to reside in (10.0.0.0/16) & a subnet for it (10.0.1.0/24).
-
Created a Private Endpoint:
Name: "pe-sa1"; Network Interface Name: "pe-sa1-nic";
Connection method: "Connect to an Azure resource in my directory"; Resource type: "Microsoft.Storage/storageAccounts"; Resource: "The name of the storage account"; Target sub-resource: "blob";
Virtual network: "The Hub vNET"; Subnet: "The Hub Subnet";
Integrate with private DNS zone: "Yes"; Resource group: "Our resource group";
-
Accessed the Private Endpoint and verified that it had a NIC associated to it in the "DNS configuration".
-
Note: I also verified that the private IP address is associated to the FQDN of the storage account.
-
Accessed the Private DNS zone & verified that the "Hub" vNET was linked with the Private DNS Zone.
-
Created a VM in the same subnet without a "Public IP" & accessed it through the "Serial Console".
-
Verified that the Private Endpoints IP address appeared after doing an "nslookup" with the Storage Accounts FQDN.
-
Note: This shows that the VM was forced to go to the Private Endpoint to reach the Storage Account.
-
Verified that by doing the same on my local computer that it went directly to the Storage Accounts public IP.


