Hosts

帶有 IP 地址的 Hostaliases 文件

  • August 29, 2015

HOSTALIASES環境變數允許使用者設置他們自己的主機別名,而不是必須(sudoedit /etc/hosts更多細節,例如,在http://blog.tremily.us/posts/HOSTALIASES/

但是,/etc/hosts我可以將 IP 地址別名為名稱,並將名稱別名為名稱,而HOSTALIASES似乎只能使用名稱到名稱的別名。

我試過:

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

現在

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

我可以curl work在不需要編輯我沒有 ( /etc/hosts) 寫入權限的文件的情況下工作嗎?

HOSTALIASES功能由gethostbyname()glibc 中的解析器功能提供。在此函式中,別名查找結果按原樣傳遞給hosts:in指定的後續 libnss 模組呼叫/etc/nsswitch.conf,因此,如果沒有可以處理它的模組,gethostbyname()將以失敗告終。

請注意,在大多數程序中,數字地址表示法10.10.0.1和之前2a00:1450:400c:c05::67處理的inet_aton() inet_pton() getaddrinfo()一樣gethostbyname()被呼叫。

一些 DNS 伺服器,包括 dnsmasq,將有效的地址記錄返回給帶有數字地址字元串的查詢,就像inet_aton()應用於它一樣:例如,它們返回 A 記錄10.10.0.1以查詢 FQDN 10.10.0.1.。但是,包括 BIND 在內的其他伺服器只為此類查詢返回 NXDOMAIN。因此,您不能依靠它work 10.10.0.1在您HOSTALIASES的中定義為/etc/hosts.

一種可能的解決方法是利用像xip.io這樣的公共 DNS 服務來為任意 IPv4 地址獲取可解析的 FQDN。例如,您可以work這樣定義10.10.0.1

work 10.10.0.1.xip.io

引用自:https://unix.stackexchange.com/questions/226260