Я следовал нескольким руководствам/вопросам о том, как использовать записи 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
записи- для порта
27017
имя службы —mongodb
, а неmongo
(но учитывают ли клиенты MongoSRV
записи?) http
действительно определен для порта80
, поэтому это допустимое имя службы (иhttps
для порта 443)mqtt
определяется как допустимое имя порта, для порта1883
. Но тот же вопрос, что и выше, используют ли клиентыSRV
записи вообще?
Обратите внимание, что в дикой природе существуют различные SRV
записи, не соответствующие вышеизложенному. Если их можно опубликовать, они "работают", то есть ничто не помешает их разрешению на уровне DNS, даже если они не используют зарегистрированное имя службы, как указано выше, пока какое-то приложение, конечно, читает их.
Например, вы можете найти множество примеров с _sip._tls
или _sipfederationtls._tcp
в Интернете, которые оба неверны: tls
это недопустимый протокол и sipfederantiontls
недопустимое имя службы (и на самом деле слишком длинное, какhttps://www.rfc-editor.org/rfc/rfc6335.html#section-5.1указывает, что длина имени должна быть не более 15 символов). Поэтому некоторые инструменты/пользовательский интерфейс могут помешать созданию этих записей в файле зоны, а некоторые серверы имен могут отказаться загружать их, но в большинстве случаев они будут работать (если приложения их используют).