Domain-Name-System

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

  • April 10, 2022

我一直在關註一些關於如何使用 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, not 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 可能會阻止在區域文件中創建這些記錄,並且某些名稱伺服器可能會拒絕載入它們,但在大多數情況下它們會起作用(如果應用程序確實使用它們)。

引用自:https://serverfault.com/questions/1098283