Tenho seguido alguns guias/perguntas sobre como usar registros A e registros SRV para mapear um domínio para um IP e porta específicos, como 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
Em questões como as acima, eles recomendam o uso de registros SRV. A única parte que não tenho certeza é como determinar o service
nome correto a ser usado em meu registro SRV. Por exemplo, digamos que eu tenha esses registros
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.
Os _mysql, _mongo, _http and _mqtt
nomes de serviço corretos para usar em meus registros SRV? Adivinhei completamente esses nomes de serviços porque não consegui encontrar um site que listasse todos os nomes de serviços aceitáveis que podem ser usados.
Responder1
Primeiro, os navegadores da web não seguem SRV
nenhum registro; portanto, mesmo que você possa projetá-los, eles serão inúteis.
Agora dado o processo genérico para saber o que entra em qualquer registro, tomando SRV
como exemplo.
IANA é a guardiã das coisas, então acessehttps://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4onde você pode ver SRV
que está definido na RFC 2782
Lá é definido como tal:
Aqui está o formato do SRV RR, cujo código de tipo DNS é 33:
_Service._Proto.Name TTL Class SRV Priority Weight Port Target
com então respectivamente:
Serviço
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.
e
Proto
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.
A referência [STD 2] é RFC 1700, mas a RFC 3232 a tornou obsoleta para criar um banco de dados online de valores possíveis... que é novamente administrado pela IANA.
Agora está lá:https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtmle observe que é basicamente o que você encontra no arquivo /etc/services
de qualquer caixa Unix.
Então, retomando seus exemplos (seus números de porta estão errados em vários SRV
registros descritos):
mysql
é de fato definido para porta,3306
portanto é válido como nome de serviço e, portanto, em umSRV
registro- para port
27017
, o nome do serviço émongodb
, nãomongo
(mas os clientes Mongo honramSRV
os registros?) http
é de fato definido para a porta,80
portanto é um nome de serviço válido (ehttps
para a porta 443)mqtt
é definido como um nome de porta válido, para port1883
. Mas mesma pergunta acima: os clientes usamSRV
registros?
Observe também que existem vários SRV
registros na natureza que não seguem o acima. Se puderem ser publicados, eles "funcionam", nada impedirá a resolução deles no nível DNS, mesmo que não usem um nome de serviço registrado como acima, desde que algum aplicativo os leia.
Por exemplo, você pode encontrar muitos exemplos com _sip._tls
ou _sipfederationtls._tcp
online, que estão errados: tls
não é um protocolo válido e sipfederantiontls
não é um nome de serviço válido (e na verdade é muito longo, comohttps://www.rfc-editor.org/rfc/rfc6335.html#section-5.1especifica que deve ter no máximo 15 caracteres). Portanto, algumas ferramentas/IU podem impedir a criação desses registros em um arquivo de zona e alguns servidores de nomes podem se recusar a carregá-los, mas na maioria dos casos eles funcionarão (se os aplicativos os consumirem).