Wildcard and Naked CNAME records in Azure DNS

家住魔仙堡 提交于 2021-01-28 14:07:06

问题


I'm migrating all my DNS services to Azure DNS. Using Powershell I've managed to successfully create the CNAME record to get www.something.com to resolve to an Azure website-

$rs = New-AzureRmDnsRecordSet -Name "www" -RecordType "CNAME" -ZoneName "something.com" -ResourceGroupName "DNSRecords" -Ttl 60 -Overwrite -Force
Add-AzureRmDnsRecordConfig -RecordSet $rs -Cname "MySomethingAzureWebsite.azurewebsites.net"
Set-AzureRmDnsRecordSet -RecordSet $rs -Overwrite

But how to I create CNAME records for wildcard and naked addresses like

*.something.com or something.com

I'm assuming it's something (no pun intended) to do with

New-AzureRmDnsRecordSet -Name "www"

But through all the documentation and Internet examples I can't seem to find the right verbiage.


回答1:


The problem you're having is an issue with the rules of DNS, which forbid a CNAME record where another record exists. The naked address (or Apex) example.com already has two records (the SOA and NS) so a CNAME is not allowed.

If a CNAME RR is present at a node, no other data should be present; this ensures that the data for a canonical name and its aliases cannot be different. This rule also insures that a cached CNAME can be used without checking with an authoritative server for other RR types.

In order to create an Apex record, i.e. example.com you need to use an A record, which means it needs to point to the IP of your Azure website. Once you have that you can then create a CNAME from www to example.com. (this is the supported method - your IP Address for Azure websites is static)

the command you are looking for, would be something like

$rs = New-AzureRmDnsRecordSet -Name "@" -RecordType A `
       -ZoneName example.com -ResourceGroupName $RG `
       -Ttl $ttl -Force -Overwrite
Add-AzureRmDnsRecordConfig -RecordSet $rs -Ipv4Address $IPAddress
Set-AzureRmDnsRecordSet -RecordSet $rs -Overwrite

then

$rs = New-AzureRmDnsRecordSet -Name "www" -RecordType "CNAME" `
      -ZoneName "something.com" -ResourceGroupName "DNSRecords" `
      -Ttl 60 -Overwrite -Force
Add-AzureRmDnsRecordConfig -RecordSet $rs -Cname "example.com"
Set-AzureRmDnsRecordSet -RecordSet $rs -Overwrite

This will create your zone apex record and point the www cname to it making example.com and www.example.com point to the same place.

For a Wildcard you replace the Apex "@" with an asterix "*" so something like

$rs = New-AzureRmDnsRecordSet -Name "*" -RecordType A `
       -ZoneName example.com -ResourceGroupName $RG `
       -Ttl $ttl -Force -Overwrite
#You know the rest



回答2:


As the previous answer stated, you can't create a CNAME at the zone apex (name = "@"). This is because of the RFC constraints, and the correct approach is to use other record types e.g. A records at the zone apex instead, as the previous respondent explained.

However, you can create a wildcard CNAME at the zone apex. Since wildcards do not match against empty strings in DNS, they do not fall foul of the RFC constraints. For example, in PowerShell:

$z = New-AzureRmDnsZone -Name myzone.com -ResourceGroupName MyResourceGroup
$rs = New-AzureRmDnsRecordSet -Name "*" -Zone $z -Ttl 3600 -RecordType CNAME
Add-AzureRmDnsRecordConfig -RecordSet $rs -Cname cnametarget.com
Set-AzureRmDnsRecordSet -RecordSet $rs

This will resolve for queries to e.g. foo.myzone.com but not for myzone.com.

Wikipedia has a good page to learn more about wildcard DNS.



来源:https://stackoverflow.com/questions/34585964/wildcard-and-naked-cname-records-in-azure-dns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!