srv 記錄的有效區域名稱或有效服務名稱是什麼?

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.

_mysql, _mongo, _http and _mqtt我的 SRV 記錄中使用的服務名稱是否正確? 我完全猜出了這些服務名稱,因為我無法找到列出所有可以使用的可接受的服務名稱的網站。

答案1

首先,網頁瀏覽器根本不遵循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,而不是mongo(但是 Mongo 用戶端是否尊重SRV記錄?)
  • http確實是為連接埠定義的,80因此它是有效的服務名稱(https對於連接埠 443)
  • mqtt被定義為有效的連接埠名稱,對於 port 1883。但與上面同樣的問題,客戶是否使用SRV記錄?

也要注意的是,在野外存在著SRV不符合上述內容的各種記錄。如果它們可以發布,那麼它們就可以“工作”,即使它們不使用上述註冊服務名稱,也沒有什麼可以阻止它們在 DNS 層級的解析,當然只要某些應用程式確實讀取它們即可。

例如,您可以在網路上找到很多_sip._tls或 的範例_sipfederationtls._tcp,它們都是錯誤的:tls不是有效的協議,並且sipfederantiontls是有效的服務名稱(實際上太長了,因為https://www.rfc-editor.org/rfc/rfc6335.html#section-5.1指定其長度最多為 15 個字元)。因此,某些工具/UI 可能會阻止在區域檔案中建立這些記錄,並且某些名稱伺服器可能會拒絕載入它們,但在大多數情況下它們會起作用(如果應用程式確實使用它們)。

相關內容