2016-01-04 85 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地址的流量管理系統的一部分。 –