¿Pueden los subdominios (nombre de dominio) tener un guión bajo "_"?


212

¿Pueden los subdominios (nombres de dominio) tener subrayado _?


12
He tomado tu pregunta literalmente: que realmente te referías a NOMBRES DE DOMINIO. Si, en cambio, te referías a NOMBRES DE ANFITRIÓN, edita tu pregunta, porque la respuesta será diferente.
bortzmeyer

Respuestas:


362

La mayoría de las respuestas dadas aquí son falsas . Es perfectamente legal tener un guión bajo en un nombre de dominio. Permítanme citar el estándar, RFC 2181, sección 11, "Sintaxis de nombre" :

El DNS en sí coloca solo una restricción en las etiquetas particulares que pueden usarse para identificar registros de recursos. Esa restricción se relaciona con la longitud de la etiqueta y el nombre completo. [...] Las implementaciones de los protocolos DNS no deben imponer restricciones en las etiquetas que se pueden usar. En particular, los servidores DNS no deben negarse a servir una zona porque contiene etiquetas que pueden no ser aceptables para algunos programas de cliente DNS.

Consulte también la especificación DNS original, RFC 1034 , sección 3.5 "Sintaxis de nombre preferido", pero léala detenidamente.

Los dominios con guiones bajos son muy comunes en la naturaleza. Compruebe _jabber._tcp.gmail.como _sip._udp.apnic.net.

Otros RFC mencionados aquí tratan diferentes cosas. La pregunta original era para los nombres de dominio . Si la pregunta es para nombres de host (o para URL, que incluyen un nombre de host), entonces esto es diferente, el estándar relevante es RFC 1123 , sección 2.1 "Nombres y números de host " que limita los nombres de host a letras, dígitos, guiones.


73
+1 por la diferencia entre "nombres de dominio" y "nombres de host"
Alnitak

3
La pregunta (a menos que se haya editado) es sobre subdominios, es decir. nombres de host No está equivocado acerca de sus afirmaciones fácticas, excepto que señala que las respuestas son falsas, en función de cómo está redactada la pregunta actualmente.
redreinard

44
Estoy confundido, 1034 dice "Las etiquetas deben seguir las reglas para los nombres de host de ARPANET. Deben comenzar con una letra, terminar con una letra o un dígito y tener como caracteres interiores solo letras, dígitos y guiones". ¿Qué parte de eso permite un guión bajo?
claudekennilol

2
La redacción es confusa. Las URL no pueden tener guiones bajos. Una URL siempre es un FQDN, no es un nombre de host. Un FQDN puede tener un nombre de host vacío, en este caso FQDN = dominio. _jabber._tcp.gmail.comno es un dominio, es un FQDN. Debido a que las URL no pueden tener un guión bajo, probablemente nunca podrá comprar un dominio con un guión bajo. Por lo tanto, incluso si los dominios también pueden tener guiones bajos desde el punto de vista de la sintaxis de DNS, nunca encontrará ninguno, a menos que sea local.
Cápsula

1
No puedo ver la cita en 2.1 de rfc1123 que menciona algo sobre los guiones permitidos. Puedo ver en el rfc952 que un nombre puede ser <let-or-digit-or-hyphen>. ¿Es eso lo que usted se refería?
AJP

93

Una nota sobre terminología, en apoyo a la respuesta de Bortzmeyer

Uno debe ser claro acerca de las definiciones. Como se usa aquí:

  • nombre de dominio es el identificador de un recurso en una base de datos DNS
  • etiqueta es la parte de un nombre de dominio entre puntos
  • hostname es un tipo especial de nombre de dominio que identifica los hosts de Internet

El nombre de host está sujeto a las restricciones de RFC 952 y la ligera relajación de RFC 1123

RFC 2181 deja en claro que hay una diferencia entre un nombre de dominio y un nombre de host:

... [el hecho de que] cualquier etiqueta binaria puede tener un registro MX no implica que se pueda usar ningún nombre binario como parte del host de una dirección de correo electrónico ...

Entonces, los guiones bajos en los nombres de host son un no-no, los guiones bajos en los nombres de dominio están bien

En la práctica, uno puede ver nombres de host con guiones bajos. Como dice el principio de robustez : "Sea conservador en lo que envía, liberal en lo que acepta".

Una nota sobre codificación

¡En el siglo XXI, resulta que los nombres de host y los nombres de dominio pueden internacionalizarse! Esto significa recurrir a codificaciones en el caso de etiquetas que contienen caracteres que están fuera del conjunto permitido.

En particular, permite codificar los nombres_ de host en (Actualización 2017-07: Esto es dudoso, ver comentarios. _Todavía no se puede usar en nombres de host. De hecho, ni siquiera se puede usar en etiquetas internacionalizadas).

El primer RFC para la internacionalización fue el RFC 3490 de marzo de 2003, "Internacionalización de nombres de dominio en aplicaciones (IDNA)". Hoy tenemos:

  • RFC 5890 "IDNA: definiciones y marco de documentos"
  • RFC 5891 "IDNA: Protocolo"
  • RFC 5892 "Los puntos de código Unicode e IDNA"
  • RFC 5893 "Scripts de derecha a izquierda para IDNA"
  • RFC 5894 "IDNA: Antecedentes, explicación y justificación"
  • RFC 5895 "Cartografía de caracteres para IDNA 2008"

También puede consultar la entrada de Wikipedia

RFC 5890 presenta el término etiqueta LDH (Letter-Digit-Hypen) para las etiquetas utilizadas en los nombres de host y dice:

Esta es la forma de etiqueta clásica utilizada, aunque con algunas restricciones adicionales, en los nombres de host (RFC 952). Su sintaxis es idéntica a la descrita como la "sintaxis de nombre preferido" en la Sección 3.5 de RFC 1034 modificada por RFC 1123. Brevemente, es una cadena que consta de letras ASCII, dígitos y el guión con la restricción adicional de que el guión no puede aparecer al principio o al final de la cadena. Como todas las etiquetas DNS, su longitud total no debe exceder los 63 octetos.

Volviendo a tiempos más simples, este borrador de Internet es una propuesta temprana para la internacionalización del nombre de host . Los nombres de host con caracteres internacionales pueden codificarse utilizando, por ejemplo, la codificación 'RACE' .

El autor de la propuesta 'Codificación RACE' señala:

De acuerdo con RFC 1035, las partes del host deben ser insensibles a mayúsculas y minúsculas, comenzar y finalizar con una letra o dígito y contener solo letras, dígitos y el carácter de guión ("-"). Esto, por supuesto, excluye cualquier carácter internacionalizado, así como muchos otros caracteres en el repertorio de caracteres ASCII. Además, las partes de nombre de dominio deben tener 63 octetos o menos de longitud ... Todas las partes de nombre post-convertidas que contienen caracteres internacionalizados comienzan con la cadena "bq--". (...) Se eligió la cadena "bq--" porque es extremadamente improbable que exista en las partes del host antes de que se produjera esta especificación.


En una nota al margen, "Los sistemas como DomainKeys y los registros de servicio utilizan el guión bajo como un medio para asegurar que su carácter especial no se confunda con los nombres de host. Por ejemplo, _http._sctp.www.example.com especifica un puntero de servicio para un SCTP host de servidor web capaz (www) en el dominio example.com ". ( enlace )
x-yuri

Ignore las porciones de codificación RACE, IDN ya configuró la conversión de caracteres internacionalizados a ASCII utilizando el prefijo 'xn--'.
mootmoot

2
@ Nelda.techspiress Ha sido un tiempo pero de acuerdo con RFC 1034: Nombres de dominio - Conceptos y Servicios , lo que se llama un "subdominio" de un dominio bar.baz.(por ejemplo) es sólo la colección de nombres de dominio que son jerárquicamente por debajo bar.baz., por ejemplo a.bar.baz., f.g.bar.baz., h.bar.baz., etc. Este "subdominio" puede incluir o no nombres de host reales .
David Tonhofer

2
En el uso diario, uno puede tender a llamar incorrectamente a la cadena a.bar.baz(un nombre de dominio) "un subdominio de" la cadena bar.baz(otro nombre de dominio). Los nombres de dominio (recursos de la base de datos DNS) a.bar.bazy bar.bazpueden o no ser nombres de host .
David Tonhofer

1
En la página 8 de RFC 1034 , leemos: Un dominio se identifica por un nombre de dominio, y consiste en esa parte del espacio de nombre de dominio que está en o debajo del nombre de dominio que especifica el dominio. Un dominio es un subdominio de otro dominio si está contenido dentro de ese dominio. Esta relación se puede probar al ver si el nombre del subdominio termina con el nombre del dominio que lo contiene. Por ejemplo, ABCD es un subdominio de BCD, CD, D y "".
David Tonhofer

47

Es posible que necesite saber algo adicional: si la parte del host o subdominio de la url contiene un guión bajo, IE9 (no ha probado otras versiones) no puede escribir cookies.

Así que ten cuidado con eso. :-)



3
Acabamos de tener eso en un proyecto y estaba a punto de volverme loco por los extraños problemas de IE allí. Hasta que descubrimos el guión bajo en el subdominio. ; o)
Kai Mattern

3
Sigue siendo un problema en IE10. ¿MS sabe de esto?
Piotr Kula

15
Más relevante: ¿A MS le importa esto?
Ajax


11

Aclarando a bortzmeyer y David Tonhofer , las etiquetas de nombre de dominio y subdominio pueden contener guiones bajos, pero en ningún otro lugar.

Como escribió David Tonhofer , las etiquetas son partes intermedias y deben seguir la regla LDH, excepto cuando se especifican etiquetas de servicio y etiquetas de puerto para diferenciarlas de las etiquetas normales. Luego, deben aparecer al comienzo de la etiqueta, que deben ser los "Nombres cortos" del Registro de nombre de servicio y número de puerto , el número de puerto sin ceros iniciales o el protocolo (es decir, tcp, udp). Estas etiquetas de servicio están limitadas a 15 caracteres.

  • RFC2782 especifica subdominios de registro de servicio de prefijos con guiones bajos.
  • RFC6698 especifica números de puerto de prefijo con guiones bajos en los registros del certificado TLSA.

Contrariamente a la respuesta de David Tonhofer , IDN no permite codificar el guión bajo ('_' U + 005F LOW LINE) ni ningún otro carácter ASCII no válido.

De RFC5890

[..] dos nuevos subconjuntos de etiquetas LDH son creados por la introducción de IDNA. Estas se denominan etiquetas LDH reservadas (etiquetas R-LDH) y etiquetas LDH no reservadas (etiquetas NR-LDH). Las etiquetas LDH reservadas, conocidas como "nombres de dominio etiquetados" en algunos otros contextos, tienen la propiedad de que contienen "-" en el tercer y cuarto caracteres, pero que de lo contrario se ajustan a las reglas de etiquetas LDH .

Punycode codifica todos los puntos de código ASCII como ASCII directamente, incluido el guión bajo. La R-LDH resultante no cumpliría las reglas de la etiqueta LDH. Por ejemplo, Σ_.comse codificaría como lo xn--_-zmb.comque viola las reglas. Puede haber un punto de código homográfico que parece un guión bajo que puede codificarse legalmente (tal vez '_' U + FF3F de ancho bajo de línea completa), pero este tipo de puntos de código se categorizaría como NO DESACTIVADO por RFC5892 en 2.3 Propiedades ignorables como un No_Código_Punto.

RACE (el otro esquema de codificación IDN propuesto) no fue aceptado como estándar por IETF y no debe usarse.


1
Finalmente. No puedo creer que esta sea la única publicación en toda la página que incluso habla sobre punycode.
Pacerier

6

Seguí el enlace a RFC1034 y leí la mayor parte y me sorprendió ver esto:

Las etiquetas deben seguir las reglas para los nombres de host de ARPANET. Deben comenzar con una letra, terminar con una letra o dígito y tener como caracteres interiores solo letras, dígitos y guiones. También hay algunas restricciones en la longitud. Las etiquetas deben tener 63 caracteres o menos.

Para aclarar, los nombres de dominio están formados por etiquetas que están separadas por puntos ".". Esta especificación debe estar desactualizada porque no menciona el uso de guiones bajos. Puedo entender la confusión si alguien tropieza con esta especificación sin saber que es obsoleta. Es obsoleto, ¿no?

Seguí el enlace a RFC2181 y leí un poco. Especialmente cuando se trata de la cuestión de qué es un nombre autorizado o canónico, y la cuestión de lo que hace que una etiqueta DNS sea válida.

Como se publicó anteriormente, indica que solo hay una restricción de longitud y, para resumir, se lee:

(sobre nombres y etiquetas válidas)

Estos ya están especificados adecuadamente, sin embargo, las especificaciones parecen a veces ignorarse. Buscamos reforzar las especificaciones existentes.

Me deja preguntándome si "una restricción de longitud solamente" es "adecuada". ¡Vamos a comenzar a ver nombres de dominio como @ # $%! ¿pronto? ¿No está Internet lo suficientemente jodido?


3
No, no es obsoleto. RFC1034 es una especificación sobre nombres de host , un caso especial de nombres de dominio , que son identificadores genéricos de recursos en la base de datos DNS. Por ejemplo, la parte "host" de los URI se define de manera bastante relajada ( tools.ietf.org/html/rfc3986#section-3.2.2 ) pero el RFC advierte: "Un host identificado por un nombre registrado es una secuencia de caracteres generalmente destinado a la búsqueda dentro de un registro de nombre de host o servicio definido localmente ... un nombre registrado destinado a la búsqueda en el DNS utiliza la sintaxis definida en la Sección 3.5 de [RFC1034] y la Sección 2.1 de [RFC1123] ".
David Tonhofer

3

Recientemente, el foro CAB (*) decidió que

Todos los certificados que contengan un carácter de subrayado en cualquier entrada de dNSName y tengan un período de validez de más de 30 días DEBEN ser revocados antes del 15 de enero de 2019. https://cabforum.org/2018/11/12/ballot-sc-12- puesta de sol de guiones bajos en dnsnames /

Esto significa que ya no puede usar guiones bajos en dominios que tendrán un certificado SSL / TLS.

(*) El Foro del navegador de la Autoridad de certificación (CA / Browser Forum) es una reunión voluntaria de los principales emisores de certificados (como se define en la Sección 2.1 (a) (1) y (2) a continuación) y los proveedores de software de navegador de Internet y otras aplicaciones que utilizar certificados (Consumidores de certificados, como se define en la Sección 2.1 (a) (3) a continuación).


1

Los TLD individuales pueden colocar sus propias reglas y restricciones en los nombres de dominio según lo consideren conveniente, como para acomodar los idiomas locales.

Por ejemplo, según el CIRA , los .canombres de dominio de Canadá están permitidos:

  • Cartas aa través z, y los siguientes caracteres acentuados: é ë ê è â à æ ô œ ù û ü ç î ï ÿ. Tenga en cuenta que los nombres de dominio no distinguen entre mayúsculas y minúsculas. Esto significa que no habrá distinción entre letras mayúsculas y minúsculas ( A= a);

  • Los números 0123456789y

  • El carácter de guión (" -) (aunque no se puede usar para iniciar o finalizar un Nombre de dominio).

La longitud máxima es de 63 caracteres, excepto que cada carácter acentuado reduce ese límite en 4 caracteres.

( Fuente )


Por cierto, esto permite alrededor de 4 posibilidades de nombre de dominio Quadragintillion (sin contar subdominios) para dominios punto-ca.


0

Aquí mis 2 centavos del mundo Java:

Desde una consola Spark Scala, con Java 8:

scala> new java.net.URI("spark://spark_master").getHost
res10: String = null

scala> new java.net.URI("spark://spark-master").getHost
res11: String = spark-master

scala> new java.net.URI("spark://spark_master.google.fr").getHost
res12: String = null

scala> new java.net.URI("spark://spark.master.google.fr").getHost
res13: String = spark.master.google.fr

scala> new java.net.URI("spark://spark-master.google.fr:3434").getHost
res14: String = spark-master.google.fr

scala> new java.net.URI("spark://spark-master.goo_gle.fr:3434").getHost
res15: String = null

Definitivamente es una mala idea ^^


0

Acabo de crear un proyecto local (con vagabundo) y funcionaba perfectamente cuando se accedía a través de la dirección IP. Luego agregué some_name.test al archivo hosts e intenté acceder a él de esa manera, pero recibía "mala solicitud - 400" todo el tiempo. Perdí horas hasta que descubrí que solo cambiar el nombre de dominio a some-name.test resuelve el problema. Entonces, al menos localmente en Mac OS no funciona.


0

No, no puede usar el guión bajo en el subdominio sino en el guión (guión). es decir, my-subdomain.agahost.com es aceptable y my_subdomain.agahost.com no sería aceptable.


-2

No si quieres que se resuelva en Internet.

No puede tener: http://my_subdomain.example.com no es válido.

Puede tener: http://my-subdomain.example.com con un guión.


Es después del 15 de enero de 2019: su contraejemplo no funciona.
Joe Inwap

@JoeInwap ¿Puede indicarme una fuente para su comentario?
ankshah

Iba por cabforum.org/2018/11/12/… y el hecho de que o_o.lgms.nl presenta un certificado que no es válido para ese nombre de host. El nombre, sin embargo, se resuelve.
Joe Inwap
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.