srv 記錄的有效區域名稱或有效服務名稱是什麼?
我一直在關註一些關於如何使用 A 記錄和 SRV 記錄將域映射到特定 ip 和埠的指南/問題,例如
1.1.1.1:1889
:https://stackoverflow.com/questions/11433570/how-to-use-srv-or-any-other-record-do-redirect-a-domain
https://stackoverflow.com/questions/19015138/how-to-redirect-dns-to-different-ports
在上述問題中,他們建議使用 SRV 記錄。我唯一不清楚的部分是如何確定
service
在我的 SRV 記錄中使用的正確名稱?例如,假設我有這些記錄mysql.example.com. 86400 IN A 1.1.1.1 mongo.example.com. 86400 IN A 1.1.1.1 www.example.com. 86400 IN A 1.1.1.1 mosquitto.example.com. 86400 IN A 1.1.1.1 _mysql._tcp.example.com. 86400 IN SRV 10 20 3306 mysql.example.com. _mongo._tcp.example.com. 86400 IN SRV 10 20 27017 mongo.example.com. _http._tcp.example.com. 86400 IN SRV 10 20 3306 www.example.com. _mqtt._tcp.example.com. 86400 IN SRV 10 20 3306 mosquitto.example.com.
我的 SRV 記錄中使用的服務名稱是否
_mysql, _mongo, _http and _mqtt
正確? 我完全猜到了這些服務名稱,因為我找不到列出所有可以使用的可接受服務名稱的網站。
最初的網路瀏覽器根本不遵循
SRV
記錄,所以即使你可以設計它們,它們也毫無用處。現在給出一個通用過程,以了解任何記錄
SRV
中的內容,例如。IANA 是事物的守護者,因此請訪問https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4,您可以在其中看到
SRV
它在 RFC 2782 中定義在那裡它被定義為:
以下是 SRV RR 的格式,其 DNS 類型程式碼為 33:
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
然後分別:
服務
The symbolic name of the desired service, as defined in Assigned Numbers [STD 2] or locally. An underscore (_) is prepended to the service identifier to avoid collisions with DNS labels that occur in nature.
和
所以
The symbolic name of the desired protocol, with an underscore (_) prepended to prevent collisions with DNS labels that occur in nature. _TCP and _UDP are at present the most useful values for this field, though any name defined by Assigned Numbers or locally may be used (as for Service). The Proto is case insensitive.
$$ STD 2 $$參考是 RFC 1700,但 RFC 3232 廢棄了它,以使可能值的數據庫線上……這再次由 IANA 管理。 它現在在那裡:https ://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml請注意,它基本上是您
/etc/services
在任何 Unix 框中的文件中找到的內容.所以收回你的例子(你的埠號在描述的多
SRV
條記錄中是錯誤的):
mysql
確實是為埠定義的,3306
因此它作為服務名稱有效,因此在SRV
記錄中- 對於 port
27017
,服務名稱是mongodb
, notmongo
(但 Mongo 客戶是否尊重SRV
記錄?)http
確實是為埠定義的,80
因此它是一個有效的服務名稱(以及https
埠 443)mqtt
被定義為有效的埠名稱,對於 port1883
。但與上述相同的問題,客戶是否使用SRV
記錄?還請注意,在野外有各種
SRV
不遵循上述記錄的記錄。如果它們可以發布它們“工作”,那麼即使它們不使用上述註冊服務名稱,也不會阻止它們在 DNS 級別解析,只要某些應用程序當然會讀取它們。例如,您可以在網上找到很多範例
_sip._tls
,_sipfederationtls._tcp
它們都是錯誤的:tls
不是有效的協議,sipfederantiontls
也不是有效的服務名稱(實際上太長了,如https://www.rfc-editor. org/rfc/rfc6335.html#section-5.1指定它的長度最多為 15 個字元)。因此,某些工具/UI 可能會阻止在區域文件中創建這些記錄,並且某些名稱伺服器可能會拒絕載入它們,但在大多數情況下它們會起作用(如果應用程序確實使用它們)。