resolução de nome por nome em /etc/hosts

resolução de nome por nome em /etc/hosts

Tenho que verificar o desempenho do site por meio de vários webproxies da minha caixa Fedora 19 e quero fazer isso definindo um nome resolvível local "proxy" para os nomes resolvidos de DNS para nossos proxies em meu /etc/hostsarquivo. Portanto, o conteúdo do /etc/hostsarquivo deve ser parecido com isto:

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

Então, quando eu precisar testar um proxy diferente, posso simplesmente editar o /etc/hostsarquivo e descomentar um nome DNS de proxy diferente, e todos os meus logins (e todos os outros que usam minha máquina) serão verificados no novo proxy. E a maioria dos nomes DNS acima são entradas round-robin, o que também é adequado e necessário para meus testes. (Verdade seja dita, eu também preciso disso para o trabalho real, porque de vez em quando o proxy.us fica atolado e um dos outros proxies acaba sendo mais rápido que o proxy.us.)

Como faço para fazer isso? Eu considerei escrever um script para alterar a http_proxyvariável env, mas com esse método eu precisaria adicionar uma etapa adicional a cada processo para alinhar todas as variáveis ​​dos meus logins. Quero alterá-lo apenas uma vez. /etc/hostsparece o lugar mais lógico para fazer uma alteração na resolução de nomes em todo o sistema como esta.

Responder1

/etc/hosts mapeia apenas nomes para endereços IP. Você não pode apontar um nome para outro nome.

Você ainda pode usar /etc/hosts, mas terá que criar um script para resolver o nome para um IP e modificar /etc/hosts com esse IP ou fazer o trabalho com antecedência, criando vários arquivos de hosts e fazer com que seu script simplesmente se mova o arquivo no lugar para cada proxy no ponto apropriado da verificação.

Responder2

Isto não pode ser feito. A melhor solução para fazer o que desejo é instalar um resolvedor de nomes (bind, nomeado) e atualizar suas tabelas locais com os FQDNs dos proxies.

Responder3

Aqui está um script python que faz o que você deseja:

#!/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()

informação relacionada