2016-01-04 55 views
1

我正在将所有DNS服务迁移到Azure DNS。使用PowerShell我已经设法成功地创建CNAME记录,以获得www.something.com解决到Azure的网站 -Azure DNS中的通配符和裸CNAME记录

$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 

但如何创建通配符和裸地址一样

CNAME记录* .something.com或something.com

我假设它的东西(没有双关语意)做

新AzureRmDnsRecordSet -Name “WWW”

但通过所有的文档和Internet例子,我似乎无法找到正确的措词。

回答

1

您遇到的问题是rules of DNS的问题,该问题禁止将CNAME记录存储在其他记录存在的位置。裸地址(或顶点)example.com已经有两个记录(SOA和NS),因此不允许CNAME。

如果一个CNAME RR存在于一个节点上,其他数据应该不存在 ;这可以确保规范名称及其别名 的数据不能不同。此规则还可以确保缓存的CNAME可以使用 ,而无需与其他RR类型的授权服务器进行检查。

为了创建Apex记录,即example.com,您需要使用A记录,这意味着它需要指向Azure网站的IP。一旦你有了,你可以创建一个从www到example.com的CNAME。 (这是支持的方法 - 为天青网站的IP地址是静态的)

你正在寻找的命令,会像

$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 

然后

$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 

这将创建区域顶点记录并将www cname指向它,使example.com和www.example.com指向同一地点。

对于一个通配符你一个星号代替的Apex“@”,“*”,所以像

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

正如前面的回答说,你不能创建在区顶点的CNAME(NAME = “@”)。这是因为RFC约束,正确的方法是使用其他记录类型,例如如前一位受访者所解释的那样,该区域顶点的记录会改变。

但是,您可以在区域顶点创建通配符CNAME。由于通配符与DNS中的空字符串不匹配,因此它们不受RFC约束的限制。例如,在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 

这样可以解决查询问题,例如, foo.myzone.com但不适用于myzone.com。

Wikipedia has a good page了解有关通配符DNS的更多信息。

+0

像DNSimple这样的一些服务已经“发明”了自己的自定义记录,如Alias和URL(https://support.dnsimple.com/articles/differences-between-a-cname-alias-url/)这使得管理区域文件变得更容易,但是在封面下做了很多工作以使所有符合RFC的文件。然后,像我这样的人从他们的服务转移到那些不具备这些功能的人,而我们难以理解如何让事情发挥作用? – TRH

+0

这是一种方式。部分挑战是诸如“别名”记录的功能是非标准的,因此可能具有意想不到的效果。例如,从DNS标准的角度来看,“别名”记录需要像A记录一样解析,即使它的配置类似于CNAME记录。在幕后,DNS提供商需要将别名目标解析为A记录。在某些情况下,这可能会引起意想不到的副作用,例如如果别名目标后面的DNS记录发生变化,或者是依赖于源查询IP地址的流量管理系统的一部分。 –