2009-03-12 16 views
158

El archivo /etc/hosts se puede utilizar para anular las definiciones de DNS, es decir, para señalar un nombre de host con una dirección IP diferente.¿Puedo utilizar el archivo/etc/hosts para configurar un alias

Quiero usar /etc/hosts para hacer un registro de alias, es decir para hacer que mi computadora piense que www.misitio.com no apunta a una ip "codificada" sino que es sinónimo de mychangingip.myip.com.

¿Se puede hacer?

Respuesta

138

/etc/hosts no se puede utilizar (por sí mismo) para producir nombres de host "alias".

El archivo hosts produce el equivalente interno de los registros A y PTR del DNS, es decir, la asignación del nombre de host a la dirección IP y viceversa.

Si bien puede agregar varios nombres a una dirección IP específica, es necesario que conozca la dirección IP con anticipación. No se puede usar para producir el mismo efecto que un registro CNAME, donde un nombre apunta a otro nombre que a su vez resuelve la IP deseada.

+1

Creo que cualquier cosa después de 2 "columnas" del archivo/etc/hosts se considera "alias", que es similar al concepto cname. también, puedes tener más de ellos. pero no puede combinar el método de "archivos" con el método "dns" (consulte nsswitch.conf), por lo que no es posible vincularlo con el registro DNS CNAME. – mighq

+0

@mighq, de hecho, puedes crear _additional_ alias con esas columnas, pero aún tienes que poner algo en la _first_columna. Por lo tanto, su "solución" aún requeriría una dirección IP codificada. – Alnitak

-2

No lo creo, el archivo hosts no es realmente una alternativa del servidor dns. En lugar de tratar de averiguar cómo instalar y configurar bind dns, es posible que desee probar SheerDNS basado en archivos. http://threading.2038bug.com/sheerdns/ (mejor servidor liviano de dns que encontré a través de la carne fresca).

+8

SheerDNS parece muy roto: devuelve paquetes DNS ilegales cuando coloca un tipo de registro de recursos que no reconoce, no maneja (como SPF), no reconoce registros AAAA, no responde a NINGUNA solicitud , etc. Parece un experimento de estudiante, no más. – bortzmeyer

10

Miré esto recientemente, no pude encontrar una solución real. Sin embargo, usted puede conseguir en parte lo que quiere mediante la adición de una línea de búsqueda en /etc/resolv.conf por ejemplo:

search myip.com

Luego se buscará mychangingip.myip.com cuando se trata de resolver mychangingip Véase también la página man para resolv.conf

13

Esta secuencia de comandos shell podría hacer el truco para usted, si solo necesita tener la IP actualizada en su archivo de hosts y no le gusta la sobrecarga de una configuración de DNS personalizada . Podría, por ejemplo, ejecutarlo regularmente como un cronjob.

#!/bin/bash 
# Get the dynamic IP (dirty, I know) 
IP=`host -t a mychangingip.myip.com | perl -nle '/((?:\d+\.?){4})/ && print $1' | head -n1` 

# Update the hosts file 
if test -n "$IP"; then 
    grep -v www.thesite.com /etc/hosts > /tmp/hosts 
    echo "$IP www.thesite.com" >> /tmp/hosts 
    cp /tmp/hosts /etc/hosts 
fi 
1

Existen proveedores de servicios que lo harán de manera cómoda y confiable. Un ejemplo destacado es dyndns.

2

Una nota de precaución es si usted tiene una entrada como esta:

127.0.0.1  dev.example.com 

Cuando usted consigue realmente la solicitud dentro de su aplicación (en mi caso ASP.NET) se han resuelto convenientemente indicado a 'localhost' por lo que no puede hacer cosas como esta:

if (Request.Url.Authority == "dev.example.com) { 
    // ... 
} 

El alias se resuelve en 'localhost'. Creo que este comportamiento funciona como si fuera un CNAME

+0

Si esto es algo que necesita identificar, puede configurar el adaptador de red de bucle invertido (sí, todavía está disponible en Windows 8) y crear cualquier número de direcciones IP locales para fines de prueba –

151

Si desea SSH a un servidor (con una entrada DNS que cambia dinámicamente), entonces puede agregar efectivamente un "alias" por (en el archivo ~/.ssh/config) la creación de una entrada:

Host myAlias 
    HostName mychangingip.myip.com 

a continuación, se puede "myAlias ​​ssh" (hay otras directivas que pueden ser de utilidad, por ejemplo, de los usuarios, de puertos, etc.).

+9

@WeiboLi Estoy totalmente en desacuerdo - el OP específicamente mencionado 'www.misitio.com', lo que implica que HTTP está en uso, y no SSH. – Alnitak

+1

Has clavado mi caso de uso, aunque estaba pensando en los mismos términos que el OP. Estaba pensando en términos de hosts y la red, no ssh. –

10

Esto se puede hacer ejecutando una resolución de DNS local (algo así como dnsmasq). Comprobar https://serverfault.com/questions/22419/set-dns-server-on-os-x-even-when-without-internet-connection

+2

+1 Esta es la solución más robusta al problema general de configurar alias de DNS en una máquina local. Todas las demás soluciones sugeridas hasta ahora son muy extravagantes (como actualizar/etc/hosts con cron) o solo funcionan para protocolos específicos (ssh, http). – Ajedi32

30

Tuve el mismo problema exacto y lo resolví instalando y usando nginx en mi mac. No necesita un servidor DNS para hacer esto. Puede aprovechar la opción proxy_pass de nginx para obtener el mismo efecto que cname.

Una vez que haya instalado y configurado nginx, puede alias first.com para second.com de esta manera. En su/etc/hosts reenviar first.com tráfico a 127.0.0.1.

127.0.0.1 first.com 

El en su configuración de nginx, añada lo siguiente:

server { 
    listen 80; 
    server_name first.com; 
    access_log off; 
    location/{ 
     proxy_pass http://second.com; 
     proxy_set_header Host   $host; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-for $remote_addr; 
     proxy_connect_timeout 300; 
    } 
} 

Esto efectivamente debería darle una configuración similar a cname. ¡Espero que ayude!

+1

Esto es asombroso. Acabo de utilizar esta técnica para probar un sitio de WordPress que estaba migrando a un nuevo servidor: normalmente tienes que preocuparte por cambiar los archivos de configuración, pero al usar esto simplemente copié todo al nuevo servidor (que estaba disponible en una URL diferente), y luego usé lo anterior para redirigir la URL anterior a la nueva para verificar que funcionó. Gracias por ahorrarme mucho tiempo! –

Cuestiones relacionadas