【问题标题】:Wildcard and Naked CNAME records in Azure DNSAzure DNS 中的通配符和裸 CNAME 记录
【发布时间】:2016-01-04 06:43:52
【问题描述】:

我正在将我的所有 DNS 服务迁移到 Azure DNS。使用 Powershell,我成功地创建了 CNAME 记录,以使 www.something.com 解析为 Azure 网站-

$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

我假设这是与

相关的事情(不是双关语)

New-AzureRmDnsRecordSet -Name "www"

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

【问题讨论】:

    标签: powershell azure dns


    【解决方案1】:

    您遇到的问题是rules of DNS 的问题,它禁止存在另一条记录的 CNAME 记录。裸地址(或 Apex)example.com 已经有两条记录(SOA 和 NS),因此不允许使用 CNAME。

    如果节点上存在 CNAME RR,则不应包含其他数据 展示;这确保了规范名称及其别名的数据 不能不同。此规则还确保缓存的 CNAME 可以 在没有与权威服务器检查其他 RR 类型的情况下使用。

    为了创建 Apex 记录,即 example.com,您需要使用 A 记录,这意味着它需要指向您的 Azure 网站的 IP。一旦你有了它,你就可以创建一个从 www 到 example.com 的 CNAME。 (这是受支持的方法 - Azure 网站的 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
    

    【讨论】:

      【解决方案2】:

      如上一个答案所述,您不能在区域顶点(名称 =“@”)创建 CNAME。这是因为 RFC 的限制,正确的方法是使用其他记录类型,例如正如之前的受访者所解释的那样,A 记录在区域顶点。

      但是,您可以在区域顶点创建通配符 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 的更多信息。

      【讨论】:

      • 真正的问题是像 DNSimple 这样的一些服务已经“发明”了他们自己的自定义记录,比如别名和 URL (support.dnsimple.com/articles/…),这使得管理区域文件更容易,但在幕后做了很多工作使所有 RFC 兼容。然后像我这样的人从他们的服务转移到没有这些功能的服务,我们很难过如何让事情正常工作?
      • 这是一种表达方式。部分挑战在于“别名”记录等功能是非标准的,因此可能会产生意想不到的影响。例如,从 DNS 标准的角度来看,“别名”记录需要像 A 记录一样解析,即使它的配置类似于 CNAME 记录。在幕后,DNS 提供商需要将别名目标解析为 A 记录。在某些情况下,这可能会导致意想不到的副作用,例如如果该别名目标背后的 DNS 记录发生更改,或者是依赖于源查询 IP 地址的流量管理系统的一部分。
      猜你喜欢
      • 2020-06-27
      • 1970-01-01
      • 2014-04-17
      • 2016-01-01
      • 2011-10-06
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多