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/locationments/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/locationments/service-names-port-numbers/service-names-port-numbers.xhtml그리고 그것은 기본적으로 /etc/services
모든 Unix 상자에 있는 파일에서 찾을 수 있다는 점에 유의하십시오.
따라서 예제를 다시 살펴보겠습니다(그러나 묘사된 여러 레코드에서는 포트 번호가 잘못되었습니다 SRV
).
mysql
실제로 포트에 대해 정의되어 있으므로3306
서비스 이름으로 유효하므로SRV
레코드 에 있습니다.- port의 경우
27017
서비스 이름mongodb
은 입니다.mongo
(그러나 Mongo 클라이언트는 기록을 존중합니까SRV
?) http
실제로 포트에 대해 정의되었으므로80
유효한 서비스 이름입니다(및https
포트 443에 대해).mqtt
port 에 대한 유효한 포트 이름으로 정의됩니다1883
. 하지만 위와 같은 질문입니다. 클라이언트는SRV
레코드를 전혀 사용합니까?
SRV
또한 위의 내용을 따르지 않는 다양한 기록이 있다는 점에 유의하세요 . 게시할 수 있는 경우 "작동"합니다. 물론 일부 응용 프로그램에서 이를 읽는 한 위와 같이 등록된 서비스 이름을 사용하지 않더라도 DNS 수준에서 해결을 방해할 수는 없습니다.
_sip._tls
예를 들어 or online 에서 많은 예제를 찾을 수 있는데 _sipfederationtls._tcp
둘 다 잘못된 것입니다. tls
유효한 프로토콜이 아니며 sipfederantiontls
유효한 서비스 이름도 아닙니다(실제로 너무 깁니다.https://www.rfc-editor.org/rfc/rfc6335.html#section-5.1길이가 최대 15자여야 함을 지정합니다). 따라서 일부 도구/UI는 영역 파일에 해당 레코드를 생성하는 것을 방지할 수 있으며 일부 네임서버는 해당 레코드 로드를 거부할 수 있지만 대부분의 경우 작동합니다(애플리케이션이 해당 레코드를 사용하는 경우).