私は、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 レコードで使用するサービス名は正しいですか? 使用できるすべての許容可能なサービス名をリストしている Web サイトを見つけることができなかったので、これらのサービス名を完全に推測しました。
答え1
まずウェブブラウザはレコードを全く追わないのでSRV
、設計できたとしても役に立たない。
SRV
ここで、例を挙げて、レコードに何が含まれるかを知るための一般的なプロセスを示します。
IANAは物事の守護者なので、https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4SRV
RFC 2782で定義されていることがわかります。
そこでは次のように定義されています。
DNS タイプ コードが 33 である SRV RR の形式は次のとおりです。
_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
(ただし、Mongo クライアントはSRV
レコードを尊重しますか?) 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 文字の長さにする必要があることを指定します)。そのため、一部のツール/UI ではゾーンファイル内にこれらのレコードを作成できない場合があります。また、一部のネームサーバーではそれらの読み込みを拒否する場合がありますが、ほとんどの場合は機能します (アプリケーションがそれらを消費する場合)。