Namensauflösung nach Namen in /etc/hosts

Namensauflösung nach Namen in /etc/hosts

Ich muss die Website-Leistung über verschiedene Webproxys von meiner Fedora 19-Box aus überprüfen und möchte dies tun, indem ich in meiner /etc/hostsDatei einen lokal auflösbaren Namen „Proxy“ für die DNS-aufgelösten Namen unserer Proxys einstelle. Der Inhalt der /etc/hostsDatei sollte also ungefähr so ​​aussehen:

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

Wenn ich dann einen anderen Proxy testen muss, kann ich einfach die /etc/hostsDatei bearbeiten und einen anderen Proxy-DNS-Namen auskommentieren, und alle meine Anmeldungen (und alle anderen, die meinen Computer verwenden) werden mit dem neuen Proxy verglichen. Und die meisten der oben genannten DNS-Namen sind Round-Robin-Einträge, was auch in Ordnung ist und für meine Tests erforderlich ist. (Ehrlich gesagt brauche ich dies auch für die eigentliche Arbeit, da proxy.us ab und zu überlastet ist und einer der anderen Proxys schneller ist als proxy.us.)

Wie gehe ich dabei vor? Ich habe überlegt, ein Skript zum Ändern der http_proxyUmgebungsvariable zu schreiben, aber mit dieser Methode müsste ich jedem Prozess einen zusätzlichen Schritt hinzufügen, um alle Variablen meiner Anmeldungen miteinander abzustimmen. Ich möchte es nur an einer Stelle ändern. /etc/hostsscheint der logischste Ort zu sein, um eine systemweite Namensauflösungsänderung wie diese vorzunehmen.

Antwort1

/etc/hosts ordnet Namen nur IP-Adressen zu. Sie können einen Namen nicht auf einen anderen Namen verweisen lassen.

Sie könnten zwar immer noch /etc/hosts verwenden, müssten dazu aber ein Skript erstellen, das den Namen in eine IP auflöst und /etc/hosts mit dieser IP ändert, oder die Arbeit im Voraus erledigen, indem Sie mehrere Hosts-Dateien erstellen und Ihr Skript die Datei dann einfach für jeden Proxy an die richtige Stelle der Prüfung verschieben lassen.

Antwort2

Dies ist nicht möglich. Die beste Lösung für mein Anliegen ist die Installation eines Namensauflösers (Bind, Named) und die Aktualisierung seiner lokalen Tabellen mit den FQDNs der Proxys.

Antwort3

Hier ist ein Python-Skript, das macht, was Sie wollen:

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

verwandte Informationen