resolución de nombres por nombre en /etc/hosts

resolución de nombres por nombre en /etc/hosts

Tengo que verificar el rendimiento del sitio web a través de varios servidores proxy web desde mi equipo Fedora 19, y quiero hacerlo configurando un nombre local resoluble "proxy" para los nombres resueltos por DNS para nuestros servidores proxy en mi /etc/hostsarchivo. Entonces, el contenido del /etc/hostsarchivo debería verse así:

proxy.us.company.com    proxy
#proxy.eu.company.com    proxy
#proxy.sa.company.com    proxy

Luego, cuando necesite probar un proxy diferente, puedo simplemente editar el /etc/hostsarchivo y descomentar un nombre DNS de proxy diferente, y todos mis inicios de sesión (y todos los demás que usen mi máquina) se compararán con el nuevo proxy. Y la mayoría de los nombres DNS anteriores son entradas circulares, lo cual también está bien y es necesario para mis pruebas. (A decir verdad, también necesito esto para el trabajo real, porque de vez en cuando proxy.us se atasca y uno de los otros proxies termina siendo más rápido que proxy.us).

¿Cómo voy a hacer esto? Consideré escribir un script para cambiar la http_proxyvariable env, pero con ese método necesitaría agregar un paso adicional a cada proceso para alinear todas las variables de mis inicios de sesión. Quiero cambiarlo en un solo lugar. /etc/hostsParece el lugar más lógico para realizar un cambio de resolución de nombre en todo el sistema como este.

Respuesta1

/etc/hosts solo asigna nombres a direcciones IP. No puede apuntar un nombre a otro nombre.

Todavía puedes usar /etc/hosts, pero tendrás que crear un script resolviendo el nombre en una IP y modificando /etc/hosts con esa IP o hacer el trabajo con anticipación, creando múltiples archivos de hosts y haciendo que tu script simplemente se mueva. el archivo en su lugar para cada proxy en el momento adecuado de la verificación.

Respuesta2

Esto no se puede hacer. La mejor solución para hacer lo que quiero es instalar un solucionador de nombres (vinculado, nombrado) y actualizar sus tablas locales con los FQDN de los servidores proxy.

Respuesta3

Aquí hay un script en Python que hace lo que quieres:

#!/usr/bin/env python
from dns.resolver import Resolver
from re import sub
hostsfile='/etc/hosts'
proxies = [
    'proxy.us.company.com',
    'proxy.eu.company.com',
    'proxy.sa.company.com'
]
name = 'proxy'

def main():
    proxy = menu('Select proxy:', proxies)
    ip = Resolver().query(proxy,'A')[0].to_text()
    if len(ip):
        with open(hostsfile, 'r') as h:
            hosts = h.read()
        with open(hostsfile, 'w+') as h:
            hosts = sub('((\n|(?<!\n)\.)(1?\d?\d|2[0-4]\d|25[0-5])){4} +'+name+'(?= *\n)', '\n'+ip+' '+name, hosts)
            h.write(hosts)

def getInt(question, min, max):
    min,max = [int(max),int(min)] if min>max else [int(min),int(max)]
    while True:
        try:
            answer = int(raw_input('{0}: '.format(question)))
            if min <= answer <= max:
                return answer
            print('Must be a number from {0} to {1}'.format(min,max))
        except ValueError:
            print('Not a valid number')

def menu(title, items, index=False):
    print(title)
    for i, item in enumerate(items):
        print('{0}. {1}'.format(i+1, item))
    answer = getInt('', 1, len(items)) - 1
    return answer if index else items[answer]

main()

información relacionada