<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Azure@Cybergavin]]></title><description><![CDATA[My notes on Microsoft Azure]]></description><link>https://azure.cybergav.in/</link><image><url>https://azure.cybergav.in/favicon.png</url><title>Azure@Cybergavin</title><link>https://azure.cybergav.in/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Thu, 12 Oct 2023 05:12:39 GMT</lastBuildDate><atom:link href="https://azure.cybergav.in/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Azure Cross-Region Network Connectivity]]></title><description><![CDATA[Implementation and performance of different options for Azure cross-region connectivity for hub-spoke topologies.]]></description><link>https://azure.cybergav.in/azure-cross-region-network-testing/</link><guid isPermaLink="false">62f02c01da26680001b7a8cc</guid><category><![CDATA[azure cross-region]]></category><category><![CDATA[azure inter-region]]></category><category><![CDATA[azure global vnet peering]]></category><category><![CDATA[azure hub-to-hub global vnet peering]]></category><category><![CDATA[azure spoke-to-spoke global vnet peering]]></category><category><![CDATA[global vnet peering between hubs in different regions]]></category><category><![CDATA[cross-region azure hub peering]]></category><category><![CDATA[inter-hub connectivity]]></category><dc:creator><![CDATA[Cybergavin]]></dc:creator><pubDate>Sun, 21 Aug 2022 04:00:26 GMT</pubDate><content:encoded><![CDATA[<p>This article describes my observations on network throughput<strong> </strong>and latency for <em>network traffic between spokes belonging to different hub-spoke deployments in different Azure regions, via different implementation options.</em></p><p><em>Cross-region connectivity</em> is typically required when hosting applications in <em>active-active</em> mode across multiple regions for <em>high availability</em> and resilience to regional failures. &#xA0;A couple of use-cases which I wanted to address are:</p><ul><li>Database replication traffic (e.g. Azure SQLMI replication for failover groups)</li><li>Application traffic from one region (webapp) to primary database in another region.</li></ul><p>Given below are some options (using the hub-spoke deployment) for enabling cross-region connectivity between 2 Azure Regions for the above use-cases (workloads hosted in spoke VNets). In these options, I&apos;ve used VMs as source and destination Azure resources in the spoke VNets, as well as VMs (IP forwarding enabled) to simulate routers/NVAs in the hub VNets. In the real world, these hub VMs would be replaced by either Azure Firewall instances (expensive!) or 3rd-party NVAs (PAN-OS, Fortinet, etc.).</p><p><strong><u>NOTE:</u></strong> For completeness, I&apos;ve included route tables with User-Defined Routes (UDRs) for all options with the assumption that any traffic from on-premises to spoke VNets and vice versa must be steered through the hub routers/NVAs.</p><h3 id="option-1-expressroute-gateway">OPTION 1 : ExpressRoute Gateway</h3><p> </p><p><u>Pre-requisites:</u></p><ul><li>ExpressRoute is used for connectivity between on-premises and Azure</li><li>The Hub VNets in both Azure regions are connected to the same ExpressRoute circuit<em>.</em></li></ul><p><u>Implementation:</u></p><p>If you meet the pre-requisites, then there&apos;s nothing further to do. Since both hub VNets are connected to the same ExpressRoute circuit, they&apos;re part of the <strong>same routing domain </strong>and so the spoke VMs can communicate with each other via their locally-peered Hubs and ExpressRoute gateways as shown in the image below, unless you&apos;re blocking traffic in the hub NVAs.</p><p></p><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/Azure-Cross-Region-Connectivity-ER-1.png" class="kg-image" alt loading="lazy" width="2000" height="1552" srcset="https://azure.cybergav.in/content/images/size/w600/2022/08/Azure-Cross-Region-Connectivity-ER-1.png 600w, https://azure.cybergav.in/content/images/size/w1000/2022/08/Azure-Cross-Region-Connectivity-ER-1.png 1000w, https://azure.cybergav.in/content/images/size/w1600/2022/08/Azure-Cross-Region-Connectivity-ER-1.png 1600w, https://azure.cybergav.in/content/images/size/w2400/2022/08/Azure-Cross-Region-Connectivity-ER-1.png 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/Azure-Cross-Region-Connectivity-ER-PC.png" class="kg-image" alt loading="lazy" width="563" height="145"></figure><hr><h3 id="option-2-hub-to-hub-global-vnet-peering">OPTION 2 : Hub-to-Hub Global VNet peering</h3><p></p><p><u>Pre-requisites:</u></p><ul><li>Global VNet peering between the hub VNets</li></ul><p><u>Implementation:</u></p><p>With Global VNet peering the hub VNets, you can steer traffic between your spoke VNets via the Hub-to-Hub peering with UDRs as shown in the image below. </p><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/Azure-Cross-Region-Connectivity-HH-1.png" class="kg-image" alt loading="lazy" width="2000" height="1546" srcset="https://azure.cybergav.in/content/images/size/w600/2022/08/Azure-Cross-Region-Connectivity-HH-1.png 600w, https://azure.cybergav.in/content/images/size/w1000/2022/08/Azure-Cross-Region-Connectivity-HH-1.png 1000w, https://azure.cybergav.in/content/images/size/w1600/2022/08/Azure-Cross-Region-Connectivity-HH-1.png 1600w, https://azure.cybergav.in/content/images/size/w2400/2022/08/Azure-Cross-Region-Connectivity-HH-1.png 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/Azure-Cross-Region-Connectivity-hub2hub-PC.png" class="kg-image" alt loading="lazy" width="561" height="263"></figure><hr><h3 id="option-3-spoke-to-spoke-global-vnet-peering">OPTION 3 : Spoke-to-Spoke Global VNet peering</h3><p></p><p><u>Pre-requisites:</u></p><ul><li>Global VNet peering between the spoke VNets</li></ul><p><u>Implementation:</u></p><p>With Global VNet peering the spoke VNets, traffic will be automatically steered between your spoke VNets via the Spoke-to-Spoke peering with the <strong>default routes</strong> (no UDRs) as shown in the image below.</p><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/Azure-Cross-Region-Connectivity-SS-1.png" class="kg-image" alt loading="lazy" width="2000" height="1542" srcset="https://azure.cybergav.in/content/images/size/w600/2022/08/Azure-Cross-Region-Connectivity-SS-1.png 600w, https://azure.cybergav.in/content/images/size/w1000/2022/08/Azure-Cross-Region-Connectivity-SS-1.png 1000w, https://azure.cybergav.in/content/images/size/w1600/2022/08/Azure-Cross-Region-Connectivity-SS-1.png 1600w, https://azure.cybergav.in/content/images/size/w2400/2022/08/Azure-Cross-Region-Connectivity-SS-1.png 2400w" sizes="(min-width: 720px) 720px"></figure><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/Azure-Cross-Region-Connectivity-spoke2spoke-PC-1.png" class="kg-image" alt loading="lazy" width="564" height="167"></figure><hr><h3 id="network-performance-testing">Network Performance Testing</h3><p></p><p>I used <strong>qperf </strong>and <strong>tcpping </strong>to test <strong>throughput </strong>and <strong>RTT </strong>(round-trip time) for connectivity between VMs in both spokes (10.10.1.5 to 10.20.1.5) for all 3 options. Given below are configuration specifications that have a bearing on the test results (throughput limitations):</p><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/Azure-Cross-Region-Connectivity-Specs.png" class="kg-image" alt loading="lazy" width="512" height="166"></figure><p>An additional connectivity test for throughput was performed for both VMs in the same spoke subnet only to verify the network bandwidth allocation for the VM SKU DS3_v2 (verified!) and the results are depicted in the image below.</p><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/azure-xnet-qperf.PNG" class="kg-image" alt loading="lazy" width="575" height="333"></figure><p>The throughput for the ExpressRoute path in the above image is limited by the bandwidth allocation for the ExpressRoute circuit (500 Mb/s). Increasing the bandwidth of the ExpressRoute circuit as well as changing the SKU of the ExpressRoute gateway to cater to higher throughput will likely be more expensive than any of the Global VNet peering options.</p><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2022/08/azure-xnet-tcpping.PNG" class="kg-image" alt loading="lazy" width="484" height="289"></figure><p></p><p>Irrespective of the bandwidth allocated to the ExpressRoute circuit or SKU selected for the ExpressRoute gateway, traffic via ExpressRoute (OPTION 1) will have the highest latency and so this option will not be appropriate for latency-sensitive traffic.</p><hr><p>Based on the above observations, I would address the use-cases as below:</p><ul><li>Use <strong>spoke-to-spoke</strong> Global VNet peering (OPTION 3) for Azure SQLMI replication traffic. This is also a recommendation from Microsoft. A recommended way to do this is to allocate a separate VNet (spoke) for SQLMI in each region. Further, there is no benefit in inspecting this traffic.</li><li>Use <strong>hub-to-hub</strong> Global VNet peering (Option 2) for application-to-database traffic so that you may inspect/police the traffic as well as have favorable latencies and throughput. </li></ul><hr><p><em>You may provide feedback on this article by clicking &quot;Show comments&quot; below and voting or adding comments.</em></p>]]></content:encoded></item><item><title><![CDATA[Azure Cache for Redis - Decision Tree]]></title><description><![CDATA[A basic decision tree that may help you choose an appropriate service tier for the Azure Cache for Redis service]]></description><link>https://azure.cybergav.in/azure-cache-for-redis/</link><guid isPermaLink="false">6276d3b9e5b99c0001dc985b</guid><category><![CDATA[azure cache for redis]]></category><category><![CDATA[azure cache for redis decision tree]]></category><category><![CDATA[azure redis]]></category><category><![CDATA[azure cache]]></category><category><![CDATA[azure decision tree]]></category><category><![CDATA[azure redis decision tree]]></category><dc:creator><![CDATA[Cybergavin]]></dc:creator><pubDate>Sat, 07 May 2022 20:39:06 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><ul>
<li>Redis is a popular in-memory key-value datastore.</li>
<li>Azure Cache for Redis is a <strong>managed service</strong> that offers both Redis open-source (<strong>OSS Redis</strong>) and the commercial product from Redis Inc. (<strong>Redis Enterprise</strong>).</li>
<li>For the latest Azure Cache for Redis <strong>Service Tiers</strong>, <strong>Features</strong> and <strong>Pricing</strong>, refer:
<ul>
<li><a href="https://docs.microsoft.com/en-us/azure/azure-cache-for-redis/">https://docs.microsoft.com/en-us/azure/azure-cache-for-redis/</a></li>
<li><a href="https://azure.microsoft.com/en-us/pricing/details/cache/">https://azure.microsoft.com/en-us/pricing/details/cache/</a></li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><p></p><h2 id="decision-tree">Decision Tree</h2><p></p><p>Here&apos;s a basic decision tree that may help you choose a service tier for the Azure Cache for Redis service:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://azure.cybergav.in/content/images/2022/05/image-1.png" class="kg-image" alt loading="lazy" width="751" height="720" srcset="https://azure.cybergav.in/content/images/size/w600/2022/05/image-1.png 600w, https://azure.cybergav.in/content/images/2022/05/image-1.png 751w" sizes="(min-width: 720px) 720px"><figcaption>Azure Cache for Redis Decision Tree - Cybergavin - 07-May-2022</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Troubleshooting WAF policy violations for Azure Application Gateway]]></title><description><![CDATA[A quick and easy method to troubleshoot Azure Application Gateway WAF policy violations.]]></description><link>https://azure.cybergav.in/troubleshooting-waf-policy-violations-for-azure-application-gateway/</link><guid isPermaLink="false">61d7cfb0a9fdd700015b02b2</guid><category><![CDATA[Azure WAF]]></category><category><![CDATA[troubleshoot Azure WAF]]></category><category><![CDATA[troubleshoot azure application gateway WAF]]></category><category><![CDATA[Azure application gateway WAF triage]]></category><category><![CDATA[check Azure WAF logs]]></category><dc:creator><![CDATA[Cybergavin]]></dc:creator><pubDate>Fri, 07 Jan 2022 06:27:15 GMT</pubDate><content:encoded><![CDATA[<ul><li>The Azure Application Gateway is a <strong>regional </strong>HTTP Load Balancing service that incorporates a Web Application Firewall (WAF) to protect web applications against vulnerabilities and exploits. The protection policies that Azure WAF uses are based on <a href="https://coreruleset.org/">OWASP core rule sets</a>&#xFEFF;.</li><li>Typically, web applications exposed to the public (Internet) and deployed in a single region, will be deployed behind an Azure Application Gateway with WAF. For a multi-region web application deployment, you may use WAF policies along with the Azure Front Door service (global HTTP load balancing).</li><li>For the Azure Application Gateway service, WAF policies may be applied globally (for all web applications or sites fronted by the Application Gateway) or to specific web applications or sites. Hence, the WAF policies may be tuned according to different web application requirements and scoped appropriately.</li><li>Given that the out-of-the-box WAF policies (based on OWASP CRS) are <em>very strict</em>, it is normal to encounter WAF policy violations while testing web applications. So, application teams will need to be able to access the Application Gateway&apos;s WAF logs to determine the cause of WAF policy violations. It&apos;d help if web application developers are able to easily troubleshoot WAF policy violations when testing their web applications. Azure workbooks to the rescue!</li><li><strong>Azure workbooks</strong> are<u> interactive visualizations</u> of data within the Azure Portal, using data gathered from one or more sources (metrics, logs, etc.).</li></ul><h3 id="application-gateway-waf-triage-workbook">Application Gateway WAF Triage workbook</h3><p>The <a href="https://github.com/Azure/Azure-Network-Security/tree/master/Azure%20WAF/Workbook%20-%20AppGw%20WAF%20Triage%20Workbook">Application Gateway WAF Triage </a>workbook is a handy workbook that will help users <em>drill down</em> to WAF policy violations that affect their web applications. This workbook is easily to deploy and use. Given below are some guidelines:</p><ul><li>Enable diagnostic settings for the Application Gateway and send logs to a Log Analytics workspace.</li><li>When deploying the Application Gateway WAF Triage workbook, link it to the Log Analytics workspace by entering the resource id of the Log Analytics workspace as the <em>Workbook Source Id</em> during deployment.</li></ul><!--kg-card-begin: markdown--><ul>
<li>For users who need to access this workbook for troubleshooting, assign the following roles:
<ul>
<li><strong>Log Analytics Reader</strong> to the Log Analytics workspace</li>
<li><strong>Reader</strong> to the workbook</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><p><u>NOTE:</u> With the above roles, users will have access to read WAF policy violations for <em>all</em> web applications behind the Application Gateway.</p>]]></content:encoded></item><item><title><![CDATA[How to view private networks advertised to Azure over ExpressRoute]]></title><description><![CDATA[Viewing routes for advertised on-premises networks on ExpressRoute circuits]]></description><link>https://azure.cybergav.in/how-to-view-private-networks-advertised-to-azure-over-expressroute/</link><guid isPermaLink="false">61998cdaa3c10f0001d451ee</guid><category><![CDATA[expressroute route table]]></category><category><![CDATA[on-premises advertised routes on azure]]></category><category><![CDATA[expressroute circuit route table]]></category><category><![CDATA[expressroute routes]]></category><category><![CDATA[on-premises routes on expressroute]]></category><dc:creator><![CDATA[Cybergavin]]></dc:creator><pubDate>Sun, 21 Nov 2021 00:36:46 GMT</pubDate><content:encoded><![CDATA[<p>If your on-premises datacenter is connected to Azure via ExpressRoute, you will be able to use <strong>Azure Private</strong> peering for connectivity to your private resources in your Azure VNets as well as <strong>Microsoft peering</strong> for connectivity to Azure public services.</p><p>When troubleshooting connectivity between on-premises and your Azure private resources, you&apos;d typically look at <em>network routes</em> and <em>firewall policies, </em>among other things. Given below are two ways to check if the relevant on-premises networks are visible on Azure (advertised via Azure Private peering) in its ExpressRoute circuit route table.</p><h2 id="azure-portal">Azure Portal</h2><p>Check the <strong>route table</strong> on the relevant <strong>ExpressRoute circuit</strong> circuit as shown in the screenshot below. You may also download the route table (as a csv) for both primary and secondary ExpressRoute circuit connections.</p><figure class="kg-card kg-image-card"><img src="https://azure.cybergav.in/content/images/2021/11/routetable-ec.PNG" class="kg-image" alt loading="lazy" width="1604" height="207" srcset="https://azure.cybergav.in/content/images/size/w600/2021/11/routetable-ec.PNG 600w, https://azure.cybergav.in/content/images/size/w1000/2021/11/routetable-ec.PNG 1000w, https://azure.cybergav.in/content/images/size/w1600/2021/11/routetable-ec.PNG 1600w, https://azure.cybergav.in/content/images/2021/11/routetable-ec.PNG 1604w" sizes="(min-width: 720px) 720px"></figure><p></p><h2 id="azure-cli">Azure CLI</h2><p>Use the following command structure to view the route table JSON for both primary and secondary ExpressRoute circuit connections.</p><pre><code>az network express-route list-route-tables -g &lt;resource-group-name&gt; -n &lt;expressroute-circuit-name&gt; --path &lt;primary or secondary&gt; --peering-name AzurePrivatePeering</code></pre><p>For example, to view the route table JSON for a primary connection on ExpressRoute circuit cg-<em>erc </em>in resource group <em>cg-rg</em>, use the following command:</p><pre><code>az network express-route list-route-tables -g cg-rg -n cg-erc --path primary --peering-name AzurePrivatePeering</code></pre><p>In order to just obtain a convenient list of networks in the route table, you may add the additional <em>--query</em> switch as shown below:</p><pre><code>az network express-route list-route-tables -g cg-rg -n cg-erc --path primary --peering-name AzurePrivatePeering --query &apos;value[].[network]&apos; -o tsv</code></pre>]]></content:encoded></item><item><title><![CDATA[Using custom DNS as Hybrid DNS for Azure and on-premises]]></title><description><![CDATA[Use a custom DNS solution as a Hybrid DNS to allow workloads on Azure and on-premises to resolve DNS records in both Azure private DNS zones and on-premises private DNS zones.]]></description><link>https://azure.cybergav.in/azure-hybrid-dns/</link><guid isPermaLink="false">6175fc4ca3c10f0001d450b6</guid><category><![CDATA[azure hybrid dns]]></category><category><![CDATA[azure on-premises DNS integration]]></category><category><![CDATA[azure on-premises dns]]></category><category><![CDATA[azure dns]]></category><category><![CDATA[custom dns for azure]]></category><category><![CDATA[custom dns azure on-premises]]></category><category><![CDATA[azure dns private resolver]]></category><dc:creator><![CDATA[Cybergavin]]></dc:creator><pubDate>Mon, 25 Oct 2021 02:33:46 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><ul>
<li><a href="https://azure.microsoft.com/en-us/services/dns/#overview">Azure DNS</a> offers both <strong>Public DNS</strong> and <strong>Private DNS</strong> services.</li>
<li>Azure Private DNS zones provide a secure DNS service <strong>only</strong> for your Azure virtual networks. The records in Azure private DNS zones cannot be resolved via DNS lookups from outside Azure virtual networks.</li>
<li>To resolve the records of an Azure private DNS zone from your virtual network, you must <strong>link</strong> the virtual network with the zone. Such a link is called a <strong>Virtual Network Link</strong></li>
<li>Azure&apos;s default DNS service for Virtual Networks is provided via <strong>168.63.129.16</strong>. All DNS lookups to this IP address must be <strong>recursive</strong>.</li>
</ul>
<h2 id="why-custom-dns">Why Custom DNS?</h2>
<ul>
<li>If your infrastructure is entirely on Azure, you may use the Azure Private DNS zones as your DNS service for private workloads deployed in your Azure virtual networks and avoid the deployment of any custom DNS solution.</li>
<li>If your infrastructure is deployed across <strong>both on-premises and Azure</strong>, then you may leverage your on-premises custom DNS to resolve records for both on-premises private domains and Azure private DNS zones.</li>
</ul>
<p><strong><mark>UPDATE (17th MAY 2022):</mark></strong> Microsoft announced the preview of a new service called <strong><a href="https://azure.microsoft.com/en-us/blog/announcing-azure-dns-private-resolver-now-in-preview/">Azure DNS Private Resolver</a></strong> which removes the need of the custom DNS solution explained in the remainder of this article. This service is currently in public preview only in certain regions, but once it becomes GA globally, it will help customers eliminate the cost and administration of custom DNS solutions.</p>
<h2 id="primary-use-case-for-azure-private-dns-zone">Primary use-case for Azure private DNS zone</h2>
<p>If you use private endpoints for Azure PaaS services, then your PaaS service private endpoints will use private DNS zones for the DNS A records associated with the private endpoints. <em>For example</em>, if you you deploy an Azure SQL PaaS service with endpoint <code>azsql.database.windows.net</code> and create a private endpoint for this service, Azure will create a DNS A record for <code>azsql.privatelink.database.windows.net</code> (associated with a private IP from the relevant virtual network) in the privatelink.database.windows.net private DNS zone.</p>
<h2 id="using-custom-dns-with-azure-private-dns-zones">Using custom DNS with Azure private DNS zones</h2>
<p>Even if you extend your distributed on-premises DNS solution (<em>e.g. AD DNS, EfficientIP, Infoblox, Bluecat, etc.</em>) to Azure by deploying instances within your Azure virtual networks, lookups from your on-premises clients for records in Azure private DNS zones will still be unresolvable as the DNS queries will originate from <em>outside</em> your Azure virtual networks. For such lookups to work, you must do the following:</p>
<ul>
<li>Use conditional forwarders on your custom DNS for <a href="https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-dns">Azure PaaS public DNS zones</a> (e.g. <code>database.windows.net</code>) to send traffic to a <em>DNS forwarding</em> instance within your Azure virtual network. Azure creates a CNAME in the public DNS zone (e.g. <code>database.windows.net</code>) that redirects resolution to the private DNS zone (e.g. <code>privatelink.database.windows.net</code>).</li>
<li>Deploy a solution to forward DNS lookups from your custom DNS to Azure&apos;s DNS service (168.63.129.16). This solution may be another DNS server (not part of your distributed custom DNS platform), <a href="https://docs.microsoft.com/en-us/azure/firewall/dns-settings#dns-proxy">DNS proxy on Azure Firewall</a> or a Custom Firewall NAT policy that forwards traffic destined to a specific IP, to the Azure DNS service (168.63.129.16). If you already have firewalls in Azure, then using NAT policies with the firewall is a good solution. <em>For example</em>, you may choose a specific IP (not attached to anything) in your virtual network (say 10.10.0.100) for the conditional forwarder for database.windows.net on your custom DNS to forward lookups and configure a NAT policy on your firewalls in Azure to send this traffic to Azure&apos;s DNS. Of course, the DNS traffic from your conditional forwarder must pass through the firewall to reach 10.10.0.100 for this to work.</li>
</ul>
<p>Putting all the above together, the image below depicts how 2 on-premises custom DNS solutions (1 PROD and 1 DEV) may be used along with 2 Azure tenants (1 PROD and 1 DEV) with Azure Private DNS zones in the PROD Azure tenant. With this deployment, both Azure and on-premises workloads can resolve records in both Azure and on-premises private DNS zones, thereby facilitating communication between workloads on Azure and on-premises and providing a seamless DNS service.</p>
<p><img src="https://azure.cybergav.in/content/images/2021/10/azure-hybrid-dns.png" alt="azure-hybrid-dns" loading="lazy"></p>
<h2 id="references">References</h2>
<ol>
<li>
<p><a href="https://docs.microsoft.com/en-us/azure/dns/private-dns-overview">Azure Private DNS</a></p>
</li>
<li>
<p><a href="https://github.com/dmauser/PrivateLink/tree/master/DNS-Integration-Scenarios">Private Endpoint DNS Integration Scenarios</a></p>
</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Azure ExpressRoute Disaster Recovery]]></title><description><![CDATA[An ExpressRoute DR design for multiple on-premise sites, Azure regions and ExpressRoute circuits.]]></description><link>https://azure.cybergav.in/azure-expressroute-disaster-recovery-private-peering/</link><guid isPermaLink="false">614ca95ca3c10f0001d45071</guid><category><![CDATA[azure expressroute]]></category><category><![CDATA[aure expressroute disaster recovery]]></category><category><![CDATA[azure expressroute circuit disaster recovery]]></category><category><![CDATA[expressroute disaster recovery]]></category><category><![CDATA[expressroute DR]]></category><category><![CDATA[azure expressroute private peering]]></category><category><![CDATA[azure expressroute microsoft peering]]></category><dc:creator><![CDATA[Cybergavin]]></dc:creator><pubDate>Thu, 23 Sep 2021 16:24:47 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Microsoft offers the Azure ExpressRoute service for <strong>private connections</strong> between your on-premises datacenters and Azure regions.</p>
<p>ExpressRoute connectivity is enabled via <strong>ExpressRoute circuits</strong>, which are logical constructs representing connections between your on-premises and Microsoft edge locations via one or more communications provider.</p>
<p>Each ExpressRoute circuit offers <strong>peerings</strong>  for Public services and Private Services, with each peering offering primary and secondary connections:</p>
<ul>
<li><strong>Azure Private peering</strong>: Primary and Secondary connections for Azure <strong>private</strong> services in your VNets.</li>
<li><strong>Microsoft peering</strong>: Primary and Secondary connections for Azure <strong>public</strong> services (e.g. Storage, Dynamics 365)</li>
</ul>
<h2 id="azure-private-peering">Azure Private Peering</h2>
<p>If you have multiple on-premises datacenters and use multiple Azure regions with multiple ExpressRoute circuits, then you may design for Disaster Recovery for your on-premises-to-Azure <strong>private</strong> traffic as per the topology shown below. This topology is listed as <a href="https://docs.microsoft.com/en-ca/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering">Scenario 1</a> in Microsoft&apos;s documentation. This scenario is appropriate when your on-premises datacenters much less apart than the Azure paired regions which you use. For example, in the topology below, the on-premises datacenters are less than 50 km part (not great for a regional disaster!) whereas the Azure regions are at least 300 miles apart.</p>
<p>Note that there are 2 levels of redundancy:</p>
<ul>
<li>Within an ExpressRoute circuit (primary and secondary connections)</li>
<li>Between ExpressRoute circuits (traffic may be steered via the running ExpressRoute circuit should the other ExpressRoute circuit fail)</li>
</ul>
<h3 id="multiple-traffic-paths-for-azure-private-services">Multiple Traffic Paths for Azure Private Services</h3>
<p>Each ExpressRoute circuit may be connected to your Azure VNets via a <strong>virtual network gateway connection</strong> between the ExpressRoute circuit and the Virtual Network Gateway in your VNet (within the GatewaySubnet).</p>
<p>So, as per the topology diagram below, configuring virtual network gateway connections from the virtual network gateways in both Azure regions to both ExpressRoute circuits provides <strong>mesh connectivity</strong> between your on-premises sites and the Azure regions.</p>
<p>For traffic from <em>Azure to on-premises</em>,  a <strong>routing weight</strong> must be associated with each virtual network gateway connection to set up a connection preference. Connections with higher routing weights are preferred over those with lower routing weights.</p>
<p>For traffic from <em>on-premises to Azure</em>, <strong>AS_Path prepend</strong> may be used along with Azure private network prefix lists to prefer one ExpressRoute circuit over the other.</p>
<p><img src="https://azure.cybergav.in/content/images/2021/09/azure-erc-dr-01.png" alt="Azure private peering DR" loading="lazy"></p>
<hr>
<h2 id="microsoft-peering">Microsoft Peering</h2>
<p>If you have multiple on-premises datacenters and use multiple Azure regions with multiple ExpressRoute circuits, then you may design for Disaster Recovery for your on-premises-to-Azure <strong>publice service</strong> traffic as per the topology shown below. This scenario is appropriate when your on-premises datacenters much less apart than the Azure paired regions which you use. For example, in the topology below, the on-premises datacenters are less than 50 km part (not great for a regional disaster!) whereas the Azure regions are at least 300 miles apart.</p>
<p>Note that there are 2 levels of redundancy:</p>
<ul>
<li>Within an ExpressRoute circuit (primary and secondary connections)</li>
<li>Between ExpressRoute circuits (traffic may be steered via the running ExpressRoute circuit should the other ExpressRoute circuit fail)</li>
</ul>
<h3 id="multiple-traffic-paths-for-azure-public-services">Multiple Traffic Paths for Azure Public Services</h3>
<p>Each Azure Region will have a <strong>Route Filter</strong> that allows the <strong>BGP communities</strong> of specific Azure Public services to be advertised over associated ExpressRoute circuits. By configuring each route filter in each region to allow the BGP communities for Azure public services from both regions to be advertised over the associated expressroute circuits, we can ensure that the Azure public services in both regions may be accessed from on-premises via each expressroute circuit. For example, the image below shows that the <em>Azure Storage</em> public service for both <em>Canada Central</em> and <em>Canada East</em> regions has its BGP communities allowed and this route filter is a associated with a specific expressroute circuit.</p>
<p><img src="https://azure.cybergav.in/content/images/2021/10/azure-routefilter.PNG" alt="azure-routefilter" loading="lazy"></p>
<p>Configuring route filters as explained above provides <strong>mesh connectivity</strong> between your on-premises sites and the Azure regions for accessing Azure public services over ExpressRoute. The image below shows the topology.</p>
<p><img src="https://azure.cybergav.in/content/images/2021/10/azure-erc-public-peering.png" alt="azure-erc-public-peering" loading="lazy"></p>
<p>For traffic from <em>on-premises to Azure</em>, <strong>AS_Path prepend</strong> may be used along with Azure public service BGP community lists to prefer one ExpressRoute circuit over the other.</p>
<h2 id="references">References</h2>
<ol>
<li>
<p><a href="https://docs.microsoft.com/en-us/azure/best-practices-availability-paired-regions">BCDR - Azure Paired Regions</a></p>
</li>
<li>
<p><a href="https://docs.microsoft.com/en-ca/azure/expressroute/designing-for-disaster-recovery-with-expressroute-privatepeering">Designing for disaster recovery with ExpressRoute private peering</a></p>
</li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>