5. Configuration Commands
Note: This guide assumes you already have a Virtual Network with properly configured subnets. The subnet delegation commands are covered in other networking guides.
5.1 Create DNS Private Resolver
az dns-resolver create \
--name "dns-resolver-hub" \
--resource-group "rg-dns-resolver" \
--virtual-network "/subscriptions/{subscription-id}/resourceGroups/rg-dns-resolver/providers/Microsoft.Network/virtualNetworks/vnet-hub" \
--location "eastus" \
--tags Environment=Production Purpose=DNS-Resolution
DNS Private Resolver Configuration Parameters:
- --name: Unique name for the DNS resolver within the resource group
- --resource-group: Resource group where the resolver will be created
- --virtual-network: Full resource ID of the VNet where resolver will be deployed
- --location: Azure region (must match the VNet location)
- --tags: Optional tags for resource management and billing
Alternative Options:
- You can use resource names instead of full IDs if resources are in the same subscription
- Additional tags can be added for cost center, owner, or environment classification
Step 1: The DNS Private Resolver is the foundational service that will host your inbound and outbound endpoints. It must be created first as all other components depend on it. The resolver automatically inherits the VNet's location and cannot be moved after creation.
5.2 Create Inbound Endpoint
az dns-resolver inbound-endpoint create \
--dns-resolver-name "dns-resolver-hub" \
--name "inbound-endpoint-hub" \
--resource-group "rg-dns-resolver" \
--ip-configurations subnet="/subscriptions/{subscription-id}/resourceGroups/rg-dns-resolver/providers/Microsoft.Network/virtualNetworks/vnet-hub/subnets/subnet-dns-inbound" \
--location "eastus" \
--tags Purpose=InboundDNS
Inbound Endpoint Configuration Parameters:
- --dns-resolver-name: Name of the parent DNS resolver
- --name: Name for the inbound endpoint
- --ip-configurations: Subnet where the endpoint will be deployed (must be delegated to Microsoft.Network/dnsResolvers)
- --location: Must match the DNS resolver location
Alternative Options:
- Static IP: Add `private-ip-address="10.0.1.4"` to assign a specific IP
- Multiple IPs: You can configure multiple IP configurations for high availability
Step 2: The inbound endpoint receives DNS queries from external sources (on-premises networks). It requires a subnet that has been delegated to Microsoft.Network/dnsResolvers. The endpoint will automatically receive an IP address from the subnet range, which becomes the target for conditional forwarders configured on-premises.
5.3 Create Outbound Endpoint
az dns-resolver outbound-endpoint create \
--dns-resolver-name "dns-resolver-hub" \
--name "outbound-endpoint-hub" \
--resource-group "rg-dns-resolver" \
--subnet "/subscriptions/{subscription-id}/resourceGroups/rg-dns-resolver/providers/Microsoft.Network/virtualNetworks/vnet-hub/subnets/subnet-dns-outbound" \
--location "eastus" \
--tags Purpose=OutboundDNS
Outbound Endpoint Configuration Parameters:
- --dns-resolver-name: Name of the parent DNS resolver
- --name: Name for the outbound endpoint
- --subnet: Subnet for the outbound endpoint (must be delegated and different from inbound)
- --location: Must match the DNS resolver location
Alternative Options:
- The outbound endpoint automatically handles load balancing across multiple target DNS servers
- You can create multiple outbound endpoints for different forwarding scenarios
Step 3: The outbound endpoint sends DNS queries to external DNS servers based on forwarding rules. It requires its own dedicated subnet, separate from the inbound endpoint. This endpoint will be the source of DNS queries sent to on-premises DNS servers.
5.4 Create DNS Forwarding Ruleset
az dns-resolver forwarding-ruleset create \
--name "ruleset-onprem-forwarding" \
--resource-group "rg-dns-resolver" \
--outbound-endpoints "/subscriptions/{subscription-id}/resourceGroups/rg-dns-resolver/providers/Microsoft.Network/dnsResolvers/dns-resolver-hub/outboundEndpoints/outbound-endpoint-hub" \
--location "eastus" \
--tags Purpose=ForwardingRules Environment=Production
DNS Forwarding Ruleset Configuration Parameters:
- --name: Name for the forwarding ruleset
- --resource-group: Resource group for the ruleset
- --outbound-endpoints: Full resource ID of the outbound endpoint that will process the forwarding
- --location: Must match the DNS resolver location
Alternative Options:
- One ruleset can contain multiple forwarding rules for different domains
- Multiple outbound endpoints can be associated with a single ruleset for high availability
Step 4: The forwarding ruleset is a container that holds multiple forwarding rules. It's associated with one or more outbound endpoints and defines the overall forwarding behavior. The ruleset can be linked to multiple VNets to apply the same forwarding logic across your network.
5.5 Create Forwarding Rules
az dns-resolver forwarding-rule create \
--name "rule-corp-domain" \
--resource-group "rg-dns-resolver" \
--ruleset-name "ruleset-onprem-forwarding" \
--domain-name "corp.local." \
--forwarding-rule-state "Enabled" \
--target-dns-servers ip-address="192.168.1.10" port=53 \
--target-dns-servers ip-address="192.168.1.11" port=53
Forwarding Rule Configuration Parameters:
- --name: Name for the specific forwarding rule
- --ruleset-name: Name of the parent ruleset
- --domain-name: Domain to forward (must end with a dot for absolute domain)
- --forwarding-rule-state: "Enabled" or "Disabled"
- --target-dns-servers: DNS servers to forward queries to (supports multiple servers)
Alternative Options:
- Port: Default is 53, but can be changed for non-standard DNS servers
- Multiple Rules: Create separate rules for different domains (e.g., corp.local, dev.local)
- Wildcard Domains: Use parent domains to catch all subdomains
Step 5: Individual forwarding rules define specific domains and their target DNS servers. Each rule can have multiple target servers for redundancy. The domain name must be an absolute domain (ending with a dot) and can include wildcards. Rules are processed in order of specificity.
5.6 Additional Forwarding Rules (Examples)
az dns-resolver forwarding-rule create \
--name "rule-dev-domain" \
--resource-group "rg-dns-resolver" \
--ruleset-name "ruleset-onprem-forwarding" \
--domain-name "dev.corp.local." \
--forwarding-rule-state "Enabled" \
--target-dns-servers ip-address="192.168.2.10" port=53
az dns-resolver forwarding-rule create \
--name "rule-reverse-lookup" \
--resource-group "rg-dns-resolver" \
--ruleset-name "ruleset-onprem-forwarding" \
--domain-name "1.168.192.in-addr.arpa." \
--forwarding-rule-state "Enabled" \
--target-dns-servers ip-address="192.168.1.10" port=53
Additional Rule Examples:
- Subdomain Rules: More specific rules (dev.corp.local) take precedence over general rules (corp.local)
- Reverse Lookup Rules: Enable reverse DNS resolution for on-premises IP ranges
- Different DNS Servers: Different domains can forward to different DNS servers
5.7 Link Ruleset to Virtual Networks
az dns-resolver vnet-link create \
--name "link-hub-vnet" \
--resource-group "rg-dns-resolver" \
--ruleset-name "ruleset-onprem-forwarding" \
--virtual-network "/subscriptions/{subscription-id}/resourceGroups/rg-dns-resolver/providers/Microsoft.Network/virtualNetworks/vnet-hub"
az dns-resolver vnet-link create \
--name "link-spoke-vnet" \
--resource-group "rg-dns-resolver" \
--ruleset-name "ruleset-onprem-forwarding" \
--virtual-network "/subscriptions/{subscription-id}/resourceGroups/rg-spoke/providers/Microsoft.Network/virtualNetworks/vnet-spoke"
VNet Link Configuration Parameters:
- --name: Name for the VNet link
- --ruleset-name: Name of the ruleset to link
- --virtual-network: Full resource ID of the VNet to link
Alternative Options:
- One ruleset can be linked to multiple VNets
- Each VNet can only be linked to one ruleset at a time
- Links can be created across different resource groups and subscriptions
Step 6: VNet links apply the forwarding rules to specific virtual networks. Any VM in a linked VNet will use the outbound endpoint for DNS queries matching the forwarding rules. This enables you to apply the same DNS forwarding logic to multiple VNets without duplicating configuration.
5.8 Verification Commands
# Get the inbound endpoint IP address
az dns-resolver inbound-endpoint show \
--dns-resolver-name "dns-resolver-hub" \
--name "inbound-endpoint-hub" \
--resource-group "rg-dns-resolver" \
--query "ipConfigurations[0].privateIpAddress" \
--output tsv
# List all forwarding rules
az dns-resolver forwarding-rule list \
--resource-group "rg-dns-resolver" \
--ruleset-name "ruleset-onprem-forwarding" \
--output table
# Check VNet links
az dns-resolver vnet-link list \
--resource-group "rg-dns-resolver" \
--ruleset-name "ruleset-onprem-forwarding" \
--output table
Verification Commands Explanation:
- Inbound Endpoint IP: Use this IP address to configure conditional forwarders on-premises
- Forwarding Rules List: Verify all rules are created and enabled
- VNet Links: Confirm all target VNets are properly linked
5.9 Command Dependency Flow
graph TD
A[az dns-resolver create] --> B[az dns-resolver inbound-endpoint create]
A --> C[az dns-resolver outbound-endpoint create]
C --> D[az dns-resolver forwarding-ruleset create]
D --> E[az dns-resolver forwarding-rule create]
D --> F[az dns-resolver vnet-link create]
subgraph "Order of Execution"
O1[1st: DNS Resolver]
O2[2nd: Inbound Endpoint]
O3[3rd: Outbound Endpoint]
O4[4th: Forwarding Ruleset]
O5[5th: Forwarding Rules]
O6[6th: VNet Links]
end
subgraph "Verification Commands"
V1[az dns-resolver inbound-endpoint show]
V2[az dns-resolver forwarding-rule list]
V3[az dns-resolver vnet-link list]
end
A --> O1
B --> O2
C --> O3
D --> O4
E --> O5
F --> O6
style A fill:#e8f5e8
style B fill:#f3e5f5
style C fill:#fff3e0
style D fill:#e1f5fe
style E fill:#fce4ec
style F fill:#f3e5f5
Command Dependency Explanation:
The Azure CLI commands must be executed in a specific order due to resource dependencies:
- DNS Resolver: Foundation service that hosts all endpoints
- Inbound Endpoint: Depends on DNS Resolver, can be created in parallel with outbound
- Outbound Endpoint: Depends on DNS Resolver, required for forwarding ruleset
- Forwarding Ruleset: Depends on outbound endpoint being available
- Forwarding Rules: Depends on ruleset, multiple rules can be created in parallel
- VNet Links: Depends on ruleset, multiple links can be created in parallel