Eu 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 em que não estou claro é como determinar o service
nome correto a ser usado no 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 são usados em meus registros SRV? Eu adivinhei completamente esses nomes de serviço porque não consegui encontrar um site que listasse todos os nomes de serviço aceitáveis que podem ser usados.
Os primeiros navegadores da Web não seguem
SRV
os registros, portanto, mesmo que você possa projetá-los, eles são inúteis.Agora dado o processo genérico para saber o que entra em qualquer registro, tomando
SRV
como exemplo.A IANA é a guardiã das coisas, então vá para https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4 onde você pode ver
SRV
que está definido na RFC 2782Aí se define assim:
com então respectivamente:
e
[STD 2] a referência é a RFC 1700, mas a RFC 3232 a tornou obsoleta para fazer 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.xhtml e observe que é basicamente o que você encontra no arquivo
/etc/services
em qualquer caixa Unix .Portanto, retomando seus exemplos (seus números de porta estão errados em vários
SRV
registros descritos):mysql
é de fato definido para a porta3306
, portanto, é válido como nome de serviço e, portanto, em umSRV
registro27017
, o nome do serviço émongodb
, nãomongo
(mas os clientes do Mongo honram osSRV
registros?)http
está realmente definido para a porta80
, 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 a mesma pergunta acima, os clientes usamSRV
registros?Observe também que existem vários
SRV
registros em estado selvagem que não seguem o acima. Se eles podem ser publicados, eles "funcionam", ou seja, nada impedirá a resolução deles no nível do DNS, mesmo que eles 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 ambos errados:tls
não é um protocolo válido esipfederantiontls
não é um nome de serviço válido (e na verdade é muito longo, como https://www.rfc-editor. org/rfc/rfc6335.html#section-5.1 especifica que deve ter no máximo 15 caracteres). Portanto, algumas ferramentas/UI 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).