帶有 IP 地址的 Hostaliases 文件
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
以查詢 FQDN10.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