Hostaliases-Datei mit einer IP-Adresse

8

Mit der HOSTALIASESUmgebungsvariablen können Benutzer ihre eigenen Host-Aliase festlegen, anstatt dies zu müssen sudoedit /etc/hosts(weitere Details, z. B. unter http://blog.tremily.us/posts/HOSTALIASES/ ).

Mit kann /etc/hostsich jedoch IP-Adressen zu Namen und Namen zu Namen aliasen, während HOSTALIASESnur mit Name-zu-Name-Aliasing zu funktionieren scheint.

Ich habe es versucht:

cat > .hosts
work 10.10.0.1
g www.google.com
^D
export HOSTALIASES=$PWD/.hosts

und nun

curl g #works 
curl 10.10.0.1 #works
curl work #doesn't work

Kann ich curl workarbeiten, ohne eine Datei bearbeiten zu müssen, für die ich keine Schreibberechtigung habe ( /etc/hosts)?

PSkocik
quelle
Für mich geht das. Wie steht es mit curl -v workund getent hosts work?
Yaegashi
$? == 6: ... Host 'Arbeit' konnte nicht aufgelöst werden ... UND $? == 2: <keine Ausgabe>. getent hosts gbringt mir $? == 0: 2a00: 1450: 400c: c05 :: 67 www.google.com
PSkocik
Ich habs. Ich bin auf dem GNOME-Desktop und verwende NetworkManager und dnsmasq. Es wird 10.10.0.1für eine Datensatzabfrage für den Domänennamen zurückgegeben 10.10.0.1., als ob sie inet_aton()angewendet würde. BIND gibt NXDOMAIN für solche Abfragen zurück. Sie können es sehen durchhost 10.10.0.1. <nameserver address>
yaegashi
Ich nehme an, es betrachtet die Alias-Zeichenfolge 10.10.0.1als einen Domainnamen wie er ist, fragt einfach nach libnss-Resolver-Modulen.
Yaegashi
1
Übrigens können Sie einen öffentlichen Dienst wie xip.io verwenden , um eine beliebige IPv4-Adresse mithilfe von Domainnamen abzurufen : work 10.10.0.1.xip.io.
Yaegashi

Antworten:

12

HOSTALIASESDie Funktion wird durch die Resolver-Funktion gethostbyname()in glibc bereitgestellt . In dieser Funktion wird ein Alias-Suchergebnis unverändert an nachfolgende libnss-Modulaufrufe übergeben, die von hosts:in angegeben werden. /etc/nsswitch.confWenn also kein Modul vorhanden ist, das damit umgehen kann, tritt ein gethostbyname()Fehler auf.

Beachten Sie, dass in den meisten Programmen die numerische Adressnotation wie 10.10.0.1und 2a00:1450:400c:c05::67von inet_aton() inet_pton() getaddrinfo()vorher verarbeitet gethostbyname()wird.

Einige DNS-Server, einschließlich dnsmasq, geben gültige Adressdatensätze an Abfragen mit einer numerischen Adresszeichenfolge zurück, als ob sie darauf inet_aton()angewendet würden: z. B. geben sie einen Eintrag zurück, um den vollqualifizierten Domänennamen 10.10.0.1abzufragen 10.10.0.1.. Andere Server, einschließlich BIND, geben jedoch nur NXDOMAIN für solche Abfragen zurück. Sie können sich also nicht darauf verlassen, dass work 10.10.0.1Sie dies HOSTALIASESals Alternative zu definieren /etc/hosts.

Eine mögliche Problemumgehung besteht darin, einen öffentlichen DNS-Dienst wie xip.io zu verwenden, um auflösbare FQDNs für beliebige IPv4-Adressen zu erhalten. Zum Beispiel können Sie festlegen , workfür 10.10.0.1wie folgt aus :

work 10.10.0.1.xip.io
yaegashi
quelle
Vielen Dank. Ich habe dnsmasq installiert und gestartet und die IP-Zeile in der HOSTALIASES-Datei funktioniert jetzt.
PSkocik