我一直在关注一些关于如何使用 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 中定义在那里它被定义为:
然后分别:
和
[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
记录中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 可能会阻止在区域文件中创建这些记录,并且某些名称服务器可能会拒绝加载它们,但在大多数情况下它们会起作用(如果应用程序确实使用它们)。